резкое выделение области из размытого фона на одном изображении с использованием python и opencv - PullRequest
0 голосов
/ 07 января 2019

На изображении, подобном приведенному ниже, мне нужно отделить передний план, который на самом деле является рукой очков, от размытого глянцевого фона. pls click to see the image

Для этого я попробовал несколько разных подходов. Я попробовал коды некоторых недавних исследовательских работ по резкому выделению переднего плана; но они не дают желаемых результатов, которые я ищу. Я также попытался использовать некоторые методы выделения размытых областей, такие как Gaussian и Fourier, чтобы отбросить фон; но они находят некоторые части, которые для глаз размыты, как острые области. Я также пытался использовать преобразование Хафа для обнаружения прямых линий, которые, хотя обычно работают лучше, чем другие подходы, иногда все же иногда дают сбой случайным образом и их трудно обобщить.

У меня есть опыт работы в компьютерном зрении, но я не особенно разбираюсь в обработке изображений, поэтому мой пост здесь, в поиске, чтобы получить некоторые подсказки от экспертов.

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Перед сегментацией я бы преобразовал исходное изображение во что-то, измеряющее «размытость» на пиксель. Наименее размытой частью должен быть ваш передний план для сегментирования.

Тогда возникает сложный вопрос, как измерить размытость? Возможно, вы захотите взглянуть на метрики «матрицы совпадений», «энтропию гистограммы» скользящего окна и еще кое-что (см. Литературу) и объединить их в меру, которая подходит для ваших входных изображений.

0 голосов
/ 07 января 2019

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

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

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

TL; DR: бинаризовать изображение, расширить его несколько раз, чтобы улучшить связность краев, выполнить анализ BLOB-объектов, чтобы получить список объектов в изображении по их связности, затем вернуться к исходному изображению, использовать местоположение По данным анализа BLOB-объектов, чтобы определить прочность краев в областях вокруг разных BLOB-объектов, самые сильные края будут наиболее фокусируемыми участками, которые вы затем сможете сегментировать. Даже после всего этого это может не сработать, потому что эта проблема действительно трудна.

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