Pull to refresh

Восстановление смазанных и расфокусированных изображений с помощью фильтра Винера. Реализация на C++ OpenCV

Reading time2 min
Views24K

В продолжении статьи про восстановление расфокусированных и смазанных изображений хочу поделиться своими результатами восстановления реальных изображений с помощью фильтра Винера. В качестве библиотеки обработки изображений использовалась OpenCV 3.4. Фотокамера – Nikon D320, объектив Nikon DX AF-S NIKKOR 18-105mm, расфокусировка осуществлялась вручную, съёмка осуществлялась без штатива.


Результаты восстановления расфокусированных изображений


При расфокусировке искажающая система хорошо аппроксимируется цилиндрической функцией рассеяния точки (ФРТ) радиуса r.


o_psf
Цилиндрическая ФРТ


Ниже приведены результаты восстановления трёх реальных расфокусированных изображений одного и того же объекта (страницы книги). Съёмка проводилась без штатива с расстояния примерно 50 см. Степень расфокусировки объектива вручную увеличивалась от кадра к кадру. Параметры фильтра Винера r и отношение сигнал/шум (SNR) подбирались вручную таким образом, чтобы обеспечить наилучшее визуальное качество восстановления. Для компенсации краевых эффектов производится плавное уменьшение яркости изображения на краях.


o1f
Изображение A


o1r_gamma-var_640
Результат восстановления изображения A. r = 53, SNR = 5200


o2f
Изображение B


o2r_gamma-var_640
Результат восстановления изображения B. r = 66, SNR = 4400


o3f
Изображение C


o3r_gamma-var_640
Результат восстановления изображения C. r = 102, SNR = 7100


Видно, что даже при существенной расфокусировке читаемость текста практически
полностью восстанавливается.


Результаты восстановления смазанных изображений автомобильных номеров


Смаз изображения возникает при взаимном движении камеры и объекта относительно друг друга во время экспозиции. Рассмотрим только тот случай, когда снимаемый объект линейно перемещается относительно неподвижной камеры. В таком случае искажающая система хорошо аппроксимируется ФРТ в виде отрезка, который направлен вдоль движения объекта. Такая ФРТ задаётся двумя параметрами: L длина и THETA угол смаза.


m_psf
ФРТ при линейном смазе


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


m1
Искажённое изображение двух легковых автомобилей


Ниже представлены результаты восстановления номеров обоих автомобилей с помощью фильтра Винера. Значение параметров L, THETA и SNR подбирались таким образом, чтобы обеспечить наилучшее визуальное качество восстановления номера автомобиля.


m2
Результат восстановления номера светлого автомобиля. L = 78, THETA = 15, SNR = 300


m3
Результат восстановления номера тёмного автомобиля. L = 125, THETA = 0, SNR = 700


Видно, что даже при значительном смазе удаётся восстановить читаемость номеров
автомобилей.


Алгоритм фильтрации реализован на C++ OpenCV в виде консольного приложения.
Исходные коды можно найти по ссылкам ниже.


https://github.com/VladKarpushin/out_of_focus_deblur/tree/full_color_version
https://github.com/VladKarpushin/motion_deblur
https://docs.opencv.org/4.0.0-alpha/de/d3c/tutorial_out_of_focus_deblur_filter.html
https://docs.opencv.org/4.0.0-alpha/d1/dfd/tutorial_motion_deblur_filter.html


Литература


  1. R.C. Gonzalez, R.E. Woods. Digital image fundamentals. 1987.
  2. И.С. Грузман, В.С. Киричук, В.П. Косых, Г.И. Перетягин, А.А. Спектор. Цифровая обработка изображений в информационных системах. 2000.
Tags:
Hubs:
+45
Comments19

Articles

Change theme settings