1、非线性滤波
多数情况下,使用邻域像素的非线性滤波会得到相当好的效果。比如在噪声是散粒噪声而不是高斯噪声,即图像偶尔会出现很大值的时候,用高斯滤波器对图像进行模糊的话,噪声像素是不会被去除的,它们只是被转换为更柔和但仍然是可见的散粒。
2、中值滤波
基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,此方法在去除脉冲噪声、椒盐噪声的同时又能保留图像的边缘细节。
基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。这对于斑点噪声和椒盐噪声非常有用,因为它不依赖于邻域内那些与典型值差别很大的值。
中值滤波在一定的条件下可以克服常见线性滤波器,如最小均方滤波、方框滤波、均值滤波等带来的图像细节模糊,而且对滤除脉冲干扰及图像扫描噪声非常有效,也常用于保护边缘信息。
3、中值滤波API
C++: void medianBlur(InputArray src,OutputArray dst,int ksize)
参数1:输入图像src,填1、3或4通道的Mat类型图像,当ksize为3或5时,图像深度需要为CV_8U、CV_16U、CV_32F其中之一。
参数2:输出图像dst,即目标图像。
参数3:int类型ksize,孔径的线形尺寸,这个是必须为奇数
4、案例
void median()
{
Mat src = imread("img.jpg", 0);
Mat dst;
namedWindow("原图", 0);
imshow("原图", src);
medianBlur(src, dst, 5);
namedWindow("中值滤波处理图", 0);
imshow("中值滤波处理图", dst);
}