您的位置:首页 > 运维架构

我的OpenCV学习笔记(1):空域滤波之中值滤波

2014-10-15 13:27 435 查看
中值滤波就是将当前像素值替换为模板覆盖范围内的所有像素值中大小居中那一个:对于一个3*3的模板,第5大的就是中值:

(10,15,20,20,20,20,20,25,100)

中值滤波使得那些更亮(或者更暗)的点更像他周围的值。所以它在滤除噪音的同时,可以较好地保留细节轮廓。

为了验证上述结论,我先给一幅图像加入椒盐噪声,然后用分别用中值滤波、均值滤波处理图像,进行对比:

[cpp] view
plaincopy

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;

void salt(Mat& image, int n)

{

for(int k=0; k<n; k++)

{

int i = rand()%image.cols;

int j = rand()%image.rows;

if(image.channels() == 1)

{

image.at<uchar>(j,i) = 255;

}

else

{

image.at<Vec3b>(j,i)[0] = 255;

image.at<Vec3b>(j,i)[1] = 255;

image.at<Vec3b>(j,i)[2] = 255;

}

}

}

int main()

{

//源图像

Mat scr = imread("D:/picture/img.tif");

Mat rst;

imshow("原图像",scr);

salt(scr, 500);

imshow("带噪声的图像",scr);

//中值滤波:就是用模板里面所有像素中间的那个值代替锚点的像素值

medianBlur(scr,rst,5);

imshow("中值滤波结果",rst);

//与均值滤波对比

blur(scr,rst,Size(5,5));

imshow("均值滤波结果",rst);

waitKey(0);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: