OpenCV-Python学习之路-8:Smoothing Images(图像平滑、滤波)

参考依据

官方文档:
https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_filtering/py_filtering.html#filtering

目标

  1. 使用各种低通滤波器进行图像模糊
  2. 在图像上使用自定义滤波器(2D卷积)

二维卷积(图像滤波)

对于2D图像,我们可以使用低通滤波器或者高通滤波器进行滤波,低通滤波器通常用来去除噪声、模糊图像,高通滤波器用来检测边缘。OpenCV提供一个函数接口cv2.filter2D()来实现卷积的功能,(https://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html?highlight=filter#cv2.filter2D)。

例如使用filter2D()来实现一个平均滤波,它的卷积核大小为5x5,即:
在这里插入图片描述

img = cv2.imread('UESTC.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

kernel = np.ones([5,5], dtype=np.float32)/25
dst = cv2.filter2D(img, -1, kernel)

plt.subplot(1,2,1), plt.imshow(img)
plt.subplot(1,2,2), plt.imshow(dst)
plt.show()

在这里插入图片描述

图像模糊(图像平滑)

通常是经过低通滤波器来达到图像模糊的效果的,它能有效去除噪声,移除高频信号干扰。

1. 平均滤波

这个在上一个模块已经提到过了,就是获取卷积核区域内所有像素的平均值,并用平均值替换中心元素。可以直接通过cv2.blur()和cv2.boxFilter()来实现,这比cv2.filter2D()方便之处在于不用自己构造kernel,而是直接指定卷积核的长宽即可。

img = cv2.imread('UESTC.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

dst = cv2.blur(img, (5,5))

plt.subplot(1,2,1), plt.imshow(img)
plt.subplot(1,2,2), plt.imshow(dst)
plt.show()

在这里插入图片描述

2. 高斯滤波

高斯滤波应该是最常用的一种低通滤波方式,OpenCV通过cv2.GaussianBlur()来提供高斯滤波。需要注意的是,高斯滤波器的长宽必须为正奇数。同时,我们还需要指定X方向和Y方向的标准差,如果只指定一个SigmaX一个值,那么SigmaY会等于SigmaY,如果不指定,则会根据Kernel大小自动计算。
高斯滤波有助于去除图像中的高斯噪声。

img = cv2.imread('UESTC.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

dst = cv2.GaussianBlur(img, (5,5), 0)

plt.subplot(1,2,1), plt.imshow(img)
plt.subplot(1,2,2), plt.imshow(dst)
plt.show()

在这里插入图片描述

3. 中值滤波

OpenCV通过cv2.MedianBlur()来提供中值滤波,用窗口内的中位值来代替中间元素值,同样kernel的大小必须为正的奇数。中值滤波对于椒盐噪声的移除很有效。

dst = cv2.MedianBlur(img, 5)

在这里插入图片描述
P.S. 上图来自参考链接

4. 双边滤波

之前介绍的几种滤波其实都会影响到图像边缘,比如高斯滤波,它考虑周围像素空间的值,然后进行高斯加权计算,它并没有考虑当前像素是否位于图像边缘。如果我们期望在消除噪声的同时保留图像的边缘信息,可以使用双边滤波,cv2.bilateralFilter()。

双边滤波能够做到这种效果的大致原因为:双边滤波在同时使用空间域高斯权重和灰度值相似性高斯权重:空间高斯函数确保只有邻近区的像素对中心点有影响,灰度值相似性高斯函数确保只有与中心像素灰度值相近的才会被用来做模糊运算,因此边界处的灰度值变化比较大。

详细参数请参考:https://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html?#gaussianblur

dst = cv2. BilateralFilter(img, 9, 75, 75)

在这里插入图片描述
可以看到,使用双边滤波之后,物体中央的纹理不见了,但是边缘信息仍会保留。
P.S. 上图来自参考链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值