深度学习----SIFT特征(详解)

1.SIFT概述

                SIFT的全称是Scale Invariant Feature Transform,尺度不变特征变换,由加拿大教授David G.Lowe提出的。SIFT特征对旋转、尺度缩放、亮度变化等保持不变性,是一种非常稳定的局部特征

1.1 SIFT算法具的特点

                图像的局部特征,对旋转、尺度缩放、亮度变化保持不变,对视角变化、仿射变换、噪声也保持一定程度的稳定性。
                独特性好,信息量丰富,适用于海量特征库进行快速、准确的匹配。
                多量性,即使是很少几个物体也可以产生大量的SIFT特征
                高速性,经优化的SIFT匹配算法甚至可以达到实时性
                扩招性,可以很方便的与其他的特征向量进行联合。

1.2 SIFT特征检测的步骤

有4个主要步骤

                (1)、尺度空间的极值检测 搜索所有尺度空间上的图像,通过高斯微分函数来识别潜在的对尺度和选择不变的兴趣点。

                (2)、特征点定位 在每个候选的位置上,通过一个拟合精细模型来确定位置尺度,关键点的选取依据他们的稳定程度。

                (3)、特征方向赋值 基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向,后续的所有操作都是对于关键点的方向、尺度和位置进行变换,从而提供这些特征的不变性。

                (4)、特征点描述 在每个特征点周围的邻域内,在选定的尺度上测量图像的局部梯度,这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变换。

2. 尺度空间

                在一定的范围内,无论物体是大还是小,人眼都可以分辨出来。然而计算机要有相同的能力却不是那么的容易,在未知的场景中,计算机视觉并不能提供物体的尺度大小,其中的一种方法是把物体不同尺度下的图像都提供给机器,让机器能够对物体在不同的尺度下有一个统一的认知。在建立统一认知的过程中,要考虑的就是在图像在不同的尺度下都存在的特征点。

2.1 多分辨率图像金字塔

                在早期图像的多尺度通常使用图像金字塔表示形式。图像金字塔是同一图像在不同的分辨率下得到的一组结果,其生成过程一般包括两个步骤:

对原始图像进行平滑
                对处理后的图像进行降采样(通常是水平、垂直方向的1/2)
                降采样后得到一系列不断尺寸缩小的图像。显然,一个传统的金字塔中,每一层的图像是其上一层图像长、高的各一半。多分辨率的图像金字塔虽然生成简单,但其本质是降采样,图像的局部特征则难以保持,也就是无法保持特征的尺度不变性。

2.2 高斯尺度空间

                1、我们还可以通过图像的模糊程度来模拟人在距离物体由远到近时物体在视网膜上成像过程,距离物体越近其尺寸越大图像也越模糊,这就是高斯尺度空间,使用不同的参数模糊图像(分辨率不变),是尺度空间的另一种表现形式。
                2、我们知道图像和高斯函数进行卷积运算能够对图像进行模糊,使用不同的“高斯核”可得到不同模糊程度的图像。一副图像其高斯尺度空间可由其和不同的高斯卷积得到:

L ( x , y , σ ) = G ( x , y , σ ) I ( x , y )

其中,G(x,y,σ)是高斯核函数。G(x,y,σ)是高斯核函数。

G ( x , y , σ ) = 1 2 π σ 2 e x 2 + y 2 2 σ 2

              σ 称为尺度空间因子,它是高斯正态分布的标准差,反映了图像被模糊的程度,其值越大图像越模糊,对应的尺度也就越大。 L ( x , y , σ ) 代表着图像的高斯尺度空间。
              构建尺度空间的目的是为了检测出在不同的尺度下都存在的特征点,而检测特征点较好的算子是 Δ 2 G (高斯拉普拉斯,LoG),

2 = 2 x 2 + 2 y 2

                  使用LoG虽然能较好的检测到图像中的特征点,但是其运算量过大,通常可使用DoG(差分高斯,Difference of Gaussina)来近似计算LoG[Marr and Hidreth]。
设kk为相邻两个高斯尺度空间的比例因子,则DoG的定义:

D ( x , y , σ ) = [ G ( x , y , k σ ) G ( x , y , σ ) ] I ( x , y )                                                                         = L ( x , y , k σ ) L ( x , y , σ )

