4.3.5 高斯双边滤波
4.3.5 高斯双边滤波
高斯双边滤波同时考虑空间域和值域,这里的空间域是指考虑空间位置关系,根据距离核心位置的远近给予不同的加权值,原理和高斯滤波一样。值域是指考虑邻域范围内的像素差值计算出滤波器系数。高斯双边滤波是结合图像的空间邻近度和像素值相似度的一种折中处理,达到保护边缘并去除噪声的目的。通常在图像处理领域,把保护边缘并去除噪声简称为保边去噪。
在opencv中使用bilateralfilter实现高斯双边滤波。
bilateralfilter(src, n, sigmacolor, sigmaspace, bordertype)
其中主要参数的含义如下:
? src:输入变换前图像。
? n:过滤过程中每个像素邻域的直径范围。
? sigmacolor:颜色空间过滤器的标准差值。
? sigmaspace:坐标空间中滤波器的标准差值。
? bordertype:用于推断图像外部像素的某种边界模式,默认值为border_default。
通常可以将两个标准差设置成相同的值。如果小于10,则对滤波器影响很小;如果大于150,则会对滤波器产生较大的影响。
如图4-20所示,使用中值、高斯、高斯双边三个滤波器对于同一个添加了高斯噪声的图像进行处理,滤波窗口都是11,高斯双边的保边去噪效果最好。
img=cv2.imread("../picture/bigpig.jpeg")
img=cv2.cvtcolor(img, cv2.color_bgr2gray)
img1=img.copy()
#原图为增加噪声的图
img1=skimage.util.random_noise(img1, mode="gaussian", seed=none,
clip=true,mean=0,var=0.01)
img1=np.uint8(img1*255)
#medianblur需要处理整型
img2=cv2.medianblur(img1,11)
img3=cv2.gaussianblur(img1,(11,11),0)
img4=cv2.bilateralfilter(img1,11,50,50)
图4-20 使用高斯双边滤波去除高斯噪声示例
如图4-21所示,滤波窗口保持为11不变时,标准差从10增加到100,去噪效果显著提升。
img1=skimage.util.random_noise(img1, mode="gaussian", seed=none,
clip=true,mean=0,var=0.01)
img1=np.uint8(img1*255)
img2=cv2.bilateralfilter(img1,11,10,10)
img3=cv2.bilateralfilter(img1,11,50,50)
img4=cv2.bilateralfilter(img1,11,100,100)
图4-21 标准差变化下高斯双边滤波去除高斯噪声的示例
高斯双边滤波同时考虑空间域和值域,这里的空间域是指考虑空间位置关系,根据距离核心位置的远近给予不同的加权值,原理和高斯滤波一样。值域是指考虑邻域范围内的像素差值计算出滤波器系数。高斯双边滤波是结合图像的空间邻近度和像素值相似度的一种折中处理,达到保护边缘并去除噪声的目的。通常在图像处理领域,把保护边缘并去除噪声简称为保边去噪。
在opencv中使用bilateralfilter实现高斯双边滤波。
bilateralfilter(src, n, sigmacolor, sigmaspace, bordertype)
其中主要参数的含义如下:
? src:输入变换前图像。
? n:过滤过程中每个像素邻域的直径范围。
? sigmacolor:颜色空间过滤器的标准差值。
? sigmaspace:坐标空间中滤波器的标准差值。
? bordertype:用于推断图像外部像素的某种边界模式,默认值为border_default。
通常可以将两个标准差设置成相同的值。如果小于10,则对滤波器影响很小;如果大于150,则会对滤波器产生较大的影响。
如图4-20所示,使用中值、高斯、高斯双边三个滤波器对于同一个添加了高斯噪声的图像进行处理,滤波窗口都是11,高斯双边的保边去噪效果最好。
img=cv2.imread("../picture/bigpig.jpeg")
img=cv2.cvtcolor(img, cv2.color_bgr2gray)
img1=img.copy()
#原图为增加噪声的图
img1=skimage.util.random_noise(img1, mode="gaussian", seed=none,
clip=true,mean=0,var=0.01)
img1=np.uint8(img1*255)
#medianblur需要处理整型
img2=cv2.medianblur(img1,11)
img3=cv2.gaussianblur(img1,(11,11),0)
img4=cv2.bilateralfilter(img1,11,50,50)
图4-20 使用高斯双边滤波去除高斯噪声示例
如图4-21所示,滤波窗口保持为11不变时,标准差从10增加到100,去噪效果显著提升。
img1=skimage.util.random_noise(img1, mode="gaussian", seed=none,
clip=true,mean=0,var=0.01)
img1=np.uint8(img1*255)
img2=cv2.bilateralfilter(img1,11,10,10)
img3=cv2.bilateralfilter(img1,11,50,50)
img4=cv2.bilateralfilter(img1,11,100,100)
图4-21 标准差变化下高斯双边滤波去除高斯噪声的示例