前面的高斯滤波和均值滤波都是线性滤波器,在数字图像处理中,凡是算子(kernel)可以显式的写出来的滤波器,都是线性滤波器,比如高斯算子,sobel算子,拉普拉斯算子等。这种滤波器对图像的处理效果从算子上就能一眼看出来,可以这么说,每个线性算子其实就是一个线性系统,这个系统对图像中的每一个pixel都做了相同的运算。
中值滤波是特别基础的一个非线性滤波器,它是对滤波窗口内的像素排序,然后取中间的那个像素作为输出,中值滤波一般在ISP中用于去除椒盐噪声或者是孤立的坏点。
1. 算法原理
(相关资料图)
中值滤波就没有kernel了,简单的画个图,对于一个3×3的窗口,其中值滤波的结果就是窗口内9个数据排序,取中间的那个作为输出,下图中就是取45作为当前窗口的输出。
2. 图像处理效果与对比
为了测试中值滤波的效果,用matlab对Lena图添加了高斯噪声和椒盐噪声,然后用中值滤波进行降噪测试,对比效果。
虽然matlab中有自带的中值滤波器函数,但是推荐使用ordfilt2函数来实现中值滤波,这是因为在做算法开发的时候,matlab中已经写好的函数不方便修改中间过程,这个时候用更基础的函数或者自己写的代码会更方便。比如ordfilt2函数,它的功能就是对二维数组中n个非零值按照从大到小排序,然后可以指定第几个位置的元素作为输出结果。以5×5窗口为例,13就是中间位置,相关代码已附在后面。
先加入椒盐噪声,椒盐噪声是一种颗粒噪声,像胡椒面一样随机分布,因此得名“椒盐噪声”。测试的效果如下图2所示,左边为输入图像,中间为加入椒盐噪声的图像,右边为5×5中值滤波的结果。判断一个滤波器是否优秀,只要看它是否在去除噪声的同时还能保持住边界,从这个角度出发,中值滤波对椒盐噪声的降噪效果还不错,虽然图像被模糊了,但是椒盐噪声去除的很干净。
接下来看一下高斯噪声的降噪效果,显示的图像如下图3所示,左边为输入图像,中间为加入椒盐噪声的图像,右边为5×5中值滤波的结果。可见,中值滤波对高斯噪声的滤波效果就没那么椒盐噪声那么好了,也起到了降噪的效果,但是噪声没滤干净。
从上图可以看出,中值滤波用在椒盐噪声上的效果比较好,用在高斯噪声上的效果就很一般了。在实际算法开发的过程中,会根据噪声形态选择适合的滤波器,中值滤波一般用于去除颗粒噪声,在去坏点模块中会选择使用它,而高斯噪声一般选用高斯滤波或者双边滤波来降噪。
附录:
标签:
Copyright © 2015-2023 港澳空调网版权所有 备案号:京ICP备2023022245号-31 联系邮箱:435 226 40 @qq.com