2012-02-28 2 views
6

У меня есть фото изображения галактик. Есть некоторые нежелательные данные об этих изображениях (например, звезды или полосы самолетов), которые замаскированы. Я не просто хочу заполнять маскированные области некоторым средним значением, а интерполировать их в соответствии с окружающими данными. Как это сделать в python?Как заполнить «дыры» на изображении?

Мы пробовали различные функции в пакете SciPy.interpolate: RectBivariateSpline, interp2d, splrep/splev, map_coordinates, но все они, похоже, работают в поиске новых пикселей между существующими пикселями, мы не смогли заставить их заполнить произвольные " отверстие "в данных.

+8

Запуск двух или более зондов в космос в разных направлениях. После того как их взгляд больше не будет препятствовать объекту, блокирующему ваш взгляд с Земли, попросите их сделать снимок интересующего вас участка пространства. Объединив изображения с некоторой формой интерполяции, вы можете получить очень хорошее приближение какая часть пространства будет выглядеть с Земли, если бы вид не был заблокирован. – Swiss

+0

@Swiss lol ... seriuosly? – neizod

+1

@Swiss - опубликуйте, что в качестве ответа, если он будет принят, вы будете героем Интернета навсегда. – Gleno

ответ

6

Что вы хотите назвать Inpainting.
OpenCV имеет функцию inpaint(), которая делает то, что вы хотите.

+0

спасибо за правильное ключевое слово - inpaint. openCV может быть не лучшим вариантом, так как астрономические изображения составляют 64 бит на пиксель, когда openCV позволяет 1-канальное 8-битное или 3-канальное 8-битное изображение (максимум 24 бит на пиксель). Я нашел простую реализацию inpainting: https://github.com/gasagna/openpiv-python/blob/master/openpiv/src/lib.pyx – miceuz

+0

@miceuz Mathematica имеет функцию Inpaint, которая может работать с изображениями с двойной точностью , –

+0

Также см. G'MIC для рисования, http://gmic.eu. Я использовал его для областей NO_DATA с большим успехом. 'gmic -h -inpaint' – RobLabs

3

Что вы хотите, это не интерполяция вообще. Интерполяция зависит от предположения, что данные между известными точками примерно смежны. В любом нетривиальном изображении это не так.

На самом деле вы хотите что-то вроде заливки, содержащейся в содержании, которая находится в Photoshop CS5. Существует бесплатная альтернатива, доступная в GIMP через плагин GIMP-resynthesize. Эти фильтры чрезвычайно продвинуты, и попытки их повторного внедрения безумны. Лучшим вариантом было бы выяснить, как использовать GIMP-resynthesize в вашей программе.

+3

На самом деле, resynthesize была там раньше, так что «есть платная альтернатива, доступная в CS5 через наполнение контента» ... – Kheldar

1

Я сделал свой первый каркасный питон скрипт, который может помочь вам: my scripts

Это называется условным фильтром, как это матричный фильтр, заполнить все прозрачные пиксели изображения в соответствии со средним значением его 4 ближайшими соседей, которые не являются прозрачными. Обязательно используйте изображение RGBA только с 0 и 255 прозрачными значениями.

Его грубая, простая, медленная, неоптимизированная, но без ошибок.

Смежные вопросы