本文已参与「新人创作礼」活动,一起开启掘金创作之路。 ——————————————————————————————————————————
摘要
SIFT算法作为一种计算机视觉算法,通过检测图像中的局部特征并形成描绘子,可以用于目标检测和图像配准,但其极值点检测背后的机理一直少有人关注,本文通过研究拉普拉斯算子的性质、斑点检测原理并结合Matlab仿真,验证了SIFT算法中极值点的检测实际上就是利用拉普拉斯算子在图像的各个尺度上寻找最像斑点的区域,并分析了非斑点区域的检测。
1 引言
SIFF(尺度不变特征变换,Scale-Invariant Feature Transform)是在计算机视觉领域中检测和描述图像中局部特征的算法,其由David Lowe于1999年提出,并于2004年进行了后续的完善。该算法应用场景丰富,如目标检测、图像拼接、视频跟踪等。
SIFT算法所检测到的是图像中局部特征,并且该特征具有旋转不变性和尺度不变性,对噪声、光照变化、视角变化均具有不错的鲁棒性。SIFT特征还具有很强的可区分性,易于提取和识别,因此鲁棒性和可区分性是SIFT算法最主要的特征。
本文针对SIFT第一个阶段:尺度空间极值检测进行分析,探究极值点的形成机理。
2 尺度空间极值
首先我们需要明确的一点是,极值点是分布在高斯差分金字塔中的每一层上的,Lowe在其论文中阐述了利用高斯金字塔做差分来产生候选极值点平面的高效性。
2.1 拉普拉斯算子
在图像处理中进行边缘检测时,多采用Roberts算子、Sobel算子、Prewitt算子等,其基本思想都是在离散空间中计算像素的梯度,将原图像中的边缘检测问题转化为梯度图像中的求极值点问题。
拉普拉斯算子则稍显不同,其将原图像中的边缘检测问题转化为卷积后图像中的求零点问题。两者的不同如下图所示。
高斯二阶导数(一维拉普拉斯算子)的函数表示为:
由上述公式我们可以得到以下结论:
1、高斯二阶导数(一维拉普拉斯算子)是一个偶函数;
2、其 到 上的定积分为 ,其 到 上的定积分也为 ;
3、可以认为高斯二阶导数(一维拉普拉斯算子)就是一个小波函数。
引人注意的是高斯二阶导数的定义域是 ,但在opencv官方库中,拉普拉斯算子的大小是 的3倍或4倍。
2.2 尺度空间
Koenderink(1984)和Lindeberg(1994)曾提出唯一可能的尺度空间核便是高斯函数,并且提出通过因子进行归一化的拉普拉斯函数才能实现真正的尺度空间[2]。Mikolajcayk(2002)发现相较于别的函数如:梯度、Hessian矩阵、Harris角点函数, 的最大值和最小值能够产生最为稳定的图像特征[3]。后来Lowe(2004)等人为了更加高效地在尺度空间中检测稳定关键点的位置,提出了利用图像与高斯差分函数卷积结果即高斯差分空间中的尺度空间极值点作为稳定的关键点[1]。
一幅图像的尺度空间可以定义为一个函数: ,其通过可变尺度的高斯函数 与输入图像 做卷积来生成:
其中:* 表示对 和 进行卷积操作,并且
通过因子 进行归一化的拉普拉斯函数为:
二维高斯卷积核对 的偏导为:
又二维高斯卷积核对 偏导的离散形式为:
所以有:
因此有:
相较于将图像与不同尺度的拉普拉斯核做卷积得到所需的尺度空间,可以通过将图像与不同尺度高斯核做卷积后再做差分达到同样的效果。
在Lowe的论文中,其利用了高斯金字塔来实现多尺度(伪多尺度,组间存在下采样导致分辨率发生变化),在采取“将图像与不同尺度高斯核做卷积后再做差分”的方法后,取得了较好的效果。
2.3 斑点检测
斑点检测就是利用二维拉普拉斯算子检测图像中的斑点,在这里我们用一维拉普拉斯算子检测一维信号中的方波来演示其原理,结果如下图所示。
由上述实验结果我们可以得到以下结论:
1、任意的 一维拉普拉斯算子,卷积结果总会在原点处取得极大值,这个极大值表明方波的中心;
2、随着 的增大,极大值先增大后减小,这个最大的极大值表明方波的 ;
3、一维信号下,当 时,得到最大的极大值。
现在思考黑色背景上存在一个白色斑点,我们用拉普拉斯算子去进行检测其位置和大小(wsith),这不就是SIFT中极值点的检测吗?其实质不就是在图像的各个尺度上寻找最像斑点的区域。同时,这也解释了为什么相较于梯度、Hessian矩阵、Harris角点函数, 的最大值和最小值能够产生最为稳定的图像特征,因为其是基于局部区域产生关键点,而前者是基于边缘产生关键点。
二维拉普拉斯函数为:
因此在斑点检测中(二维信号下),当半径 时,我们得到最大的极大值。需要注意的是,此时斑点的中心与二维拉普拉斯算子的中心重合,如此斑点的区域刚好对应使得二维拉普拉斯算子小于零的区域,斑点外的区域对应使得二维拉普拉斯算子大于零的区域。如果图像中仅有一个斑点,那么毫无疑问当且仅当二维拉普拉斯算子的中心与斑点的中心重合且 时,我们才能取得最大的极大值,也就找到了SIFT中的极大值点。二维拉普拉斯算子的示意图如下图所示。
值得注意的是,我们在这里是用不同尺度(不同 )的拉普拉斯算子去检测同一个斑点,这与Lowe论文中的思路有所不同,其通过构建高斯差分金字塔实现了多尺度,之后在各个尺度上分别检测其对应尺度的斑点,最后再进行非极大值抑制(层内、层间)。
通过实验证明,不进行层间比较时,特征点数量明显增多,但最后成功匹配的对数却减少了。经过分析,问题出在SIFT算法最后的匹配机制中,不进行层间比较时,使得原本差异较大的最近邻和次近邻反而变得很相似,导致其被当作不正确的匹配进行剔除,实验结果见下表。
标题 | 关键点数 | 特征点数 | 匹配对数目 |
---|---|---|---|
有层间比较 | 2033 | 2486 | 265 |
无层间比较 | 5620 | 6742 | 99 |
2.4 非斑点区域的检测
对于一幅从自然场景中获取的图像,其内容十分丰富且复杂,因此在进行极值点检测时,往往是非斑点区域。为了便于分析,本文采用了圆形、正方形、正六边形和其他形状(类似于跑道操场)斑点进行实验,观察极值点的分布情况。
1、对于圆形斑点,SIFT算法准确地找到了极值点的位置,并表明了其尺度的不同。
2、对于正方形和正六边形斑点,SIFT算法也准确地找到了极值点的位置,但是在各个角点附近也出现了极值点。
3、对于其他形状(类似于跑道操场)斑点,SIFT算法可以找到极值点的位置,存在两个极值点且呈对称分布,但也存在某个尺度的极值点未被检测到。
SIFT算法检测结果如下图所示
对于正方形和正六边形斑点检测中,角点处出现极值点;其他形状(类似于跑道操场)斑点检测中,存在两个极值点且呈对称分布。通过生成典型区域图像与拉普拉斯算子卷积结果的3D图可以了解这些特殊极值点产生的原因,具体见下图。
3 总结
本文通过研究拉普拉斯算子的性质、斑点检测原理并结合Matlab仿真,验证了SIFT算法中极值点的检测实际上就是利用拉普拉斯算子在图像的各个尺度上寻找最像斑点的区域,并分析了非斑点区域的检测中的各种细节问题,丰富了斑点检测的内涵。
参考文献
- Lowe, David G.. "Distinctive Image Features from Scale-Invariant Keypoints." International Journal of Computer Vision 60 (2004): 91-110.
- Lindeberg, Tony. "Scale-Space Theory: A Basic Tool for Analysing Structures at Different Scales." 21 (1994): 225-270.
- mikolajczyk, krystian. "Detection of local features invariant to affines transformations." (2002)