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

在这篇博文中,主要想记录一下自己使用c++实现的过程中遇到的一些问题。

1. 模糊核的初始化。这是一个会对结果产生影响的参数,特别是当运动模糊的半径比较大时,结果差异会更大。

Deblur:运动模糊图像复原(四)_第1张图片

所以尽量的在核中心位置初始化。

2. 拟合好的模糊核一般是浮点型数据,这个是要直接用来复原模糊图像的。但是在显示模糊核时,我采用了下面的方法,效果更好。showimage = (kernel-minValue)/maxValue

3. 每层金字塔都需要归一化模糊核。

4. 每层金字塔模糊核归一化之前都需要使模糊核的有效区域平移到图像中心位置。

5. 图像下采样。

    a. 下采样的图像大小依赖于每层的缩放比例,这里取了以常数sqrt(0.5)为底的指数,指数从0~n。n是总得层数。n越大表示位于金字塔的层数越高,图像尺寸越小。最底层的金字塔表示原始图像大小。这个缩放比例在计算图像大小时存在一个问题:它是浮点型数据,往往精度会影响计算结果。比如0.1,可能会表示为0.099999999,或者0.10000000001,这在计算后的图像大小会由于极小的误差产生图像大小变化的情况。不同的机器计算结果会不一样。

    b. 下采样的方法。大致使用的是取量化后的数据。在量化前,对图像做了卷积运算。卷积核是一个设定好的大小,比如n*n。k=s2*s1,s2等于s1的转置,s1是一个1行n列的向量。s1的数值等于exp[-0.5*(2*i*phi)*(2*i*phi)*(1/(phi*scale))(1/(phi*scale))]。我到现在还没理解其中的这一点。我猜想可能是先将图像数据插值了一下,但图像大小不变。

6. 每次迭代前都需要将前一次迭代的结果核函数进行resize放大。但此时放大的方法对结果影响也比较大。

Deblur:运动模糊图像复原(四)_第2张图片

 

此外,还存在两个问题,一个是过曝图像,一个是振铃效果的去除。在第一篇博文中有简单讲到去除振铃效果的方法。它对于运动半径较小时的振铃效果去除效果较好,但当运动半径增大后,效果不理想。这种方式在除颤的应用中比较好。

最后粘贴一组自己测试的图,做了优化之后,效果有明显提升。

Deblur:运动模糊图像复原(四)_第3张图片

 

 

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