opencv --图像滤波

来源:互联网 发布:itools pro for mac 编辑:程序博客网 时间:2024/06/05 05:09

图像滤波简介
**滤波实际上是信号处理的一个概念,图像可以看做是一个二维信号,其中像素点灰度值的高低表示信号的强弱
**高频:图像中变化剧烈的部分
**低频:图像中变化,平坦的部分
** 根据图像高低频特性,设置高通和低通滤波器,高通滤波可以=检测图像中的尖锐,变化明显的地方,低通滤波可以让图像变得平滑,消除噪声干扰
**图像滤波在图像预处理方面应用广泛,图像滤波的好坏决定着后续处理的结果好坏
**低通滤波(图像的平滑去燥),高通部分(边缘检测)
**线性滤波 :方框滤波,均值滤波,高斯滤波
非线性滤波:中值滤波,双边滤波

邻域算子:利用给定像素周围的像素值决定此像素的最终输出值的一种算子
线性滤波:一种常用的邻域算子,像素输出取决于输入像素的加权和
这里写图片描述
线性滤波器输出像素g(i,j)是输入像素f(i+k.j+l)的加权和,其中h(k,1)我们称之为核,是滤波器的加权系数
1)方框滤波——boxFilter()
方框滤波用到核:
这里写图片描述
当normalize为true,方框滤波也就成了均值滤波,也就是说均值滤波是方框滤波归一化后的特殊情况,归一化就是要将处理的量缩放到一定范围,比如(0,1)
函数原型
CV_EXPORTS_W void boxFilter(InputArray src,OutputArray dst,int ddepth,Size ksize,Point anchor=Point(-1,-1),bool normalize=true,int borderType=BORDER_DEFAULT);
*ddepth :输出图像深度,-1表示使用原来的图像深度,即src.depth()
*Ksize:Size类型表示内核大小,一般用Size(w,h)表示内核大小,Size(3,3)表示3*3的核大小
*anchor:表示锚点(即被平滑的那个点),默认值Point(-1,-1)表示锚点在核的中心
*borderType:图像像素边界模式,一般用默认值就好
一般都设置为true
核越大滤的越 严重

2)均值滤波————blur()
均值滤波是方框滤波归一化的特例,就是用邻域内像素均值来代替该点的像素值,均值滤波在去噪的同时也破坏了图像细节部分
void blur(InputArray src,OutputArray dst,Size Ksize,Piont anchor=Point(-1,-1),int borderType=BORDER_DEFAULT);
**Ksize:Size类型表示内核大小,一般用Size(w,h)表示内核大小,Size(3,3)表示3*3的核大小
**anchor:表示锚点(即被平滑的那个点),默认值Point(-1,-1)表示锚点在核中心
**borderType:图像像素边界模式,一般用默认值即可

3)高斯滤波————blurGaussianBlue()
高斯滤波器被称为最有用的滤波器,每个像素点都是由本身和邻域内的其他像素值经过加权平均得到的,加权系数越靠近中心越大,越远离中心越小,能够很好的滤除噪声
void GaussianBlur(InputArray src,OutputArray dst,Size ksize,double sigmaX,double sigamaY=0,int borderType=BORDER_DEFAULT);
**Ksize:高斯内核的大小,一般用Size(w,h)表示内核的大小,w,h可以不同,但是必须为正奇数或者0,由sigma计算得来
*sigmaX:表示高斯函数在X方向上的标准偏差
*sigmaY:表示高斯函数在Y方向上的标准偏差,若sigmaY=0就把他设置为signmaX
若signmaX=0&&signmaY=0则由ksize.width和Ksize.height 计算出来
*borderType:图像像素边界模式,一般用默认值即可
去除那些符合正态分布的噪声
4)中值滤波————medianBlur()
中值滤波是一种非线性滤波,是用像素点邻域灰度值的中值代替该点的灰度值,可以用来去除脉冲噪声和椒盐噪声
void medianBlur(InputArray src,OutputArray dst,int ksize);
ksize :int类型的孔径的线性尺寸,大于1的奇数
5)双边滤波————bilateralFilter()
双边滤波是一种非线性滤波,是结合图像空间邻近度和像素值相似度的一种折中处理,尽量在去燥的同时保存边缘
void bilateralFilter(InputArray src,OutputArray dst,int d,double signmaColor,double sigmaSpacem,int borderType=BORDER_DEFAULT);
*d:表示过滤过程中每个像素的邻域直径
*signmaColor:颜色空间滤波器sigma值,值越大表示该像素邻域内有越广泛的颜色会混到一起,产生较大的半相等颜色区域
*signmaSpace:坐标空间中滤波器的signma值,坐标空间的标准方差
*borderType:图像像素边界模式,一般用默认值即可
bilateralFilter(srcImg,dstImg,5,10.0,2.0);

原创粉丝点击