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

空域滤波按照对像素的操作方法,可以分为两类:线性滤波(低通、高通、带通)和非线性滤波(最大值、最小值、中值)

按照图像处理的效果,可以分为平滑滤波和锐化滤波。

“线性滤波”这个概念其实是从信号与系统里面借用过来的。输入信号通过一个线性系统时,输出的结果是输入信号与系统时域冲击响应的卷积。而在图像处理中,则使用模板对像素(及其周围像素)进行线型加权运算,权值取决于模板的像素值。运算方法与卷积类似,所以就称为滤波了。非线性滤波自然进行不是线性运算了。

由于没有贴公式,所以可能大家对文字的解释不是很理解,不行还是看书吧。这里主要想说明这些滤波的特点以及程序是如何实现的:

 

今天先从最简单的均值滤波器开始:

	//源图像
	Mat scr = imread("D:/picture/img.tif");
	//结果图像
	Mat rst;
	rst.create(scr.rows,scr.cols,scr.type());
	imshow("原图像",scr);	
	//均值滤波函数:就使用模板里面所有像素的平均值来代替锚点的像素值
	blur(scr,rst,Size(5,5));	
	imshow("平滑滤波结果",rst);	


 

 结果如图:

我的OpenCV学习笔记(八):空域滤波之均值滤波_第1张图片

当把模板换成10*10时

我的OpenCV学习笔记(八):空域滤波之均值滤波_第2张图片

明显,模板越大,图像越模糊。所以如果你使用滤波器的目的是去除噪音,那么同时也会平滑图像的细节。

当然你也可用使用filter2D函数来实现同样的操作:

	//调用滤波函数来完成图像的锐化 
    //滤波器的核 
	Mat kernel = Mat::ones( 5, 5, CV_32F )/ (float)(5*5);

    //调用滤波函数 
    filter2D(scr,rst,scr.depth(),kernel); 


 

你可能感兴趣的:(filter,float,图像处理)