图像特征— —SIFT特征

概念

尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种计算机视觉算法,用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。

其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。

局部影像特征的描述与侦测可以帮助辨识物体,SIFT 特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、些微视角改变的容忍度也相当高。基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用 SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位。在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算。SIFT特征的信息量大,适合在海量数据库中快速准确匹配。

SIFT算法的特点:

  1. SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性;

  2. 独特性(Distinctiveness)好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配;

  3. 多量性,即使少数的几个物体也可以产生大量的SIFT特征向量;

  4. 高速性,经优化的SIFT匹配算法甚至可以达到实时的要求;

  5. 可扩展性,可以很方便的与其他形式的特征向量进行联合。

SIFT算法可以解决的问题:

目标的自身状态、场景所处的环境和成像器材的成像特性等因素影响图像配准/目标识别跟踪的性能。而SIFT算法在一定程度上可解决:

  1. 目标的旋转、缩放、平移(RST)

  2. 图像仿射/投影变换(视点viewpoint)

  3. 光照影响(illumination)

  4. 目标遮挡(occlusion)

  5. 杂物场景(clutter)

  6. 噪声

SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。

Lowe将SIFT算法分解为如下五步:

  1. 尺度空间构建

  2. 尺度空间极值点检测

  3. 特征点精确定位

  4. 方向确定

  5. 特征点描述

1.尺度空间构建

SIFT算法是在不同的尺度空间上查找关键点,尺度空间的获取有多种方法,但是高斯核是实现尺度变换的唯一线性核。

尺度空间理论的基本思想是:在图像信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得多尺度下的尺度空间表示序列,对这些序列进行尺度空间主轮廓的提取,并以该主轮廓作为一种特征向量,实现边缘、角点检测和不同分辨率上的特征提取等。

尺度空间方法将传统的单尺度图像信息处理技术纳入尺度不断变化的动态分析框架中,更容易获取图像的本质特征。尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程。

尺度空间满足视觉不变性。

尺度空间的表示

一个图像的尺度空间,L(x, y, σ) 定义为一个变化尺度的高斯函数G(x, y, σ) 与原图像I(x, y)的卷积。

这里写图片描述

其中,*表示卷积运算,

(3-2)

m,n表示高斯模板的维度。(x, y)代表图像的像素位置。σ是尺度空间因子,值越小表示图像被平滑的越少,相应的尺度也就越小。大尺度对应于图像的概貌特征,小尺度对应于图像的细节特征。

高斯差分金字塔

尺度规范化的LoG(Laplacion of Gaussian)算子具有真正的尺度不变性,目前使用高斯差分金字塔近似LoG算子,在尺度空间检测稳定的关键点。

在实际计算时,使用高斯金字塔每组中相邻上下两层图像相减,得到高斯差分图像,如下图所示,进行极值检测。

图像特征— —SIFT特征_第1张图片

在最开始建立高斯金字塔时,要预先模糊输入图像来作为第0个组的第0层的图像,这时相当于丢弃了最高的空域的采样率。因此通常的做法是先将图像的尺度扩大一倍来生成第-1组。下图为DOG构建金字塔示意图,原图采用128*128的jobs图像,扩大一倍后构建金字塔。

图像特征— —SIFT特征_第2张图片

2.极值点检测

关键点是由DOG空间的局部极值点组成的,关键点的初步探查是通过同一组内各DoG相邻两层图像之间比较完成的。为了寻找DoG函数的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。如下图所示,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。

图像特征— —SIFT特征_第3张图片

由于要在相邻尺度进行比较,只能在中间几层进行极值点检测。为了在每组中检测S个尺度的极值点,则DOG金字塔每组需S+2层图像,而DOG金字塔由高斯金字塔相邻两层相减得到,则高斯金字塔每组需S+3层图像,实际计算时S在3到5之间。

图像特征— —SIFT特征_第4张图片

3.特征点精确定位

以上方法检测到的极值点是离散空间的极值点,以下通过拟合三维二次函数来精确确定关键点的位置和尺度,同时去除低对比度的关键点和不稳定的边缘响应点(因为DoG算子会产生较强的边缘响应),以增强匹配稳定性、提高抗噪声能力。

关键点的精确定位

