高斯滤波

2022-05-28 16:12:14 浏览数 (2)

代码语言:javascript复制
import cv2
o=cv2.imread("C:/Users/xpp/Desktop/Lena.png")#原始图像
r=cv2.GaussianBlur(o,(5,5),0,0)#高斯滤波
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

算法:高斯滤波将中心的权重值增加,远离中心点的权重值减小,在此基础上计算邻域内各个像素值不同权重的和。

dst=cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)

  • dst表示返回值,表示进行高斯滤波后得到的结果
  • src表示输入图像,图像深度是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F
  • ksize表示滤波核的大小,即邻域图像的高度和宽度
  • sigmaX表示卷积核在水平方向上(X轴方向)的标准差,其控制的是权重比例
  • sigmaY表示卷积核在垂直方向上(Y轴方向)的标准差,可选参数
  • borderType表示边界样式,可选参数

其中,

sigmaX=0.3x[(ksize.width-1)x0.5-1] 0.8

sigmaY=0.3x[(ksize.height-1)x0.5-1] 0.8

例子:

data=[(40x0.05 107x0.1 5x0.05) (198x0.1 226x0.4 223x0.1) (37x0.05 68x0.1 193x0.05)]=163.75≈164

注意:滤波核的值必须是奇数,滤波核越大,计算量越大,没有进行归一化处理的卷积核进行滤波,得到的结果往往是错误的。如果将sigmaY设置为0则采用sigmaX的值;如果将sigmaX和sigmaY都设置为0,则通过ksize.width和ksize.height计算得到。

0 人点赞