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

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