离散空间的极值点并不是真正的极值点,下图显示了二维函数离散空间得到的极值点与连续空间极值点的差别。利用已知的离散空间点插值得到的连续空间极值点的方法叫做子像素插值(Sub-pixel Interpolation)。

图像特征— —SIFT特征_第5张图片

为了提高关键点的稳定性,需要对尺度空间DoG函数进行曲线拟合。利用DoG函数在尺度空间的Taylor展开式(拟合函数)为:

这里写图片描述

其中这里写图片描述。求导并让方程等于零,可以得到极值点的偏移量为:

这里写图片描述

对应极值点,方程的值为:

这里写图片描述

其中这里写图片描述,代表相对插值中心的偏移量,当它在任一维度上的偏移量大于0.5时(即x或y或),意味着插值中心已经偏移到它的邻近点上,所以必须改变当前关键点的位置。同时在新的位置上反复插值直到收敛;也有可能超出所设定的迭代次数或者超出图像边界的范围,此时这样的点应该删除,原文用了5次迭代。另外,|D(x)|过小的点易受噪声的干扰而变得不稳定,所以将小于某个经验值(0.03或0.04/S)的极值点删除。同时,在此过程中获取特征点的精确位置以及尺度。

消除边缘响应

一个定义不好的高斯差分算子的极值在横跨边缘的地方有较大的主曲率,而在垂直边缘的方向有较小的主曲率。

DOG算子会产生较强的边缘响应,需要剔除不稳定的边缘响应点。获取特征点处的Hessian矩阵,主曲率通过一个2x2 的Hessian矩阵H求出:

这里写图片描述

H的特征值α和β代表x和y方向的梯度,

这里写图片描述

表示矩阵H对角线元素之和,表示矩阵H的行列式。假设是α较大的特征值,而是β较小的特征值,令α=rβ ,则

这里写图片描述

D的主曲率和H的特征值成正比,令为α最大特征值,β为最小的特征值,则公式的值在两个特征值相等时最小,随着的增大而增大。值越大,说明两个特征值的比值越大,即在某一个方向的梯度值越大,而在另一个方向的梯度值越小,而边缘恰恰就是这种情况。所以为了剔除边缘响应点,需要让该比值小于一定的阈值,因此,为了检测主曲率是否在某域值r下,只需检测

这里写图片描述

上式成立时将关键点保留,反之剔除。

下图为r取10,消除边缘响应后的关键点分布图。

图像特征— —SIFT特征_第6张图片

4.方向确定

为了使描述符具有旋转不变性,需要利用图像的局部特征为给每一个关键点分配一个基准方向。使用图像梯度的方法求取局部结构的稳定方向。对于在DOG金字塔中检测出的关键点,采集其所在高斯金字塔图像3σ邻域窗口内像素的梯度和方向分布特征。梯度的模值和方向如下:

这里写图片描述

L为关键点所在的尺度空间值,梯度的模值m(x,y)按这里写图片描述的高斯分布加成,按尺度采样的3σ原则,邻域窗口半径为这里写图片描述

在完成关键点的梯度计算后,使用直方图统计邻域内像素的梯度和方向。梯度直方图的范围是0~360度,其中每45度一个柱,总共8个柱, 或者每10度一个柱,总共36个柱。如下图所示,直方图的峰值方向代表了关键点的主方向,(为简化,图中只画了八个方向的直方图)。

图像特征— —SIFT特征_第7张图片

方向直方图的峰值则代表了该特征点处邻域梯度的方向,以直方图中最大值作为该关键点的主方向。为了增强匹配的鲁棒性,只保留峰值大于主方向峰值80%的方向作为该关键点的辅方向。因此,对于同一梯度值的多个峰值的关键点位置,在相同位置和尺度将会有多个关键点被创建但方向不同。仅有15%的关键点被赋予多个方向,但可以明显的提高关键点匹配的稳定性。实际编程实现中,就是把该关键点复制成多份关键点,并将方向值分别赋给这些复制后的关键点,并且,离散的梯度方向直方图要进行插值拟合处理,来求得更精确的方向角度值,检测结果如下图所示。

图像特征— —SIFT特征_第8张图片

至此,将检测出的含有位置、尺度和方向的关键点即是该图像的SIFT特征点。

5. 特征点描述

