chapter15图像滤波

来源:互联网 发布:河南大学软件协会 编辑:程序博客网 时间:2024/06/16 00:05

我们这一讲主要讲比较常用的图像滤波器(均值滤波,高斯滤波,中值滤波)。

图像滤波简介:

滤波实际上是信号处理的一个概念,图像可以看成一个二维信号,其中像素点

灰度值得高低代表信号的强弱

高频:图像中变化剧烈的部分
低频:图像中变化缓慢,平坦的部分
根据图像高低频特性,设置高通和低通滤波器。高通滤波可以检测图像中尖锐、

变化明显的地方,低通滤波可以让图像变得平滑,消除噪声干扰

图像滤波是OpenCV图像处理的重要部分,在图像预处理方面应用广泛,
图像滤波的好坏决定着后续处理的结果好坏

    线性滤波:方框滤波、均值滤波、高斯滤波

    非线性滤波:中值滤波、双边滤波

滤波的原理:




                                   

线性滤波器输出像素g(i,j)是输入像素f(i+k,j+I)的加权和,其中h(k,l)我们称之为

核,是滤波器的加权系数,上面式子简写为:

                          


1)均值滤波---blur()

均值滤波即方框滤波归一化特例,就是用邻域内像素均值来代替该点像素值,

均值滤波在去噪的同时也破坏了图像细节部分

函数原型:

ksize: Size类型表示内核大小,一般用Size(w,h)表示内核大小,Size(3,3)表示3x3的核大小

anchor:表示锚点(即被平滑的那个点),默认值Point(-1,-1),表示锚点在核中心

borderType:图像像素边界模式,一般用默认

   即可

2)高斯滤波---blurGaussianBlur()

高斯滤波器被称为最有用的滤波器,每个像素点都是由本身和邻域内的其他像素值经过加权平均后得到,

加权系数越靠近中心越大,越远离中心越小,能够很好的滤除噪声。

函数原型:



ksize:高斯内核大小,一般用Size(w,h)表示内核大小,w, h可以不同,但是必须为正奇数或者0,sigma计算得来

sigmaX:表示高斯函数在X方向上的标准偏差

sigmaY:表示高斯函数在Y方向上的标准偏差,

sigmaY=0,就将它设置为sigmaX

若sigmaY=0&& sigmaX=0则由ksize.width和ksize.height计算出来

borderType:图像像素边界模式,一般用默认值即可

3)中值滤波---medianBlur()

中值滤波是一种非线性滤波,是用像素点邻域灰度值的中值代替该点的灰度值,可以去除脉冲噪声和椒盐噪声

median({1,2,3,3,7,5,1,8})=3 排序后的中间那个值

函数原型:


ksize:int类型的孔径的线性尺寸,大于1的奇数

4)双边滤波---bilateralFilter()

双边滤波是一种非线性滤波,是结合图像空间邻近度和像素值相似度的一种折中处理,尽量在去噪同时保存边缘

函数原型:


d:表示过滤过程中每个像素的邻域直径

sigmaColor:颜色空间滤波器sigma,值越大表面该像素邻域内有越广泛的颜色会混到一起,产生较大的半相等颜色区域

sigmaSpace:坐标空间中滤波器的sigma,坐标空间的标准方差

borderType:图像像素边界模式,一般用默认值即


#include"opencv2/opencv.hpp"using namespace cv;void main(){Mat src = imread("a.jpg");Mat dst1;Mat dst2; Mat dst3;Mat dst4;Size size0 = Size(3, 3);blur(src,dst1,size0);//均值滤波GaussianBlur(src,dst2,size0,1);//高斯滤波medianBlur(src,dst3,5);//中值滤波bilateralFilter(src,dst4,5,10.0,2.0);//双边滤波imshow("原图",src);imshow("均值滤波",dst1);imshow("高斯滤波", dst2);imshow("中值滤波", dst3);imshow("双边滤波", dst4);waitKey(0);}






原创粉丝点击