中值滤波原理详解:如何用邻域像素中间值替代当前像素值
中值滤波和前面介绍的滤波方式存在差异。它不再运用加权求均值的方式来进行滤波操作。而是用邻域内所有像素值的中间值去替换当前像素点的像素值。

中值滤波会选取当前像素点以及其周围临近的像素点,这些临近像素点的总数为奇数个。接着,会获取这些像素点的像素值并进行排序。之后,把处于中间位置的那个像素值当作当前像素点的像素值。
针对图 7 - 27 里的第 4 行第 4 列的那个像素点,来计算它的中值滤波值。
设置其邻域为 3×3 大小,然后对 3×3 邻域内的像素点的像素值进行排序,排序方式可以是升序也可以是降序,按照升序排序后,得到的序列值为:[66,78,90,91,93,94,95,97,101]。在该序列里,处于中间位置的那个值是“93”,这个位置也被称作中心点或者中值点。所以,用“93”这个值去替换原先的像素值 78,将其作为当前点的新像素值,处理情况如图 7 - 28 所示。
OpenCV 中,用于实现中值滤波的函数为 cv2.medianBlur()。其语法格式具体如下:
式中:
【例7.7】针对噪声图像,对其进行中值滤波,显示滤波的。
从图中可知,未进行均值处理时,中值滤波不存在像均值滤波等滤波方式那样会带来细节模糊的问题。在中值滤波处理过程中,噪声成分难以被选中,因此能够在几乎不影响原有图像的情况下去除全部噪声。然而,由于需要进行排序等操作,中值滤波所需的运算量比较大。