Здесь важно отметить, что изображение может иметь несколько размытых и резких областей. Например, если изображение содержит портретную фотографию, изображение на переднем плане будет четким, а фон размытым. В спортивной фотографии объект в фокусе резкий, а фон обычно размыт. Одним из способов обнаружения такого пространственно изменяющегося размытия на изображении является проведение анализа в частотной области в каждом месте изображения. Одной из статей, посвященных этой теме, является "Spatially-Varying Blur Detection Based on Multiscale Fused and Sorted Transform Coefficients of Gradient Magnitudes" (cvpr2017)
.
- авторы рассматривают коэффициенты DCT с несколькими разрешениями для каждого пикселя. Эти коэффициенты DCT делятся на низкие, средние и высокие частотные диапазоны, из которых выбираются только высокочастотные коэффициенты.
- Затем коэффициенты DCT объединяются и сортируются для формирования
multiscale-fused and sorted high-frequency transform coefficients
- Выбирается подмножество этих коэффициентов. количество выбранных коэффициентов является настраиваемым параметром, зависящим от приложения.
- Затем выбранное подмножество коэффициентов отправляется через блок максимального объединения, чтобы сохранить наивысшую активацию во всех шкалах. Это дает карту размытия в качестве вывода, которая затем отправляется через этап постобработки для уточнения карты.
Эту карту размытия можно использовать для количественной оценки резкости в различных областях изображения. Чтобы получить единую глобальную метрику для количественной оценки размытости всего изображения, можно использовать среднее значение этой карты размытия или гистограмму этой карты размытия.
Вот несколько примеров результатов работы алгоритма: ![введите здесь описание изображения](https://i. stack.imgur.com/WnvMm.png)
Резкие области изображения имеют высокую интенсивность в blur_map, тогда как размытые области имеют низкую интенсивность.
Ссылка на проект на github: https://github.com/Utkarsh-Deshmukh/Spatially-Varying-Blur-Detection-python
Реализацию этого алгоритма на python можно найти на pypi, который можно легко установить, как показано ниже:
pip install blur_detector
Пример фрагмента кода для создания карты размытия выглядит следующим образом:
import blur_detector
import cv2
if __name__ == '__main__':
img = cv2.imread('image_name', 0)
blur_map = blur_detector.detectBlur(img, downsampling_factor=4, num_scales=4, scale_start=2, num_iterations_RF_filter=3)
cv2.imshow('ori_img', img)
cv2.imshow('blur_map', blur_map)
cv2.waitKey(0)
person
Utkarsh Deshmukh
schedule
26.05.2021