深入剖析高斯滤波

深入剖析高斯滤波

ID:10804764

大小:44.50 KB

页数:4页

时间:2018-07-08

深入剖析高斯滤波_第1页
深入剖析高斯滤波_第2页
深入剖析高斯滤波_第3页
深入剖析高斯滤波_第4页
资源描述:

《深入剖析高斯滤波》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、高斯滤波(高斯平滑)是数字图像处理和计算机视觉里面最常见的操作。平时,我们都是用Matlab或者OpenCV的函数调用:imfilter或者cvSmooth,并不关心底层的实现。然而当开发者要自己实现高斯滤波的时候,往往就会很迷惘,经常会被下面几个问题所困扰:1、给定sigma,即标准偏差,怎么确定离散化后的滤波器窗口大小?2、给定窗口大小,怎么计算高斯核的sigma,即标准偏差?3、怎么实现可分离滤波器?在网上搜了一下,还真没几个人把实现的细节讲清楚了。这里,我尝试结合三份源码,做个小小的总结。三份源码分别是:

2、1、OpenCV中的cvfilter.cpp2、autopano-sift-c中的GaussianConvolution.c3、GIMP中的blur-gauss.c和unsharp-mask.c在图像处理中,高斯滤波一般有两种实现方式,一种是用离散化的滑动窗口进行卷积运算,另一种则是通过傅里叶变换来实现。最常见的就是第一种卷积核实现,只有当离散化的窗口非常大,计算非常耗时(这时可使用可分离滤波器)的情况下,可能会考虑基于傅里叶变换的实现方法。这里我们只讨论第一种方法。二维高斯函数的形式是这样的:有着如下的形状:基

3、本上,离散化的主旨就是保留高斯函数中心能量最集中的中间部分,忽略四周能量很小的平坦区域。这只是个很感性的描述,具体实现起来,就会出现千奇百怪的版本。下面结合三份源码,看看现实世界里的高斯平滑到底长的什么样子。首先是第一个问题:给定sigma,怎么计算窗口大小?直接上OpenCV的源码,在cvFilter函数中:param1=cvRound(sigma1*(depth==CV_8U?3:4)*2+1)

4、1;OpenCV认为半径为3*sigma的窗口就是高斯函数的能量最集中的区域。(在图像位深度不是8的时候,使用4*

5、sigma半径的窗口?)autopan0-sift-c是图像拼接软件hugin里面的sift实现,在实现DoG的时候需要做不同尺度的高斯平滑,在GaussianConvolution_new1函数中实现如下:dim=1+2*((int)(3.0*sigma));可见autopano也是实现的3*sigma半径的窗口。在GIMP里,实现比较奇特,在blur_gauss.c的make_rle_curve函数里面,constgdoublesigma2=2*sigma*sigma;constgdoublel=sqrt(-

6、sigma2*log(1.0/255.0));intn=ceil(l)*2;if((n%2)==0)n+=1;从效果来看,这个实现的窗口半径是约等于2.2*sigma。然后是第二个问题:给定窗口大小,怎么计算sigma?OpenCV的实现,在cvFilter.cpp的init_gaussian_kernel函数中:sigmaX=sigma>0?sigma:(n/2–1)*0.3+0.8;sigma的大小约为窗口半径的0.3倍再加上0.8。autopano没有实现这个特性。GIMP的实现:/*wewanttogen

7、erateamatrixthatgoesoutacertainradius*fromthecenter,sowehavetogooutceil(rad-0.5)pixels,*inlcudingthecenterpixel.Ofcourse,that’sonlyinonedirection,*sowehavetogothesameamountintheotherdirection,butnotcount*thecenterpixelagain.Sowedoublethepreviousresultandsubtr

8、act*one.*Theradiusparameterthatispassedtothisfunctionisusedas*thestandarddeviation,andtheradiusofeffectisthe*standarddeviation*2.It’salittleconfusing.*/radius=fabs(radius)+1.0;std_dev=radius;radius=std_dev*2;/*goout‘radius’ineachdirection*/matrix_length=2*cei

9、l(radius–0.5)+1;注释讲的很清楚了,基本上就是认为sigma应该等于窗口半径的一半。看完这三份源码,结论就是,关于sigma和窗口的大小,你爱怎么算都可以,这个由你的实际需要决定,别太离谱就行。(根据概率理论,高斯分布的样本绝大部分集中在3倍标准差以内的区域。)第三个问题是可分离滤波器:首先说明为什么要使用可分离滤波器。实际上,模板运算(滑动窗口卷积)在数字

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。