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

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