Opencv开发与应用—维纳滤波的算法实现及对比

实现方法

为图片添加噪声

高斯噪声

在许多实际情况下,由于配准传感器的物理限制,由信息处理系统记录的图像数据含有不精确性。在加性高斯噪声的情况下,这种图像退化通常可以用线性模糊来描述。为了能够分辨不同滤波器以及各个滤波器参数对图像噪声处理的强度,首先要人为的为图像添加噪声。高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。高斯白噪声包括热噪声和散粒噪声。在通信信道测试和建模中,高斯噪声被用作加性白噪声以产生加性白高斯噪声。

主要函数:noise=np.random.normal(0,1,image.shape)

Opencv开发与应用—维纳滤波的算法实现及对比_第1张图片

 

这里我使用不同的sigma值添加噪声可以明显看出如果有一个非常小的sigma,你几乎看不到这只是一个不变的灰色。随着让Sigma变得越来越大,开始看到越来越多的斑点。这就是效果,它只是一个加到图像上的噪声函数。

椒盐噪声

为了遵守控制变量法这里我选取上述四幅图为其添加指定的椒盐噪声(即为四幅图统一添加椒=5000盐=5000)。椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)

主要函数:noise = [[np.random.randint(0, x),  np.random.randint(0, y),50]

Opencv开发与应用—维纳滤波的算法实现及对比_第2张图片

 

综上选择椒盐+sigma41图像先来完成维纳滤波

维纳滤波

原理

1)有限长滤波器
对于一列输入信号x,一般的无限长线性滤波器输出为:

  • y(n)= Σh(m)x(n-m) m=0…∞

实际中,滤波器的长度,即阶数是有限长的,设为M,则有:

  • y(n)= Σh(m)x(n-m) m=0…M

即滤波器的当前时刻输出为前M个时刻的值经过加权之后得到的。
为便于书写与理解,上式可以写为矩阵形式:

  • y(n)=H(m)*X(n)

如果期望信号d已知,则可以计算输出与期望信号之间的误差:

  • e(n)=d(n)-y(n)= d(n)- H(m)*X(n) m=0…M

Wiener滤波的目标就是,如何确定一个长为M的系数序列H,使得上述误差值最小。
(2)最小均方误差滤波
根据目标函数的不同,又可以将滤波算法细分为不同的类别,一般来说有最小均方误差,最小二乘误差等等,这里只讨论最小均方误差。
令目标函数为:

  • Min E[e(n)^2]= E[(d(n)- H(m)*X(n))^2]

当滤波器的系数最优时,目标函数对系数的倒数应该为0,即:

  • dE[e(n)^2]/dH=0
  • 2 E[ (d(n)- H(m)X(n))] X(n)=0
  • E[(d(n) X(n))- H(m)E[X(n)X(n)]=0

根据随机过程的知识,上式可以表达为:

  • Rxd-H*Rxx=0

其中Rxd与Rxx分别为输入信号与期望信号的相关矩阵与输入信号的自相关矩阵。
从而有:

  • H=Rxx-1*Rxd

至此,便得到了Wiener滤波的基本原理与公式推导。

思想:

假定滤波器的输入和输出都是宽平稳过程,并且知道二阶统计特性(R,P已知),那么,根据MMSE准则可以求出最优权系数。

根据MMSE准则求出的误差e(n)的功率J(w)所构成的多维空间的曲面称为误差性能面。

对误差的功率J(w)求导可以得到维纳霍夫方程。通过方程可知,欲求解最优权系数,需要知道自相关矩阵R,互相关矩阵P,还得对R求逆。

正交原理:维纳滤波器的误差和输入是正交的,误差和输出也是正交的。因为输出可以用输入线性表示。

均方误差J(w)的最小值是期望相应的平均功率和估计信号的平均功率的差。

运行结果展示

Opencv开发与应用—维纳滤波的算法实现及对比_第3张图片

 维纳滤波

实验及对比

横向对比

高斯滤波横向对比

图像jiaoyan41内核分别选取3*3,5*5 7*7时不同σ对比

 Opencv开发与应用—维纳滤波的算法实现及对比_第4张图片

 Opencv开发与应用—维纳滤波的算法实现及对比_第5张图片

                 ​​​​​​​        ​​​​​​​        ​​​​​​​σ=0.9          ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        σ=2

 通过上述的实现过程发现,生成高斯滤波器模板最重要的参数就是高斯分布的标准差

 

σ小,模板的中心系数越大,周围的系数越小,这样对图像的平滑效果就不是很明显;

σ大,模板的各个系数相差就不是很大,比较类似均值模板,对图像的平滑效果比较明显。

计算平均值时,取值范围越大即内核越大,"模糊效果"越强烈

均值滤波横向对比

.均值滤波是一种线性滤波器,处理思路也很简单,就是将一个窗口区域中的像素计算平均值,然后将窗口中计算得到的均值设置为锚点上的像素值。

sigma=41的图像应用均值滤波

Opencv开发与应用—维纳滤波的算法实现及对比_第6张图片

 内核分别为3*3,5*5,7*7

该算法有优点在于效率高,思路简单。同样,缺点也很明显,计算均值会将图像中的边缘信息以及特征信息“模糊”掉,会丢失很多特征。

中值滤波横向对比

中值滤波是一种非线性滤波,在处理脉冲噪声以及椒盐噪声时效果极佳,能够有效的保护好图像的边缘信息。中值滤波的处理思路很简单,取卷积核当中所覆盖像素中的中值作为锚点的像素值即可。

jiaoyan41的图像应用中值滤波

Opencv开发与应用—维纳滤波的算法实现及对比_第7张图片

 纵向对比

统一选用3*3内核

Opencv开发与应用—维纳滤波的算法实现及对比_第8张图片

 Opencv开发与应用—维纳滤波的算法实现及对比_第9张图片

 

经过运动模糊的逆滤波与维纳滤波对比(非灰度图)

Opencv开发与应用—维纳滤波的算法实现及对比_第10张图片

 

主客观比较

主观比较

在上述的几幅图中:

通过横向对比可以发现,高斯滤波器的sigema取值越大,滤波的效果越明显,同时这几个滤波器的卷积核取得越小滤波效果越明显。

通过纵向对比可以发现:高斯滤波其实在处理高斯噪声方面卓有成效,而中值滤波比较适合处理椒盐噪声。同时逆滤波比较适合处理无噪声的运动模糊图像,如果图像既有噪声又有运动模糊,那么维纳滤波是一个很好的选择。

客观比较

不带有运动模糊

MSE

PSNR

高斯滤波

0.022004075784278685

16.57496867965256

均值滤波

0.022012853723878234

16.573236523037504

中值滤波

0.017770814310201204

17.50292671107238

维纳滤波

0.041488950251005206

13.820675535046817

带有运动模糊+噪声图像的维纳滤波和逆滤波(非灰度)

MSE

PSNR

维纳滤波

834.6398

18.915812705614087

逆滤波

4939.288533333333

11.194159642316844

你可能感兴趣的:(计算机视觉,opencv,算法,计算机视觉)