经图像信息输入系统获取的源图像中通常都含有各种各样的噪声和畸变,会大大影响图像的质量。因此,在图像进行分析之前,必须先对图像质量进行改善。通常,采用图像增强的方法对图像进行改善。图像增强的目的是为了改善图像的视觉效果,提高图像的清晰度和工艺的适应性,以及便于人与计算机的分析与处理,以满足图像复制或再现的要求。
在OpenCV中处理图像降噪的方法主要有:图像均值平滑滤波(blur)、高斯平滑滤波(GaussianBlur)、图像中值滤波(medianBlur)、图像双边滤波(bilateraFilter)。原型如下所示:
blur
(
InputArray src,
OutputArray dest,
Size ksize,
Point anchor=Point(-1,-1),
int borderType=BORDER_DEFAULT
)
参数src:表示输入图像,
参数dest:表示输出图像,
参数ksize:表示核的大小
参数anchor:表示锚点,默认值表示锚点在图像的中心,
参数borderType:表示边界模式,
事例程序blur()
Mat image = imread("ATCpcb.png");
Mat resultImage;
blur(image,resultImage,Size(3,3));
imshow("均值滤波:",resultImage);
waitKey();
结果:
【居然传不上来图,在此省略】
GaussianBlur(InputArray src,OutputArray dst,Size ksize,double sigmaX,double sigmaY=0,int bordertype = BORDER_DEFAULT)
前两个参数与前面所述函数一样;
参数ksize:表示高斯核大小,长宽可以不一样,但是必须是正奇数;
参数sigmaX与参数sigmaY:分别表示高斯核在X与Y方向上的标准差,(sigmaY=0时,其值自动由sigmaX确定(sigmaY=sigmaX);sigmaY=sigmaX=0时,它们的值将由ksize.width和ksize.height自动确定);
参数bordertype:表示像素外插策略;
medianBlur(InputArray src,OutputArray dst,int ksize)
前两个参数与前述函数相同,
参数ksize:表示孔径的线性尺寸(aperture linear size),注意这个参数必须是大于1的奇数,比如:3,5,7,9 ...
void bilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT )
函数前两个参数与前述函数的相同;
参数d:表示滤波邻域直径。如果这个值设为负数,那么这个值由参数sigmaColor计算出。
参数sigmaColor:表示滤波的色彩空间参数。这个值越大,代表滤波计算邻域内有更多的色彩权重。
参数sigmaSpace:表示滤波的距离空间参数。这个值越大,代表当颜色距离相同时,会有更多的点被影响到。如果参数d>0,则邻域大小由d指定,否则,d是sigmaSpace的一个比例结果。