Opencv cvSmooth平滑滤波函数

来源:互联网 发布:手机安卓php 编辑:程序博客网 时间:2024/05/21 06:16

/* Smoothes array (removes noise) */CVAPI(void) cvSmooth( const CvArr* src, CvArr* dst,                      int smoothtype CV_DEFAULT(CV_GAUSSIAN),                      int size1 CV_DEFAULT(3),                      int size2 CV_DEFAULT(0),                      double sigma1 CV_DEFAULT(0),                      double sigma2 CV_DEFAULT(0));


 void cvSmooth( const CvArr* src, CvArr* dst,int smoothtype=CV_GAUSSIAN,

                          int param1, int param2, double param3, double param4 );
src:输入图像.
dst:输出图像.
smoothtype平滑方法:
CV_BLUR_NO_SCALE(简单不带尺度变换的模糊) - -对每个象素的 param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数 cvIntegral 计算积分图像。
CV_BLUR (simple blur)- -对每个象素param1×param2邻域求和并做尺度变换 1/(param1×param2)。
CV_GAUSSIAN(gaussian blur) - -对图像进行核大小为 param1×param2 的高斯卷积。
CV_MEDIAN(median blur) - -对图像进行核大小为param1×param1 的中值滤波 (邻域是方的)。
CV_BILATERAL(双向滤波) - -应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2.。

       双向滤波是”边缘保留滤波“的图像分析方法中的一种。将它与高斯平滑对比后会更容易理解。进行高斯滤波的通常原因是真实图像在空间内的像素是缓慢变化的,因此邻近点的像素变化不会很明显。但是随机的两个点就可能形成很大的像素差(即空间上噪声点不是相互联系的)。正式基于这一点,高斯滤波在保留信号的条件下减少噪声。但是这种方法在接近边缘处就无效了,因为边缘处的相邻像素联系不太紧密,因此,高斯滤波会磨平边缘。双边滤波能够提供一种不会将边缘平滑掉的方法,但作为代价,需要更多处理时间。与高斯滤波类似,双边滤波会依据每个像素及其邻域构造一个加权平均值,加权计算包括两个部分,其中第一部分加权方式与高斯平滑中的相同,第二部分也属于高斯加权,但不是基于中心像素点与其他像素点的空间距离之上的加权,而是基于其他像素与中心像素的亮度差值的加权。可以将双边滤波视为高斯平滑,对相似的像素富裕较高的权重,不相似的像素赋予较小权重。这种滤波的典型效果就是使处理过的图像看上去像是一幅源图的水彩画,可用于图像的分割。双边滤波含有两个参数。第一个参数代表空域中所使用的高斯核的宽度,与高斯滤波的sigma参数类似。第二个参数代表颜色域内高斯核的宽度。第二个参数越大,表明带滤波的强度或颜色范围越大(因此不连续的程度越高,以便保留)。

调用源码如下:

//高斯滤波先,以平滑图像  cvSmooth(pFrameMat, pFrameMat, CV_GAUSSIAN, 3, 3,0, 0);



0 0
原创粉丝点击