В общем, это проблема сегментации изображения ( 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 )
Это изолирует сфокусированные части изображения для вас.
Надеюсь это поможет.
Вот более простой подход, который не включает анализ скользящих окон.
Преобразуйте ваше изображение в оттенки серого (это не обязательно, но я предполагаю, что у вас есть только один канал для ясности)
Рассчитать градиент в обоих направлениях
Рассчитайте величину (или просто возведите в квадрат градиент)
Суммируйте оба градиентных изображения в обоих направлениях
Как уже было сказано, сфокусированная часть изображения будет иметь более высокие частоты, чем не сфокусированная область. В результате суммирования вы получите две проекции, в которых много вариаций (более высоких значений) в той части, где сфокусированный объект расположен вдоль этого направления. Теперь вы можете сделать следующее:
Определите начальную и конечную точку этих более высоких значений. Вы можете использовать простой порог (например, 0,7 * максимум_значения) или сгладить профили, взять вторую производную и проверить, есть ли там самые высокие значения.
Позиции Старт / Стоп с предыдущего шага дают вам позиции пикселей в обоих направлениях, где разместить прямоугольник, указывающий область острых углов.
источник