特征提取与匹配算法的前世与今生专题1

1、资源搜集

【计算机视觉】2. 特征点检测:Harris, SIFT, SURF, ORB

传统计算机视觉中图像特征匹配方法的原理介绍(SIFT 和 ORB)

模式识别之特征提取算法

图像配准:从SIFT到深度学习

2、本人总结

        还是老规矩,我们先讨论为什么会出现特征提取与匹配算法。我们还是举一个每天发生在我们周围的例子,随着今年来图像、视频数据呈现爆炸式增长,我们应该如何对进行分类以及实现快速检索呢。我们难道要使用人眼一个一个比较,哪个视频或者图像属于一类然后把它们放在一起。估计那样的话人都要累坏,全球几十亿的人保守说也要有一个亿的人在上传视频啊,而我们要检索我们想要的,就要从这些里面检索。既然不是人为检索,那就需要计算机来实现。计算机则就需要认识或者了解每个视频或者图像的特征,所以这就需要计算机能够像人一样提取出视频和图像的特征信息并且能够进行匹配。上面只是一种需求,还有我们追踪目标,则就需要提取特征并时刻对前后的特征进行匹配等等。

         特征提取和匹配算法到发展到现在,主要有一下几个重要算法:Harris、SIFT、SURF、ORB、深度学习;今天我们主要介绍一下SIFT算法,后面所有的算法都会讲解。

2.1 基本概念

      SIFT算子是一种检测局部特征的算法,该算法通过求一幅图像中的特征点及其相关尺寸和方向的描述子得到特征并进行图像特征点匹配。每个特征点的SIFT特征是128维向量,因此计算量很大。

2.2 算法描述

      SIFT具备尺度、亮度、旋转、平移不变特性。整个算法主要包括:尺度空间生成、检测尺度空间极值点、精确定位极值点、为每个关键点指定方向参数,关键点描述

(1)尺度空间生成

扫描二维码关注公众号,回复: 8866467 查看本文章

        该步骤目的是为了模拟图像数据的多尺度特征,因为我们要实现抗尺度特性,就需要在一张图像上模拟出物体远近的情况,然后在进行后面的处理算法。要实现该步骤,需要引入高斯卷积核,这是唯一线性核,因此一幅图像二维空间可以定义为:

L(x, y, \sigma ) = G(x, y, \sigma)*I(x, y),其中G(x, y, \sigma) = \frac{1}{2\pi \sigma ^{2}}e^{-(x^{2} + y^{2})/2\sigma ^{2}}为尺度可变高斯函数,(x,y)是空间坐标又称尺度坐标。\sigma大小决定图像的平滑程度,大尺度对应图像的概貌(图像中的低分辨率),小尺度对应图像的轮廓(图像中的高分辨率)。为了可以在尺度空间中检测到关键点,作者提出了高斯差分空间DOG(scale-space),同层图像中,不同平滑度图像相减:D(x, y, \sigma ) = [G(x, y, k\sigma) - G(x, y, k\sigma)] * I(x, y) = L(x, y, k\sigma) - L(x, y, \sigma)

       下面我们来看一下不同\sigma情况下的尺度图像:

                

        因此尺度空间要求是连续的,所以上图中的2是必须要加的;在Lowe论文中,第0层的初始尺度\sigma = 1.6,图像的初始尺度定为0.5。这样会导致在检测极值点前对原始图像的高斯平滑丢失数据,因此需要提前将图像扩大为原来的一倍,保留原始图像信息,增加特征点。

                                              

       上图对应的方程为2^{i - 1}(\sigma , k * \sigma, k^{2} * \sigma, ... ,k^{n} * \sigma), k = \frac{1}{s},其中i代表塔的个数,s代表没个塔的层数。上面其实就是属于同一个塔里面高斯卷积后的图像,进行上下相减得到高斯差分图DOG

       图像的大小决定建塔的个数,每个塔的层数舒(s一般为3~5)。其中,第0塔的第0层对应的图像为原始图像。后面就像上面说的,下面每层对下一层进行高斯卷积操作。每个塔之间进行的降采样处理,从上面图像我们可以看到first octave到next octave图像的分辨率减半。

       注:多图像金字塔或者拉普拉斯金字塔不理解的,可以查看此链接

(2)检测尺度空间极值点

         上面已经介绍了从一张图像多尺度的实现方式,以及为了更好的提出特征,将原始图像转化为DOG图。既然适合提取特征的图像已经生成,那么我们该如何找寻里面的明显特征呢?还是选上作者的提出的解决方案:

                                                                    

        在图像我们可以看到一个黑色叉,该位置与同层的相邻8个点以及上下两层18个点进行比较,总共相当于26个点进行比较,来确保尺度空间和二维图像空间都检测到极值点。如果该点在DOG空间中的26点是最大值或者最小值时,则认为该点是图像在该尺度下的一个特征点。

         但是如果按照上面描述的那样,当前层与上下层进行极值点确定,那么在首尾两层会出现无法确定极值点情况,如下图:

                                             

      为了满足尺度空间的连续性,我们在每一组图像的顶层继续使用高斯模糊生成3幅图像,这样高斯金字塔图像未s+3层,DOG金字塔每组含有s+2层。

      那么问题来了,什么是尺度空间的连续性,为什么只增加3幅图像呢?

      我们可以举例说明一下,假设s为3,即每个塔有3个层,则k = 2^{\frac{1}{s}} = 2^{\frac{1}{3}},经过高斯卷积后我们可以得到3个高斯金字塔,2个DOG金字塔,这种情况下我们是没有办法进行极值点检测的。如果这时候我们继续添加3个高斯模糊,最后得到\sigma , k * \sigma, k^{2} * \sigma, k^{3} * \sigma, k^{4} * \sigma,其中DOG金字塔对应k * \sigma, k^{2} * \sigma, k^{3} * \sigma。根据上面公式,可得下一塔对应的尺度2k * \sigma, 2k^{2} * \sigma, 2k^{3} * \sigma。我们知道k^{3} * \sigma = 2^{\frac{3}{3}} * \sigma,2k * \sigma = 2^{\frac{4}{3}} * \sigma,下一塔首项刚好与上一塔的末项连续起来。这也就解开了我们上面的疑问。

(3)精确定位极值点

(4)为每个关键点指定方向参数

(5)关键点描述

发布了149 篇原创文章 · 获赞 22 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/CSS360/article/details/102631382