Интерполяция по изображению для маркировки плохих пикселей в питоне
Привет у меня есть изображение подходит с pyfits.getdata
который имеет тяжелое виньетирование вдоль углов изображения. Я создаю второй numpy
массив с теми же размерами, что и исходное изображение, со значением для плохого пикселя, равным 1, и пригодным для использования значением, равным 0. Для обнаружения точечных источников я использую pysex
на исходном изображении. pysex
рутина обнаруживает колебания в области виньетирования как точечные источники. Как я могу интерполировать массив, отмечая плохие пиксели. я пытался scipy.interpolate.griddata
а также scipy.interpolate.interp2d
и требуемые аргументы не ясны, что является самым простым решением?
2 ответа
У вас плохой пиксель в (x0,y0) = 5,10, а другой в (x1,y1) = 50,100
output = Scipy.interpolate.map_coordinat(array,np.array([[5,50],[10,100]]))
1bad_value = output[0]
2bad_value = output[1]
это как [x0,x1,x2,x3],[y0,y1,y2,y3], не очень интуитивно, я признаю
Вы хотите больше, Это действительно хороший пост: быстрая интерполяция данных сетки
Но на самом деле я бы использовал scipy.filter.uniform_filter для плохих пикселей. Это дает вам значение среднего числа соседей. Это не такая точная кубическая интерполяция, но она более надежна. Еще лучше scipy.filter.median_filter, если у вас есть 2 плохих пикселя рядом друг с другом.
Я думаю map_coordinates
должен быть в состоянии дать вам то, что вы хотите:
index_vignetted = scipy.ndimage.map_coordinates(vignette, point_sources)
Это вернет вам вектор со значением вашей виньетки для пикселя под местоположением каждого точечного источника.