Нахождение координат самого яркого пикселя на изображении и ввод их в массив - PullRequest
2 голосов
/ 09 ноября 2011

Меня попросили написать программу для поиска «звезд» на изображении путем преобразования файла изображения в массив с нулевыми значениями и создания массива координат самых ярких пикселей на изображении выше указанного порога (представляющего фоновые помехи).).Как только я нашел самый яркий пиксель в изображении, я должен записать его координаты x, y и установить значение этого пикселя и окружающей области пикселей 10X10 на ноль, эффективно удаляя звезду из изображения.У меня уже есть вспомогательный код, который преобразует изображение в массив, и я попытался решить эту проблему следующим образом;

Я определил переменную

    Max = array.max()

и использовал цикл while;

    while Max >= threshold
        coordinates = numpy.where(array == Max) # find the maximum value

однако я хочу, чтобы это перебирало весь массив для всех координат, не только найти первый максимум, а также удалить каждый максимум, когда он найден, и установить окружающую область 10X10 на ноль.Я думал об использовании цикла for для этого, но не уверен, как его использовать, так как я новичок в Python.

Буду признателен за любые предложения, спасибо

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

Есть несколько способов сделать это просто с помощью numpy и т. Д.

Есть способ "грубой силы":

import Image
import numpy as np

im = Image.open('test.bmp')
data = np.array(im)
threshold = 200
window = 5 # This is the "half" window...
ni, nj = data.shape 
new_value = 0

for i, j in zip(*np.where(data > threshold)):
    istart, istop = max(0, i-window), min(ni, i+window+1)
    jstart, jstop = max(0, j-window), min(nj, j+window+1)
    data[istart:istop, jstart:jstop] = new_value

Или более быстрый подход ...

import Image
import numpy as np
import scipy.ndimage

im = Image.open('test.bmp')
data = np.array(im)
threshold = 200
window = 10 # This is the "full" window...
new_value = 0

mask = data > threshold
mask = scipy.ndimage.uniform_filter(mask.astype(np.float), size=window)
mask = mask > 0
data[mask] = new_value
2 голосов
/ 09 ноября 2011

Astronomy.net сделает это за вас:

Если у вас есть астрономическое изображение неба с небесными координатами, которые вы не знаете - или не доверяете - тогда астрометрия.net для вас.Введите изображение, и мы вернем вам метаданные астрометрической калибровки, а также списки известных объектов, попадающих в поле зрения.

Мы создали эту службу астрометрической калибровки для создания правильных, соответствующих стандартам астрометрических мета-данные для каждого полезного астрономического изображения, когда-либо сделанного, прошлого и будущего, в любом состоянии архивного беспорядка.Мы надеемся, что это поможет упорядочить, аннотировать и сделать доступной для поиска всю мировую астрономическую информацию.

Вам даже не нужно загружать изображения на их веб-сайт.Вы можете скачать источник .Он лицензирован по GPL и использует NumPy, поэтому вы можете обойти его, если вам нужно.

Обратите внимание, что вам сначала нужно будет преобразовать ваше растровое изображение в одно из следующих: JPEG, GIF, PNG,или подходит изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...