Изолировать не размытую часть изображения

10

У меня есть изображение, снятое камерой мобильного телефона с фокусировкой на части, скажем, на лице или чем-то еще. Я хочу знать, примерно, где находится сфокусированная область. Например, ограничительная рамка вокруг сфокусированной области. пример : оригинал После обнаружения

Хумам Хельфави
источник

Ответы:

7

В общем, это проблема сегментации изображения ( http://en.wikipedia.org/wiki/Image_segmentation ), в которой вы пытаетесь выделить сфокусированные и не сфокусированные области изображения.

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

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

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

Чтобы отличить «размытые» от «не размытых» областей, вы можете установить «окно» измерений и навести его на изображение.M×N

В каждой позиции окна вычисляют дисперсию значений «заплат», как если бы они были одномерным вектором из значений. Это приведет к другому «изображению» (или, в более общем случае, двумерному массиву), изображающему изменение стандартного отклонения в каждом месте вашего изображения. Затем вы можете собрать все эти значения и получить их гистограмму. Гистограмма будет демонстрировать мультимодальное распределение (для получения дополнительной информации см. Http://en.wikipedia.org/wiki/Multimodal_distribution ).M×N

В случае изображения в вашем посте гистограмма, скорее всего, будет демонстрировать два режима. Один соответствует относительно высоким значениям стандартного отклонения (сфокусированная область), а другой соответствует относительно низким значениям стандартного отклонения (размытые области).

Затем вы можете расположить порог, например, только между двумя режимами, чтобы установить критерий между вашими сфокусированными и не сфокусированными областями, а затем выбрать все «участки» (или области окна MxN), стандартное отклонение которых выше, чем ваш порог. (Для получения дополнительной информации см .: http://en.wikipedia.org/wiki/Thresholding_%28image_processing%29 )

Это изолирует сфокусированные части изображения для вас.

Надеюсь это поможет.

a_a
источник
Я собираюсь сделать глубокое чтение для вашего ответа и вернуться с обратной
связью
Большое спасибо, отличный и подробный ответ, я собираюсь поделиться реализацией, если я получил хорошие результаты, используя opencv, еще раз спасибо
Humam Helfawi
Кстати, достаточно ли серого представителя изображения или мне нужно обработать каждый канал?
Хумам Хельфави,
Рад, что ты нашел это полезным. Работа в оттенках серого прекрасно подойдет для различия между размытыми и сфокусированными областями, но включение дополнительной информации о цвете может помочь вам назначить более сложные области (например, отследить область лица на портрете или выделить только цветок на рисунке в Ваше сообщение).
A_A
Вопрос был отредактирован в первоначальном виде после обсуждения по адресу: meta.dsp.stackexchange.com/questions/1337/… @ vast-acadeian. Пожалуйста, добавьте свои комментарии в качестве отдельного ответа. Основная часть была сохранена по адресу: pastebin.com/kjCC1wM6
A_A
5

Вот более простой подход, который не включает анализ скользящих окон.

  • Преобразуйте ваше изображение в оттенки серого (это не обязательно, но я предполагаю, что у вас есть только один канал для ясности)

  • Рассчитать градиент в обоих направлениях

  • Рассчитайте величину (или просто возведите в квадрат градиент)

  • Суммируйте оба градиентных изображения в обоих направлениях

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

  • Определите начальную и конечную точку этих более высоких значений. Вы можете использовать простой порог (например, 0,7 * максимум_значения) или сгладить профили, взять вторую производную и проверить, есть ли там самые высокие значения.

  • Позиции Старт / Стоп с предыдущего шага дают вам позиции пикселей в обоих направлениях, где разместить прямоугольник, указывающий область острых углов.

M529
источник