其中,L(x,y,σ)L(x,y,σ)是图像的高斯尺度空间。

                从上式可以知道,将相邻的两个高斯空间的图像相减就得到了DoG的响应图像。为了得到DoG图像,先要构建高斯尺度空间,而高斯的尺度空间可以在图像金字塔降采样的基础上加上高斯滤波得到,也就是对图像金字塔的每层图像使用不同的参数σσ进行高斯模糊,使每层金字塔有多张高斯模糊过的图像。降采样时,金字塔上边一组图像的第一张是由其下面一组图像倒数第三张降采样得到。

                易知,高斯金字塔有多组,每组又有多层。一组中的多个层之间的尺度是不一样的(也就是使用的高斯参数σσ是不同的),相邻两层之间的尺度相差一个比例因子kk。如果每组有SS层,则k=21Sk=21S。上一组图像的最底层图像是由下一组中尺度为2σ2σ的图像进行因子为2的降采样得到的(高斯金字塔先从底层建立)。高斯金字塔构建完成后,将相邻的高斯金字塔相减就得到了DoG金字塔。

高斯金字塔的组数一般是

o = [ l o g 2 m i n ( m , n ) ] a

                o 表示高斯金字塔的层数,m,n分别是图像的行和列。减去的系数aa可以在0−log2min(m,n)之间的任意值,和具体需要的金字塔的顶层图像的大小有关。
高斯模糊参数σσ(尺度空间),可由下面关系式得到

σ ( o , s ) = σ 0 2 o + s S

其中 o 为所在的组, s 为所在的层, σ 0 为初始的尺度, S 为每组的层数。
在Lowe的算法实现中σ0=1.6,omin=−1,S=3σ0=1.6,omin=−1,S=3,omin=−1omin=−1就是首先将原图像的长和宽各扩展一倍。
从上面可以得知同一组内相邻层的图像尺度关系

σ s + 1 = k σ s = 2 1 S σ s

相邻组之间的尺度关系
σ o + 1 = 2 σ o

2.3 高斯金字塔构建示例

以一个512×512512×512的图像I为例,构建高斯金字塔步骤:(从0开始计数,倒立的金字塔)
              3、金字塔的组数, l o g 2 512 = 9 ,减去因子3,构建的金字塔的组数为6。取每组的层数为3。
              4、构建第0组,将图像的宽和高都增加一倍,变成1024×10241024×1024( I 0 )。
                                            第0层 I 0 G ( x , y , σ 0 )
                                            第1层 I 0 G ( x , y , k σ 0 )
                                            第2层 I 0 G ( x , y , k 2 σ 0 )
              5、构建第1组,对 I 0 降采样变成512×512512×512( I 1 )。
                                            第0层 I 0 G ( x , y , 2 σ 0 )
                                            第1层 I 0 G ( x , y , 2 k σ 0 )
                                            第2层 I 0 G ( x , y , 2 k 2 σ 0 )
              6、⋮⋮
              7、构建第o组,第s层 Io∗G(x,y,2oksσ0)Io∗G(x,y,2oksσ_0)

高斯金字塔构建成功后,将每一组相邻的两层相减就可以得到DoG金字塔.

3. DoG空间极值检测

                为了寻找尺度空间的极值点,每个像素点要和其图像域(同一尺度空间)和尺度域(相邻的尺度空间)的所有相邻点进行比较,当其大于(或者小于)所有相邻点时,改点就是极值点。如图所示,中间的检测点要和其所在图像的3×33×3邻域8个像素点,以及其相邻的上下两层的3×33×3领域18个像素点,共26个像素点进行比较。
从上面的描述中可以知道,每组图像的第一层和最后一层是无法进行比较取得极值的。为了满足尺度变换的连续性,在每一组图像的顶层继续使用高斯模糊生成3幅图像,高斯金字塔每组有 S + 3 S + 3 层图像,DoG金字塔的每组有 S + 2 S + 2 组图像。
                                              这里写图片描述

3.1 尺度变化的连续性

这里写图片描述

这里写图片描述

4. 删除不好的极值点(特征点)

              通过比较检测得到的DoG的局部极值点实在离散的空间搜索得到的,由于离散空间是对连续空间采样得到的结果,因此在离散空间找到的极值点不一定是真正意义上的极值点,因此要设法将不满足条件的点剔除掉。可以通过尺度空间DoG函数进行曲线拟合寻找极值点,这一步的本质是去掉DoG局部曲率非常不对称的点。
要剔除掉的不符合要求的点主要有两种:

                        低对比度的特征点
                        不稳定的边缘响应点

