Как заполнить «дыры» в изображении? - PullRequest
6 голосов
/ 28 февраля 2012

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

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

Ответы [ 3 ]

6 голосов
/ 28 февраля 2012

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

3 голосов
/ 28 февраля 2012

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

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

1 голос
/ 11 июня 2013

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

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

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

...