平滑处理(cvSmooth)

“平滑处理”也成为“模糊处理”,是一项简单且使用频率很高的图像处理方法,用图很多,但最常见的是用来减少图像上的噪声或者失真。降低图像分辨率时,平滑处理是很重要的。

目前

(1)简单模糊

利用平均模板,采用领域平均,输出图像是窗口输入图像对应像素的简单平均值。

(2)简单无缩放变换的模糊

简单无缩放变换的模糊与简单模糊本质是相同的,但并没有计算其平均值。但不缩放的比缩放的模糊操作更快一些。

(3)中值滤波

中值滤波的本质上是一种统计的排序滤波器。对于原图像中某点(

(4)高斯模糊

平均平滑对领域内的像素一视同仁,为了减少平滑处理中的模糊,得到更自然的平滑效果,而高斯模板是适当加大模板中心点的权重,随着远离中心点,,权重迅速减小,从而可确保中心点看起来更接近与他距离更近的点。

高斯模板正是将连续的二维高斯离散化表示,因此任意大小的高斯模板可以通过建立一个

(5)双边滤波

双边滤波是“边缘保留滤波”的图像分析方法,高斯滤波会磨平边缘,而双边滤波提供一种不会将边缘的平滑掉的方法,但作为代价需要更多的时间。与高斯滤波相似,双边滤波会依据每个像素及其领域构造一个加权平均值,加权计算包括两部分,其中一部分加权方式与高斯平滑中相同,第而部分也属于高斯加权,但不是基于中心像素点与其他像素点空间距离之上的加权,而是基于其他像素与中心像素的亮度差值的加权。

voidcvSmooth(constCvArr*src,

CvArr*dst,

intsmoothtype=CV_GAUSSIAN,

intparam1=3,

intparam2=0,

doubleparam3=0,

src

输入图像。

dst

输出图像。

smoothtype

平滑方法。

param1、param2、param3、param4

这些参数的含义取决于smoothtype的值,有兴趣可以查阅相关资料。

注意:中值滤波主要用来消除椒盐噪声,高斯滤波主要用来消除高斯噪声,自然界一般存在高斯噪声。

#include <highgui.h> #include <cv.h>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*/

/***源图像***/

/***领域平均***/

/***中值滤波***/

/***高斯滤波***/

所有的胜利,与征服自己的胜利比起来,都是微不足道

平滑处理(cvSmooth)

相关文章:

你感兴趣的文章:

标签云: