opencv基础之滤波

参考资料 浅墨的opencv3入门编程
> http://blog.csdn.net/poem_qianmo/article/details/23184547
首先滤波的目的:抽出对象的特征作为图像识别的特征模式;另一个目的是适应图像的处理要求,消除图像数字化时所混入的噪声;
而且这个功能应用很常见,属于图像预处理的重要部分,在opencv中的imgproc源码中能找的到。

在这里还要了解两个概念:图像中的高频和低频
图像的高低频是对图像各个位置之间强度变化的一种度量方法.
低频分量:主要对整副图像的强度的综合度量.
高频分量:主要是对图像边缘和轮廓的度量.
变化越尖锐的地方高频频谱越多,图像细节就是变化尖锐的地方
高反差也一样,它变化很快,过渡区很小,相当于变化尖锐。
深灰到白的颜色变化比浅灰到白要大,颜色过渡更尖锐,高频分量也更多。
平滑滤波 一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段。
这样看还是有一些抽象,比如文档中,有文字信息及边缘轮廓的是属于高频,旁边的白色背景的部分属于低频

线性滤波和非线性滤波

线性滤波和非线性滤波的介绍
线性滤波器:剔除输入信号中不想要的频率或者许多频率中选择一个想要的频率。常见的有低通、高通、带通、带阻、全通、陷波等滤波器。

这个概念比较重要:低通是模糊,高通是锐化。
网上看到的滤波处理都是把图像变得模糊,其实这个处理的目的主要给计算机看的,我们人眼看的一些模糊图,跟我一样的初学者可能有些郁闷,滤波不是应该让图像变得更好看的么?而滤波后的图是为了让计算机按照人的思路去理解图像。

线性滤波函数主要介绍:
方框滤波(boxFiler)boxFilter(src,dst,ddepth,ksize,anchor=point(-1,-1),boolnormalize=ture,borderType=BORDER_DEFAULT)
其中src和dst是输入和输出的文件名
int类型的ddepth,输出图像的深度,-1代表使用原图的深度,即src.depth() ;(图像的深度指图像的位数,如8,16,32等位)
Size类型的ksize,内核大小。size(w,h)来表示内核大小,w为像素宽度,h为像素的高度;
默认值Point类型的锚点anchor,(-1,-1)表示在核的中心;
bool类型的normalize,默认值为true,一个标识符,表示是否在其区域被归一化了。归一化就是把要处理的量都缩放到一个范围内,比如(0,1),以便统一处理和直观量化。而非归一化的方框滤波用于计算每个像素领域内的积分特性,比如密集光流算法中用到的图像倒数的协方差矩阵。


这里要说明一下,线性滤波是通过一个模板来对原图像进行卷积操作,所谓卷积就是用一个3X3或者5X5的矩阵跟图像进行乘积操作,然后求出图像中该点的具体数值。
详见课参考>http://blog.csdn.net/xiaowei_cqu/article/details/7785365


均值滤波void blur(src,dst,ksize,anchor=point(-1,-1),int borderType=BORDER_DEFAULT)归一化后的滤波函数

高斯滤波void GuassianBlur(src,dst,ksize,double sigmaX,sigmaY=0,borderType=BORDER_DEFAULT)
Size类型的ksize高斯内核的大小。ksize.width和ksize.height可以不同,但必须为正数和奇数或者为0;
double类型的sigmaX,表示高斯核函数在X方向的标准偏差;
double类型的sigmaY,表示高斯核函数在Y方向的标准偏差。若sigmaX和sigmaY都为0,那么就由ksize.width和ksize.height计算出来


非线性滤波
中值滤波(median filter)void medianBlur(src,dst,ksize)
ksize必须是大于0的奇数
用像素点领域灰度值的中值来代替该像素点的灰度值,去除脉冲噪声、椒盐噪声的同时又能保留图像的边缘细节;

双边滤波 (bilateral filter)void bilateralFilter(src,dst,d,sigmaColor,sigmaSpace,int borderTyp=BORDER_DEFAULT)

参考浅墨的博客可以看出双边滤波的效果跟人的心理需求的结果很接近,图像没有太明显变化。
注意线性滤波和非线性滤波重要大区别,线性滤波是通过模板卷积得到每个像素的值;而非线性滤波是不用模板,根据内核来求该点像素值,就是通过领域中各点的值来求出该点的像素值。
至于哪种滤波效果更适用,以后的学习还是要多关注这方面的内容。

希望自己下面的学习能加强对源代码的理解。毕竟没有什么C基础的人学起图像处理,就像是跟一群高手打篮球,都说只是玩玩,结果每场下来,球都碰不到,凑人数而已。

另外
线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如均值滤波器(模板内像素灰度值的平均值)、高斯滤波器(高斯加权平均值)等.由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是可以确定并且是唯一的(转移函数即模板的傅里叶变换).
非线性滤波器的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现,如最大值滤波器、最小值滤波器、中值滤波器等,是通过比较一定邻域内的灰度值大小来实现的,没有固定的模板,因而也就没有特定的转移函数(因为没有模板作傅里叶变换),另外,膨胀和腐蚀也是通过最大值、最小值滤波器实现的.
高斯噪声是指噪声服从高斯分布,即某个强度的噪声点个数最多,离这个强度越远噪声点个数越少,且这个规律服从高斯分布.高斯噪声是一种加性噪声,即噪声直接加到原图像上,因此可以用线性滤波器滤除.
椒盐噪声类似把椒盐撒在图像上,因此得名,是一种在图像上出现很多白点或黑点的噪声,如电视里的雪花噪声等.椒盐噪声可以认为是一种逻辑噪声,用线性滤波器滤除的结果不好,一般采用中值滤波器滤波可以得到较好的结果.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值