高斯滤波原理
以某一像素为中心,在它的周围选择一个局部邻域,把邻域内像素的灰度按照高斯正态分布曲线进行统计,分配相应的权值系数,然后将邻域内所有点的加权平均值代替原像素值。
其中,k, l是根据所选邻域大小确定。
二维高斯函数图:
正态分布曲线为钟形形状;表明:离中心原点越近,高斯函数取值越大。正态分布常被用来进行权值分配。理解高斯滤波可以参考理解均值滤波的方法,均值滤波是把卷积核里面的每一个像素的权值都设置为1,而高斯滤波则是距离核中心越近的像素所占的权重越高。如上图所示的那样中心权重最高,以中心扩散权重一次减小。高斯函数有一个参数叫做标准差,标准差越小分布越集中,生成高斯模板的中心系数值远远大于周围系数值,高斯图像越尖。反之越大分布越分散,生成高斯模板中不同系数值差别不大,高斯图像越平缓。
高斯模板特点
按照正态分布曲线的统计,模板上不同位置赋予不同的加权系数值
。
标准差
影响
高斯模板生成的关键参数。
值越大
,生成高斯模板中不同系数值差别不大,类似均值模板,对图像的平滑效果较明显。
代码实现:
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
运行结果:
带噪声的lena 卷积核大小为11的高斯滤波
卷积核大小为5的高斯滤波
可以看出卷积核越大,噪声被过滤的越彻底,但是图像的质量也会变得模糊。
参考文献:[1]蔡利梅,王利娟. 数字图像处理使用MATLAB分析与实现[M]. 北京:清华大学出版社,2019.