OpenCv图像处理——高斯滤波

高斯滤波原理

以某一像素为中心,在它的周围选择一个局部邻域,把邻域内像素的灰度按照高斯正态分布曲线进行统计,分配相应的权值系数,然后将邻域内所有点的加权平均值代替原像素值。

其中k, l是根据所选邻域大小确定。

维高斯函数图:

OpenCv图像处理——高斯滤波_第1张图片                    

正态分布曲线为钟形形状表明:中心原点越,高斯函数取值越大。正态分布常被用来进行权值分配。理解高斯滤波可以参考理解均值滤波的方法,均值滤波是把卷积核里面的每一个像素的权值都设置为1,而高斯滤波则是距离核中心越近的像素所占的权重越高。如上图所示的那样中心权重最高,以中心扩散权重一次减小。高斯函数有一个参数叫做标准差\sigma,标准差越小分布越集中,生成高斯模板的中心系数值远远大于周围系数值,高斯图像越尖。反之越大分布越分散,生成高斯模板中不同系数值差别不大,高斯图像越平缓。

高斯模板特点

按照正态分布曲线的统计,模板上不同位置赋予不同的加权系数值
 
标准差 \sigma 影响 高斯模板生成的关键参数。
 
\sigma 值越大 ,生成高斯模板中不同系数值差别不大,类似均值模板,对图像的平滑效果较明显。

代码实现:

import cv2


lena_noise = cv2.imread("lenaNoise.png")

lena_Gaus_r11 = cv2.GaussianBlur(lena_noise, (11, 11), 0, 0)  # 图像  卷积核大小   x方向的方差  y方向的方差
lena_Gaus_r5 = cv2.GaussianBlur(lena_noise, (5, 5), 0, 0)    # 需要注意卷积核大小必须为奇数

cv2.imshow("lena_noise", lena_noise)
cv2.imshow("lena_Gaus_r11", lena_Gaus_r11)
cv2.imshow("lena_Gaus_r5", lena_Gaus_r5)

cv2.waitKey()
cv2.destroyAllWindows

运行结果:

  OpenCv图像处理——高斯滤波_第2张图片      OpenCv图像处理——高斯滤波_第3张图片

                                  带噪声的lena                                                                           卷积核大小为11的高斯滤波

OpenCv图像处理——高斯滤波_第4张图片

                       卷积核大小为5的高斯滤波

可以看出卷积核越大,噪声被过滤的越彻底,但是图像的质量也会变得模糊。


参考文献:[1]蔡利梅,王利娟. 数字图像处理使用MATLAB分析与实现[M]. 北京:清华大学出版社,2019.

你可能感兴趣的:(OpenCv图像处理——高斯滤波)