4.1 剔除低对比度的特征点

                候选特征点x,其偏移量定义为ΔxΔx,其对比度为D(x)D(x)的绝对值∣D(x)∣∣D(x)∣,对D(x)D(x)应用泰勒展开式
                                            这里写图片描述

由于x是D(x)的极值点,所以对上式求导并令其为0,得到

                                            这里写图片描述

然后再把求得的ΔxΔx代入到D(x)的泰勒展开式中
                                            这里写图片描述
设对比度的阈值为T,若 D ( x ^ ) ∣≥ T ,则该特征点保留,否则剔除掉。

4.2 剔除不稳定的边缘响应点

这里写图片描述
这里写图片描述

5. 求取特征点的主方向

这里写图片描述

6. 生成特征描述

通过以上的步骤已经找到了SIFT特征点位置、尺度和方向信息,下面就需要使用一组向量来描述关键点也就是生成特征点描述子,这个描述符不只包含特征点,也含有特征点周围对其有贡献的像素点。描述子应具有较高的独立性,以保证匹配率。
特征描述符的生成大致有三个步骤:

                1、校正旋转主方向,确保旋转不变性。
                2、生成描述子,最终形成一个128维的特征向量
                3、归一化处理,将特征向量长度进行归一化处理,进一步去除光照的影响。
为了保证特征矢量的旋转不变性,要以特征点为中心,在附近邻域内将坐标轴旋转θθ(特征点的主方向)角度,即将坐标轴旋转为特征点的主方向。旋转后邻域内像素的新坐标为:
                                                                这里写图片描述

                旋转后以主方向为中心取 8×8的窗口。下图所示,左图的中央为当前关键点的位置,每个小格代表为关键点邻域所在尺度空间的一个像素,求取每个像素的梯度幅值与梯度方向,箭头方向代表该像素的梯度方向,长度代表梯度幅值,然后利用高斯窗口对其进行加权运算。最后在每个4×4的小块上绘制8个方向的梯度直方图,计算每个梯度方向的累加值,即可形成一个种子点,如右图所示。每个特征点由4个种子点组成,每个种子点有8个方向的向量信息。这种邻域方向性信息联合增强了算法的抗噪声能力,同时对于含有定位误差的特征匹配也提供了比较理性的容错性。

这里写图片描述

              与求主方向不同,此时每个种子区域的梯度直方图在0-360之间划分为8个方向区间,每个区间为45度,即每个种子点有8个方向的梯度强度信息。
在实际的计算过程中,为了增强匹配的稳健性,Lowe建议
              对每个关键点使用4×4共16个种子点来描述,这样一个关键点就可以产生128维的SIFT特征向量。

这里写图片描述

通过对特征点周围的像素进行分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。

7. 总结

              SIFT特征以其对旋转、尺度缩放、亮度等保持不变性,是一种非常稳定的局部特征,在图像处理和计算机视觉领域有着很重要的作用,其本身也是非常复杂的,下面对其计算过程做一个粗略总结。

              1、DoG尺度空间的极值检测。 首先是构造DoG尺度空间,在SIFT中使用不同参数的高斯模糊来表示不同的尺度空间。而构造尺度空间是为了检测在不同尺度下都存在的特征点,特征点的检测比较常用的方法是 Δ 2 G (高斯拉普拉斯LoG),但是LoG的运算量是比较大的,Marr和Hidreth曾指出,可以使用DoG(差分高斯)来近似计算LoG,所以在DoG的尺度空间下检测极值点。
              2、删除不稳定的极值点。主要删除两类:低对比度的极值点以及不稳定的边缘响应点。
              3、确定特征点的主方向。以特征点的为中心、 3 × 1.5 σ 为半径的领域内计算各个像素点的梯度的幅角和幅值,然后使用直方图对梯度的幅角进行统计。直方图的横轴是梯度的方向,纵轴为梯度方向对应梯度幅值的累加值,直方图中最高峰所对应的方向即为特征点的方向。
              4、生成特征点的描述子。 首先将坐标轴旋转为特征点的方向,以特征点为中心的16×16的窗口的像素的梯度幅值和方向,将窗口内的像素分成16块,每块是其像素内8个方向的直方图统计,共可形成128维的特征向量。


转:SIFT特征详解 https://www.cnblogs.com/wangguchangqing/p/4853263.html#autoid-3-1-0

猜你喜欢

转载自blog.csdn.net/Sakura55/article/details/81506151