“平滑处理”也成为“模糊处理”,是一项简单且使用频率很高的图像处理方法,用图很多,但最常见的是用来减少图像上的噪声或者失真。降低图像分辨率时,平滑处理是很重要的。
目前opencv可以提供5中不同的平滑操作方法,所有操作都有cvsmooth函数实现。
利用平均模板,采用领域平均,输出图像是窗口输入图像对应像素的简单平均值。
(2)简单无缩放变换的模糊
简单无缩放变换的模糊与简单模糊本质是相同的,但并没有计算其平均值。但不缩放的比缩放的模糊操作更快一些。
中值滤波的本质上是一种统计的排序滤波器。对于原图像中某点(i,j),中值滤波以该点为中心的领域内的所有像素的统计排序的中值作为(I,j)的响应,中值不同于均值,是指排序队列中位于中间位置的元素的值,例如:采用3*3中值滤波器,某点的8个领域的一系列像素的值为:12,18,18,11,23,22,13,25,118,统计的排序结果为:11,12,13,18,18,22,23,25,118,排在中间位置的第5位18作为中间滤波器的响应。而opencv里讲中心像素的正方形领域内的每个像素值用中间像素值替换。
平均平滑对领域内的像素一视同仁,为了减少平滑处理中的模糊,得到更自然的平滑效果,而高斯模板是适当加大模板中心点的权重,随着远离中心点,权重迅速减小,从而可确保中心点看起来更接近与他距离更近的点。
高斯模板正是将连续的二维高斯离散化表示,因此任意大小的高斯模板可以通过建立一个(2k+1)*(2k+1)的矩阵M得到,其中(i,j)位置元素可如下确定:
双边滤波是“边缘保留滤波”的图像分析方法,高斯滤波会磨平边缘,而双边滤波提供一种不会将边缘的平滑掉的方法,但作为代价需要更多的时间。与高斯滤波相似,双边滤波会依据每个像素及其领域构造一个加权平均值,加权计算包括两部分,其中一部分加权方式与高斯平滑中相同,第而部分也属于高斯加权,但不是基于中心像素点与其他像素点空间距离之上的加权,而是基于其他像素与中心像素的亮度差值的加权。
Smooth函数
void cvSmooth( const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0 , double param4=0 ); |
src
输入图像。
dst
输出图像。
smoothtype
平滑方法。
param1、param2、param3、param4
这些参数的含义取决于smoothtype的值,有兴趣可以查阅相关资料。
注意:中值滤波主要用来消除椒盐噪声,高斯滤波主要用来消除高斯噪声,自然界一般存在高斯噪声。
/*code*/
#include
#include
int main(int argc, char ** argv)
{
IplImage *src, *dst_blur, *dst_median, *dst_gaussian;
src = cvLoadImage( "lena_salt_5.jpg",0 );
dst_blur = cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, 1 );
dst_median = cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, 1 );
dst_gaussian = cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, 1 );
cvNamedWindow( "src", 1 );
cvNamedWindow( "blur", 1 );
cvNamedWindow( "median", 1 );
cvNamedWindow( "gaussian", 1 );
cvSmooth(src,dst_blur,CV_BLUR,3,3,0,0); //邻域平均滤波
cvSmooth(src,dst_median,CV_MEDIAN,3,3,0,0); //中值滤波
cvSmooth(src,dst_gaussian,CV_GAUSSIAN,3,3,0,0); //高斯滤波
cvShowImage( "src", src );
cvShowImage( "blur", dst_blur );
cvShowImage( "median", dst_median );
cvShowImage( "gaussian", dst_gaussian );
cvWaitKey(0);
cvReleaseImage( &src );
cvReleaseImage( &dst_blur );
cvReleaseImage( &dst_median );
cvReleaseImage( &dst_gaussian );
return 0;
}
/*result*/
/***源图像***/
/***领域平均***/
/***中值滤波***/
/***高斯滤波***/