一、图像处理之平滑处理(cvsmooth)
平滑处理(smoothing)也称模糊处理(bluring),是一项简单且使用频率很高的图像处理方法,用途很多,但最常见的是用来减少图像上的噪点或者失真。降低图像分辨率时,平滑处理是非常好用的方法。
目前opencv可以提供5中不同的平滑操作方法,所有操作都有cvsmooth函数实现。
1 void cvSmooth( const CvArr* src, 2 CvArr* dst, 3 int smoothtype=CV_GAUSSIAN, 4 int param1=3, 5 int param2=0, 6 double param3=0 , 7 double param4=0);
src:输入图像
dst:输出图像
smoothtype:平滑方法
(1)CV_BLUR_NO_SCALE (简单不带尺度变换的模糊)---对每个象素的 param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数 cvIntegral 计算积分图像。
(2)CV_BLUR (simple blur简单模糊)---对每个象素param1×param2邻域 求和并做尺度变换 1/(param1*param2)。
(3)CV_GAUSSIAN (gaussian blur高斯滤波)---对图像进行核大小为 param1×param2 的高斯卷积
(4)CV_MEDIAN (median blur中值滤波)---对图像进行核大小为param1×param1 的中值滤波(i.e. 邻域是方的)。
(5)CV_BILATERAL (双向滤波/双边滤波)---应用核大小为param1×param1的滤波,彩色sigma=param3,空间 sigma=param4。
param1
平滑操作的第一个参数,一般为卷积核的水平方向直径(选择CV_GAUSSIAN平滑时必须为奇数,否则会触发assert错误)。
param2
平滑操作的第二个参数,对于简单/非尺度变换的高斯模糊的情况,如果param2的值为零,则表示其被设定为param1。
param3
对应高斯参数的 Gaussian sigma (标准差), 如果为零则标准差由下面的核尺寸计算:
sigma = (n/2 - 1)*0.3 + 0.8,其中 n=param1 对应水平核,n=param2 对应垂直核。
对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有 sigma 计算 (以保证足够精确的操作)。
param4
除CV_BILATERAL外均可以不指定该参数。CV_GAUSSIAN 模式下可以用来指定水平和垂直方向两个不同的sigma,如果<=0则param4=param3。
注意:中值滤波主要用来消除椒盐噪声,高斯滤波主要用来消除高斯噪声,自然界一般存在高斯噪声。
二、图像滤波
图像滤波,指在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。
消除图像中噪声成分叫做图像的平滑化或滤波操作。信号或图像的能量大部分集中在幅度谱的低频和中频段,而在较高频段,有用的信息经常被噪声淹没,因此一个能降低高频成分幅度的滤波器就能够减弱噪声的影响。