使用维纳滤镜恢复模糊和散焦的图像。 在C ++ OpenCV中实现

有关恢复散焦和模糊图像的文章的续篇中我想分享我使用Wiener滤波器恢复真实图像的结果。 OpenCV 3.4被用作图像处理库。 相机-尼康D320,尼康DX AF-S尼克尔18-105mm镜头,手动散焦,无需三脚架即可拍摄。


散焦图像恢复结果


在散焦期间,失真系统可以通过半径r的圆柱点散射函数(PSF)很好地近似。


o_psf
圆柱形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


可以看出,即使散焦很大,文本的可读性实际上还是
完全恢复。


恢复车牌模糊图像的结果


当相机和拍摄对象在曝光期间相对移动时,会发生图像模糊。 仅考虑对象相对于固定摄像机线性移动的情况。 在这种情况下,PSF很好地近似了失真系统,其形式是沿着物体的运动定向的段。 这样的PSF由两个参数定义:L长度和THETA润滑角。


m_psf
线性润滑的PSF


下面是两辆汽车的畸变图像,它们在短时曝光不足的情况下获得,导致出现明显的模糊现象。


m1
两辆车的图像失真


以下是使用维纳过滤器恢复两辆车的数量的结果。 选择参数L,THETA和SNR,以确保恢复最佳的车号视觉质量。


平方米
恢复明亮的车号的结果。 L = 78,THETA = 15,SNR = 300


立方米
恢复暗号的结果。 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. RC冈萨雷斯(RC Woods)。 数字图像基础。 1987年。
  2. I.S. 格鲁兹曼(V.S.) 基里奇克(V.P.) G.I.科希克 Peretyagin,A.A。 幽灵。 信息系统中的数字图像处理。 2000。

Source: https://habr.com/ru/post/zh-CN424987/


All Articles