//GaussianBlur();
IplImage* iplImage;
cvSmooth(plDestImage, plDestImage, CV_GAUSSIAN, 3, 3, 3 , 3);//不能为偶数//高斯滤波
//cvSmooth(plDestImage, plDestImage, CV_MEDIAN);
移位的高斯滤波内核将导致图像平滑+移位。如果要使用不使图像移位的滤镜,则滤镜必须在内核原点(通常是奇数内核的中心像素)处具有高斯原点。
一旦我们确定了,使用大小相等的过滤器必须导致不对称内核。真的不希望有一个非对称平滑滤波器(除非我们在谈论自适应滤波),因为不对称会引入偏差。
因此,我们坚持奇数大小的过滤器。偶数大小的滤镜会引入偏差或偏移半个像素。
2像素内核不能是高斯滤镜,因为它至少需要5个样本代表具有足够细节的高斯核,以呈现高斯滤波器的积极方面。
样本较少时,该过滤器的行为就不会像高斯过滤器。
参考:
高斯滤波–奇数大小的过滤器,如果为偶数,则会导致不对称,会偏半个像素等
OpenCV实现的高斯滤波探究_1(《学习OpenCV》练习题第五章第三题ab部分)
总结: 1. 在OpenCV所实现的高斯滤波中,param1或者param2为零(即变换核为0的时候),将根据param3或者param4的值算出变换核的大小;对于8位单通道图像,算法是size = 6*sigma + 1;
2. 在产生高斯变换核的标准差(sigma)指定时,如果两个核大小差不多,很有可能出来的滤波结果图几乎完全一模一样;
3. 在标准差固定时,变换核越大,滤波出来的图像越模糊,丢失的细节也就越多;
4. 在变换核的尺寸固定时,标准差(即sigma,param3)越大,滤波出来的图像越模糊,丢失的细节也就越多。
下面来自知乎
高斯模糊实质上就是一种均值模糊,只是高斯模糊是按照加权平均的,距离越近的点权重越大,距离越远的点权重越小。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有 sigma 计算 (以保证足够精确的操作).
、
void cvSmooth( const CvArr* src, CvArr* dst,
int smoothtype=CV_GAUSSIAN,
int param1=3, int param2=0, double param3=0 );
原型说明:
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 的高斯卷积,12参数为卷积核的宽高,34为标准差,越大曰模糊,12参数再3-7时速度很快的。
CV_MEDIAN (median blur) - 发现邻域 param1×param1 的中值 (i.e. 邻域是方的).
CV_BILATERAL (双滤波) - 应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2. 关于双向滤波,可参考