win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.4中值濾波

Python版本是Python3.7.3,OpenCV版本OpenCV.3.4.1,开发环境为PyCharm

中值滤波与前面介绍的滤波方式不同,不再采用加权求均值的方式计算滤波结果。它用邻域内所有像素值的中间值来替代当前像素点的像素值。

7.4.1 基本原理
中值滤波会取当前像素点及其周围临近像素点(一共有奇数个像素点)的像素值,将这些像素值排序,然后将位于中间位置的像素值作为当前像素点的像素值。
例如,针对图7-27中第4行第4列的像素点,计算它的中值滤波值。
win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.4中值濾波_第1张图片

将其邻域设置为3×3大小,对其3×3邻域内像素点的像素值进行排序(升序降序均可),按升序排序后得到序列值为:[66,78,90,91,93,94,95,97,101]。在该序列中,处于中心位置(也叫中心点或中值点)的值是“93”,因此用该值替换原来的像素值78,作为当前点的新像素值,处理结果如下图所示。
win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.4中值濾波_第2张图片

7.4.2 函数语法
在OpenCV中,实现中值滤波的函数是cv2.medianBlur(),其语法格式如下:

dst = cv2.medianBlur( src, ksize)

式中:
● dst是返回值,表示进行中值滤波后得到的处理结果。
● src是需要处理的图像,即源图像。它能够有任意数量的通道,并能对各个通道独立处理。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F或者CV_64F中的一种。
● ksize是滤波核的大小。滤波核大小是指在滤波处理过程中其邻域图像的高度和宽度。需要注意,核大小必须是比1大的奇数,比如3、5、7等。

7.4.3 程序示例
eg1:针对噪声图像,对其进行中值滤波,显示滤波的结果。
代码如下:

import cv2
o=cv2.imread("image\\lenaNoise.png")
r=cv2.medianBlur(o,3)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

运行上述程序后,结果如图7-29所示,其中左图是原始图像,右图是中值滤波后的处理结果图像。
从图中可以看到,由于没有进行均值处理,中值滤波不存在均值滤波等滤波方式带来的细节模糊问题。在中值滤波处理中,噪声成分很难被选上,所以可以在几乎不影响原有图像的情况下去除全部噪声。但是由于需要进行排序等操作,中值滤波需要的运算量较大。

win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.4中值濾波_第3张图片win10+Python3.7.3+OpenCV3.4.1入门学习(七)————7.4中值濾波_第4张图片

你可能感兴趣的:(Python-OpenCV)