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

中值滤波会选取当前像素点以及其周围临近的像素点,这些临近像素点的总数为奇数个。接着获取这些像素点的像素值,对这些像素值进行排序,之后把处于中间位置的那个像素值当作当前像素点的像素值。
针对图 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】针对噪声图像,对其进行中值滤波,显示滤波的。
从图中能看到,因为没有进行均值处理,中值滤波不像均值滤波等滤波方式那样会带来细节模糊问题。在中值滤波处理过程中,噪声成分很难被选中,这样就能在几乎不影响原有图像的情况下去除全部噪声。然而,由于需要进行排序等操作,中值滤波所需的运算量比较大。