维纳滤波进行图像去抖动去模糊

首先,我们简单说明一下利用维纳滤波进行图像去抖动去模糊的基本原理,并给出仿真结果。

    利用维纳滤波器进行图像去抖去模糊的基本原理如下所示:

     维纳滤波进行图像去抖动去模糊

    维纳滤波进行图像去抖动去模糊

      对原始图像进行维纳滤波的算法是首先估计出每个像素点的M*N邻域内的平均值和方差值。有如下两个表达式计算:

     维纳滤波进行图像去抖动去模糊

     维纳滤波进行图像去抖动去模糊

      用如下的表达式计算输出的灰度值。其中a(n1,n2)是调整前的灰度值,b(n1,n2)是调整后的灰度值:

     维纳滤波进行图像去抖动去模糊

      以上这部分是维纳滤波的基本原理,在我们提供的一些参考文献中均有详细介绍,所以这里就不多做介绍了,我们主要是对后面的创新部分进行详细的说明。

      注意:由于手机拍摄抖动导致的模糊,在数学上属于运动模糊,所以,我们为了对比滤波性能的好坏,直接使用运动模糊来模拟抖动效果。然后进行滤波对比。

      使用传统的维纳滤波算法,对抖动模糊的仿真效果如下所示:

运行程序:main.m

车1:

维纳滤波进行图像去抖动去模糊

车2:

维纳滤波进行图像去抖动去模糊

车3:

维纳滤波进行图像去抖动去模糊

其余结果可自行测试。

下面,我们对维纳滤波之后的图像质量进行实际的分析。

运行程序:main_pnsr.m

维纳滤波进行图像去抖动去模糊

 

图1                                                           图2

维纳滤波进行图像去抖动去模糊

 

图3

       注意,在程序main_pnsr.m中

维纳滤波进行图像去抖动去模糊

 

 

上面的图中:

图1:参数为LEN=30,Motion=30

图2:参数为LEN=30,Motion=38

图3:参数为LEN=30,Motion=20

      从仿真结果可知,通过维纳滤波之后,图像的质量得到了明显的提升,和我们肉眼看到的结果一致。

      当图像处理端定义的运动模糊模型参数和实际模型完全吻合的时候,图像具有较好的滤波特性,而两个参数出现偏差的时候,滤波效果较差。这个是维纳滤波的一个缺陷,

     在分析另一个缺陷:

     缺陷分析:

     打开main_test.m

      由于在实际中,进行维纳滤波的模块都是固定参数的,但是手机拍摄输入的抖动程度是不一定的,那么这个时候,会导致某些程度的抖动,系统无法正常工作。我们对这种现象进行测试,效果如下所示:

       设置模糊参数LEN=5,运动模型参数motion=10。

维纳滤波进行图像去抖动去模糊

      很明显,当两个参数不一致的时候,滤波效果比较差(注意,在实际中,我们不能直接使用PSF这个参数,因为这个参数仅仅在图像源)。

       设置模糊参数LEN=15,运动模型参数motion=10。

 

维纳滤波进行图像去抖动去模糊

     假设LEN和motion参数完全相同,这个时候,我们又需要对维纳滤波的参数进行设置,

维纳滤波进行图像去抖动去模糊

假设LEN = Motion =50;然后设置不同的参数:

0.1:

维纳滤波进行图像去抖动去模糊

0.01:

维纳滤波进行图像去抖动去模糊

0.001:

维纳滤波进行图像去抖动去模糊

0.0001:

维纳滤波进行图像去抖动去模糊

0.00001:

维纳滤波进行图像去抖动去模糊

0.000001:

维纳滤波进行图像去抖动去模糊

即,参数的不同,会对最后的滤波效果有较大的影响。

 

      通过上面分析,使用维纳滤波的时候,由于同时需要控制两个参数,这就大大增加了系统滤波的参数控制难度

      注意,在很多现有资料中,代码都deconvwnr(Ipsf,PSF)这么写,其实这么做是不完善的,因为PSF是在图像源中加入抖动的时候产生的。实际中PSF的具体值是未知的,只能知道其维度。

      所以,直接使用维纳滤波具有很大的难度。这里我们选择逆卷积+自适应参数控制的方法进行设计。

改进算法的实现:

% 参数自适应识别

       这里,我们首先需要引入图像模糊度的概念(图像模糊度的参考论文很多,但是我这没发现利用图像模糊度和去抖动滤波的资料,所以我这里将这两种算法进行结合)

       图像模糊度,这里我提供的文献如下所示:

      维纳滤波进行图像去抖动去模糊

首先,我们打开这个文件夹,运行程序,选择不同的图像进行测试,这里,我们随机的选择三个图像来测试。仿真结果如下所示:

维纳滤波进行图像去抖动去模糊

 

 

      从上面的仿真结果可知,通过对不同的图像进行测试,我们都可以计算其模糊度来区分该图像的模糊程度,从而选择一个合适K值。

      这里,我们发现,对于设置不同的模糊度LEN,其值差不多都是0.8左右最小,最大到0.9左右。因此,我们设置如下的对应关系:

    维纳滤波进行图像去抖动去模糊

即通过计算模糊度,然后根据不同的值,输入进入逆卷积滤波。

 

 

 

 

 

改进后的算法流程如下所示:

维纳滤波进行图像去抖动去模糊

 

左图是原始的算法,有图是本文介绍的改进后的算法(看了一些资料,貌似都没这么干)

      通过加入模糊度计算之后,我们进行仿真,分别设置抖动程度为

10:

10:

维纳滤波进行图像去抖动去模糊

50:

维纳滤波进行图像去抖动去模糊

100:

维纳滤波进行图像去抖动去模糊

从程序上看,改进后的算法:

维纳滤波进行图像去抖动去模糊

       其通过对输入模糊图像的模糊度估计,得到K值,而INIIPSF是全1的初始值,因此,整个模型,只需要输入模糊图像即可,而不需要进行其他参数的人为输入。

       同时,我们对改进后的算法,计算PNSR。

main_psnr1:输入模糊程度相同的情况,LEN = 50;运行,获得如下的曲线:

 

main_psnr2:输入模糊程度随机的情况,LEN = 20~100之间随机变化;运行,获得如下的曲线:

 

这个是对同一个场景下的不同抖动程度的仿真,通过分析,可知,对于任意随机情况下的抖动,系统都能够自动的获得加好的去抖动效果。

 

关于论文的这个部分内容书写提纲:

1.介绍抖动模糊的一些理论知识——运动模糊

2.介绍维纳滤波和逆卷积滤波的理论知识

3.对维纳滤波进行仿真分析,分析其优势,缺陷

4.根据存在的缺陷,给出本问题的算法

4.1模糊度的介绍(具体参考我发你的资料)

4.2根据模糊度得到逆卷积滤波参数

4.2仿真分析

5将我们的这个去模糊算法,引入到你的模型中进行测试,分析性能提升了多少。