Deblur: 运动模糊图像复原 (一)

本次博文主要想记录一下自己在做运动模糊图像复原时的一些总结和心得感悟,方便以后回顾。

Reference

Deblurring Text Images via L0 -Regularized Intensity and Gradient Prior

 

主要难点: 估计模糊模型

解决方式:

           ①使用金字塔模型,创建模糊图像相应的层级图像;并根据缩放比例创建模糊模型的大小。可以手动设置金字塔底层模型的大小。

           ②初始化金字塔顶层模型。

           ③根据对应层级模糊图像的L0亮度和梯度 + 对应层级的模糊模型 = 预估当前层级的latent image。可设置多次迭代,更新预估结果。

           ④使用latent image和blurred image预估当前层级的模糊模型。

           ⑤根据金字塔层级,一层层循环进行第③第④步,直至最底层。到这里就可以得到预估的完整模糊模型——kernel。

 

复原运动模糊的图像:

          Blurred image = deblurred image 卷积 kernel

          可采用快速傅里叶变换,对blurred image进行反卷积得到复原图像。

          注意的点:

  1. Ringing remove 这种畸变会影响复原效果——振铃抑制
  2. 高饱和度的图像,比如过曝图像,需要做特殊处理
  3. 做一些去燥处理

 

对这种blind deblur方法的理解:

依赖于intensity和gradient的先验概率设定。在处理中作者设定每次迭代时根据经验更新这两个数值。

依赖于fft、dst等变换,以及卷积操作。计算量大。

依赖于图像下采样方法。在计算下采样图像的大小和抽样位置时需要注意。同时对采样的插值方法的差异性值得注意。比如线性插值和双线性插值,两种方法对效果和速率上影响不小。

振铃失真的去除依赖于拉皮拉斯方法与latent image的差异图。

 

测试效果:

C++转换后的代码效果总是低于作者的测试效果。

对于一些抖动图像的复原效果还是比较理想的。但并非所有抖动图像效果都好。

 

 

为什么要采用这种方法进行模糊图像的复原?

  1. 可参考文献A Comparative Study for Single Image Blind Deblurring。
  2. 传统方法在某些领域的应用,当前还不能完全用深度学习的方式替代。后续可继续研究深度学习在deblur方面的相关内容。

你可能感兴趣的:(c++实现deblur代码原理)