SIFT算法:DoG尺度空间生产
SIFT算法:DoG尺度空间生产 |
SIFT算法:KeyPoint找寻、定位与优化 |
SIFT算法:确定特征点方向 |
SIFT算法:特征描述子 |
目录:
1、高斯尺度空间(GSS - Gauss Scale Space)
2、高斯差分(DOG - Difference of Gauss)
2.1 生产DoG
2.2 为什么用DoG来检测特征点
3、GSS尺度选择
3.1 GSS中尺度值的产生
3.2 高斯核性质及其在SIFT中的应用
1 GSS(Gauss Scale-space)
It has been shown by Koenderink (1984) and Lindeberg (1994) that under a variety of reasonable assumptions the only possible scale-space kernel is the Gaussian function. Therefore, the scale space of an image is defined as a function, L(x, y, σ), that is produced from the convolution of a variable-scale Gaussian, G(x, y, σ), with an input image, I(x, y):
唯一能产生尺度空间的核为高斯核函数,所以我们将图像的尺度空间表示成一个函数L(x,y,σ),它是由一个变尺度的高斯函数G(x,y,σ)与图像I(x,y)卷积产生的。即
L(x, y, σ) = G(x, y, σ) ∗ I(x, y)
其中*代表卷积操作,G(x, y, σ) 为二维高斯核函数,表示为:
2 DoG(Difference of Gauss)
2.1 DoG生成
SIFT算法建议,在某一尺度上对特征点的检测,可以通过对两个相邻高斯尺度空间的图像相减,得到一个DoG (Difference of Gaussians)的响应值图像D(x,y,σ)。然后,仿照LoG方法,通过对响应值图像D(x,y,σ)进行非最大值抑制(局部极大搜索,正最大和负最大),在位置空间和尺度空间中定位特征点。其中
D(x, y, σ) = (G(x, y, kσ) − G(x, y, σ)) ∗ I(x, y) = L(x, y, kσ) − L(x, y, σ)
式中,k为相邻尺度空间倍数的常数。
2.2 为什么用DoG来检测特征点
In addition, the difference-of-Gaussian function provides a close approximation to the scale-normalized Laplacian of Gaussian, σ2∇2G, as studied by Lindeberg (1994). Lindeberg showed that the normalization of the Laplacian with the factor σ2 is required for true scale invariance. In detailed experimental comparisons, Mikolajczyk (2002) found that the maxima and minima of σ2∇2G produce the most stable image features compared to a range of other possible image functions, such as the gradient, Hessian, or Harris corner function.
Lindeberg证明用σ2标准化的高斯拉普拉斯(∇2G, LOG, Laplacian of Gauss)有着真正的尺度无关的特性,而Mikolajczyk发现,相比于其他一系列函数(比如梯度,Hessian,Harris角点函数等),用σ2标准化的高斯拉普拉斯(σ2∇2G)有着更稳定的图像特征,因此σ2∇2G函数是我们理想的寻找特征点的函数。而在此,我们利用DoG来近似σ2∇2G。
通过热传导方程也可以帮助我们理解DoG与σ2∇2G之间的近似关系。由热传导方程可知(通常用t=σ2):
对上式进行有限差分运算得:
因此
DoG = G(x, y, kσ) − G(x, y, σ) ≈ (k − 1)σ2∇2G
而常数项(k - 1)并不会影响极值的位置。所以DoG是σ2∇2G的近似。
对于使用DoG来近似σ2∇2G,有如下优点:
σ2∇2G需要使用两个方向的高斯二阶微分卷积核,而DoG直接使用高斯卷积核,省去了对卷积核的生成的运算量。
DoG保留了各个高斯尺度空间的图像,这样,在生成某一空间尺度的特征时,可以直接尺度空间图像,而无需重新再次生成该尺度的图像。
3 GSS尺度选择
3.1 GSS中尺度值的产生
由上一节知DoG近似于(k − 1)σ2∇2G,对于常数k,即为相邻高斯尺度空间的两幅图像的尺度倍数,Lowe在文中提到,The approximation error will go to zero as k goes to 1, but in practice we have found that the approximation has almost no impact on the stability of extrema detection or localization for even significant differences in scale, such as k = √2. 文中提到k值大小对于极值的检测没有什么影响。那么k究竟取多大呢?
We choose to divide each octave of scale space (i.e., doubling of σ) into an integer number, s, of intervals, so k = 21/s. We must produce s + 3 images in the stack of blurred images for each octave, so that final extrema detection covers a complete octave. Adjacent image scales are subtracted to produce the difference-of-Gaussian images shown on the right. Once a complete octave has been processed, we resample the Gaussian image that has twice the initial value of σ (it will be 2 images from the top of the stack) by taking every second pixel in each row and column. The accuracy of sampling relative to σ is no different than for the start of the previous octave, while computation is greatly reduced.
问题1 为什么用前一个octave中的倒数第三幅图像生成下一octave中的第一幅图像?
我们通过上图来解释这段话,由 “must produce s + 3 images in the stack of blurred images for each octave” 可知每层octave产生了5幅图像,所以s = 2。 同一octave相邻图像之间尺度为k倍的关系, k = 21/s = 21/2,仔细阅读上一段下划线部分,当完成一层octave的处理后,对2倍σ的高斯图像(即用尺度大小为2σ的高斯函数模糊的图像)进行二分重采样,得到下一个octave的第一幅图像。而这个用尺度大小为2σ的高斯函数模糊的图像总是处于该octave的倒数第三幅(由上往下数,第三幅。原文:it will be 2 images from the top of the stack,程序员都是从0开始数的咯),因为总共一层octave为s+3幅图像,第n层即为knσ0(其中 n = 0,1,...,s,s+1,s+2. k = 21/s),当n等于s时,knσ0 = 2σ0,第s层即为倒数第三层。
问题2 每层octave为什么生成s+3幅图像?
在极值比较的过程中,每一组图像的首末两层是无法进行极值比较的,为了满足尺度变化的连续性,生成高斯金字塔每组有s+3层图像。DOG金字塔每组有s+2层图像。见上图,为s = 3的情况,由上一问题可知,GSS中倒数第三幅尺度与下一octave第一幅的尺度相同,由图中红色矩形中的尺度对应为DoG中极值检测的图像,将其各层红色矩形框中的尺度依次排列,即可发现其为以k = 21/s(即k = 21/3)为等比的连续尺度。所以极值检测是在一个连续变化的尺度空间中进行的。如下图:
3.2 高斯核性质及其在SIFT中的应用
对于二维高斯卷积,有如下性质:
- 距离高斯核中心3σ距离外的系数很小,相对于3σ内的系数值可以忽略不计,所以只用(6σ + 1)*(6σ + 1)的面积计算卷积即可。
- 线性可分,二维高斯核卷积(计算次数O(n2*M*N))效果等于水平和竖直方向的两个一维高斯核(计算次数O(n*M*N) + O(n*M*N)))累积处理的效果。n*n为滤波器大小,M*N图像大小
对一幅图像进行多次连续高斯模糊的效果与一次更大的高斯模糊可以产生同样的效果,大的高斯模糊的半径是所用多个高斯模糊半径平方和的平方根。例如,使用半径分别为 6 和 8 的两次高斯模糊变换得到的效果等同于一次半径为 10 (勾股定理)的高斯模糊效果。根据这个关系,使用多个连续较小的高斯模糊处理不会比单个高斯较大处理时间要少。
其中,性质3有助我们更快速的生成GSS。虽然两个小半径处理时间并不会比单个高斯较大半径处理的时间少,但相对于原图像,我们已经有一个小半径模糊过的图像,即可用另一小半径在现成的图像上进行模糊得到较大半径的模糊效果。例如尺度为σ0的图像已经存在,我们要得到尺度为kσ0的图像,即可只使用尺度为[(kσ0)2-(σ0)2]1/2的核在尺度为σ0的图像上进行模糊,即可得到尺度为kσ0模糊的图像,同理可得到高斯尺度空间各层的图像,使得高斯尺度空间生产得更快。
参考资料:
- David G. Lowe Distinctive Image Features from Scale-Invariant Keypoints
- 王永明 王贵锦 《图像局部不变性特征与描述》
- 高斯模糊 http://zh.wikipedia.org/wiki/%E9%AB%98%E6%96%AF%E6%A8%A1%E7%B3%8A
SIFT算法:DoG尺度空间生产的更多相关文章
- SIFT算法:特征描述子
SIFT算法:DoG尺度空间生产 SIFT算法:KeyPoint找寻.定位与优化 SIFT算法:确定特征点方向 SIFT算法:特征描述子 目录: 1.确定描述子采样区域 2.生成描述子 2.1 旋 ...
- SIFT算法:确定特征点方向
SIFT算法:DoG尺度空间生产 SIFT算法:KeyPoint找寻.定位与优化 SIFT算法:确定特征点方向 SIFT算法:特征描述子 目录: 1.计算邻域梯度方向和幅值 2.计算梯度方向直方图 ...
- SIFT算法:KeyPoint找寻、定位与优化
SIFT算法:DoG尺度空间生产 SIFT算法:KeyPoint找寻.定位与优化 SIFT算法:确定特征点方向 SIFT算法:特征描述子 目录: 1.找寻 2.定位 3.优化 1 KeyPoint ...
- SIFT算法总结:用于图像搜索
原始文章链接:http://bubblexc.com/y2011/163/ 原文链接:http://blog.csdn.net/cserchen/article/details/5606859 关于三 ...
- 【OpenCV】SIFT原理与源码分析:DoG尺度空间构造
原文地址:http://blog.csdn.net/xiaowei_cqu/article/details/8067881 尺度空间理论 自然界中的物体随着观测尺度不同有不同的表现形态.例如我们形 ...
- SIFT算法中DoG特征点的修正
SIFT算法中,在DoG空间找到极值点后,需要对极值点进行修正,本文主要详细的讲解一下为什么需要修正,以及如何对极值点进行修正. 下图演示了二维函数离散空间得到的极值点与连续空间的极值点之间的差别 利 ...
- SIFT算法详解(转)
http://blog.csdn.net/zddblog/article/details/7521424 目录(?)[-] 尺度不变特征变换匹配算法详解 Scale Invariant Feature ...
- 【转】 SIFT算法详解
尺度不变特征变换匹配算法详解Scale Invariant Feature Transform(SIFT)Just For Fun zdd zddmail@gmail.com 对于初学者,从Davi ...
- sift算法c语言实现
前段时间在做三维測量方面的研究.须要得到物体表面三维数据.sift算法是立体匹配中的经典算法.以下是对RobHess的SIFT源码的凝视.部分内容參考网上,在这里向各位大神表示感谢. http://b ...
随机推荐
- PHP中的魔术方法总结
1.__get.__set这两个方法是为在类和他们的父类中没有声明的属性而设计的__get( $property ) 当调用一个未定义的属性时访问此方法__set( $property, $value ...
- Ext.Net学习笔记10:Ext.Net ComboBox用法
ComboBox是最常用的控件之一,它与HTML中的Select控件很像,但可以进行多选.自定义显示格式.分页等. ComboBox用法 <ext:ComboBox runat="se ...
- xpath选择器
一.xpath中节点关系 父(Parent):每个元素以及属性都有一个父 子(Children):元素节点可有零个.一个或多个子 同胞(Sibling):拥有相同的父的节点 先辈(Ancestor): ...
- xcode编译运行报错纪录(持续更新)
---恢复内容开始--- 1. Undefined symbols for architecture i386: "_deflate", referenced from: -[NS ...
- 鼠标操作[OpenCV 笔记10]
) winname 窗口名字 onMouse 指定窗口每次鼠标事件发生的时候,被调用的函数指针.函数的原型应为void Foo(int event, int x, int y, int flags, ...
- (poj) 1751 Highways
Description The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has a very poor ...
- ASP.NET中的特殊路径标识"~"
/ 表示网站根目录(从域名开始), ../ 表示上级目录, ./表示当前目录- 是ASP.NET定义的特殊符号,是ASP.NET内部进行定义推荐的用法,-代表从应用根目录开始定义应用根目录与网站根目录 ...
- ubuntu logout 命令
gnome-session-quit 点击打开链接http://askubuntu.com/questions/15795/how-can-you-log-out-via-the-terminal
- android程序的安装与卸载
Android android在安装应用程序与卸载应用程序时都会发送广播,安装应用程序成功时会发送android.intent.action.PACKAGE_ADDED广播,可以通过intent.ge ...
- Json 数组排序
/*********************************************Json 数组排序 ******************************************** ...