通过以上步骤,对于每一个关键点,拥有三个信息:位置、尺度以及方向。接下来就是为每个关键点建立一个描述符,用一组向量将这个关键点描述出来,使其不随各种变化而改变,比如光照变化、视角变化等等。这个描述子不但包括关键点,也包含关键点周围对其有贡献的像素点,并且描述符应该有较高的独特性,以便于提高特征点正确匹配的概率。

SIFT描述子是关键点邻域高斯图像梯度统计结果的一种表示。通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。

Lowe建议描述子使用在关键点尺度空间内4*4的窗口中计算的8个方向的梯度信息,共4*4*8=128维向量表征。表示步骤如下:

1.确定计算描述子所需的图像区域

特征描述子与特征点所在的尺度有关,因此,对梯度的求取应在特征点对应的高斯图像上进行。将关键点附近的邻域划分为d*d(Lowe建议d=4)个子区域,每个子区域做为一个种子点,每个种子点有8个方向。每个子区域的大小与关键点方向分配时相同,即每个区域有3σ_oct个子像素,为每个子区域分配边长为3σ_oct的矩形区域进行采样。考虑到实际计算时,需要采用双线性插值,所需图像窗口边长为。在考虑到旋转因素(方便下一步将坐标轴旋转到关键点的方向),如下图所示,实际计算所需的图像区域半径为:

这里写图片描述

计算结果四舍五入取整。

图像特征— —SIFT特征_第9张图片

2.将坐标轴旋转为关键点的方向,以确保旋转不变性,如下图所示。

图像特征— —SIFT特征_第10张图片

旋转后邻域内采样点的新坐标为:

这里写图片描述

3.将邻域内的采样点分配到对应的子区域内,将子区域内的梯度值分配到8个方向上,计算其权值。

旋转后的采样点坐标在半径为radius的圆内被分配到d*d的子区域,计算影响子区域的采样点的梯度和方向,分配到8个方向上。

旋转后的采样点落在这里写图片描述子区域的下标为

这里写图片描述

Lowe建议子区域的像素的梯度大小按σ=0.5d的高斯加权计算,即

这里写图片描述
其中a,b为关键点在高斯金字塔图像中的位置坐标。

4.插值计算每个种子点八个方向的梯度。

图像特征— —SIFT特征_第11张图片

如上图所示,采样点在子区域中的下标(图中蓝色窗口内红色点)线性插值,计算其对每个种子点的贡献。如图中的红色点,落在第0行和第1行之间,对这两行都有贡献。对第0行第3列种子点的贡献因子为dr,对第1行第3列的贡献因子为1-dr,同理,对邻近两列的贡献因子为dc和1-dc,对邻近两个方向的贡献因子为do和1-do。则最终累加在每个方向上的梯度大小为:

这里写图片描述

其中k,m,n为0或为1。

5.如上统计的4*4*8=128个梯度信息即为该关键点的特征向量。特征向量形成后,为了去除光照变化的影响,需要对它们进行归一化处理,对于图像灰度值整体漂移,图像各点的梯度是邻域像素相减得到,所以也能去除。得到的描述子向量为H=(h1,h2,…,h128),归一化后的特征向量为L=(l1,l2,…,l128)则

这里写图片描述

6.描述子向量门限。非线性光照,相机饱和度变化对造成某些方向的梯度值过大,而对方向的影响微弱。因此设置门限值(向量归一化后,一般取0.2)截断较大的梯度值。然后,再进行一次归一化处理,提高特征的鉴别性。

7.按特征点的尺度对特征描述向量进行排序。
至此,SIFT特征描述向量生成。

SIFT的缺点

SIFT在图像的不变特征提取方面拥有无与伦比的优势,但并不完美,仍然存在:

  1. 相对来说实时性还不够高。

  2. 有时特征点较少。

  3. 对边缘光滑的目标无法准确提取特征点。

等缺点,如下图所示,对模糊的图像和边缘平滑的图像,检测出的特征点过少,对圆更是无能为力。

图像特征— —SIFT特征_第12张图片

参考

http://blog.csdn.net/abcjennifer/article/details/7639681
http://blog.csdn.net/pi9nc/article/details/23302075

你可能感兴趣的:(图像处理,计算机视觉)