首页
学习
活动
专区
工具
TVP
发布

SIFT算法提取图像特征

SIFT算法提取图像特征

在计算机视觉中,最重要的一个环节就是对图像的处理,而对图像处理一个非常重要的环节是提取点的特征。点特征是能够区别于自身图像中其他像素点的特征,也是一幅图区别于其他图像的特征,同样也是一幅图像与另一幅图像能够进行相似度度量的特征点。正是由于图像点特征能够代表图像的内容,所以在运动目标跟踪、物体识别、图像配准、全景图像的拼接、三维重建等方向中,图像特征点的提取都至关重要,特征点提取的好坏将直接决定目标跟踪、物体识别、图像匹配、图像拼接、三维重建的准确度。而在当前基于深度学习的框架下进行目标跟踪等问题,对图像特征的提取的过程则隐含在神经网络的某些网络层之中,使得图像特征的提取过程变得不那么可见。而对于在样本数据很少、或者特定场景下,基于传统的计算机视觉图像特征提取方法却是简单有效的。因此,本文将简单介绍计算机视觉中一个非常经典的特征提取算法——SIFT(Scale-invariant feature transform,尺度不变特征转换)算法。

SIFT算法是一种计算机视觉算法,用来检测和描述图像局部特征,在间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由David Lowe在1999年所发表,2004年完善总结(Distinctive Image Features from Scale-Invariant Keypoints,Lowe D G 2004)。后续的论文中也有许多基于SIFT改进的论文,例如SURF将SIFT的许多过程近似,达到加速的效果;PCA-SIFT利用主成分分析降低描述子的维度,减少内存的使用并加快配对速度。

SIFT算法具有如下特点:

●不变性:SIFT描述图像的局部特征,对图像的旋转和尺度变化具有不变性,对三维视角变化和光照变化具有很强的适应性,在遮挡和场景杂乱时仍保持不变性;

●辨别能力强:特征之间相互区分的能力强,能够在海量的特征中进行快速、准确地匹配;

●特征点数量较多:即使是一幅较小的图片也能够产生足够多的特征点,如一幅500×500的图像能提取出约2000个特征点;

●可扩展性强:可以很方便的与其他形式的特征向量进行联合。

SIFT算法主要分为四个步骤(算法流程图如下):

●多尺度空间极值点检测:搜索所有尺度上的图像位置,通过高斯微分函数来识别潜在的对于尺度和旋转不变的候选关键点。

●关键点的精确定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度,同时关键点的选择依据于它们的稳定程度。

●关键点的主方向计算:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。

●描述子的构造:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。

1.多尺度空间极值点检测

1.1尺度空间

图像的尺度空间被定义为:L(x,y,σ)=G(x,y,σ)*I(x,y),即是图像像素矩阵I(x,y)与卷积函数G(x,y,σ)的卷积,而这个卷积函数一般为尺度可变的高斯函数。利用不同的高斯函数对同一幅图像进行处理,会得到不同的图像,即为不同的图像尺度空间。

在这幅图中显示了六个不同的图片,第一幅为原始的图像(即未被卷积函数处理),其他五幅即为卷积处理后的图像。由于高斯函数对图像具有平滑处理的效果,不同σ的高斯函数决定了对图像的平滑程度,大尺度对应图像的概貌特征,小尺度对应图像的细节特征。大的σ值对应粗糙尺度(低分辨率),反之,对应精细尺度(高分辨率)。

1.2 高斯差分尺度空间(DOG)及高斯差分金字塔

为了使检测到的特征具有不同尺度下的不变性,即在不同的尺度空间下都能稳定的检测这些特征,而提出了高斯差分尺度空间(DOG scale-space)。利用不同尺度的高斯差分核与图像卷积生成,即:D(x,y,σ)=[G(x,y,kσ)-G(x,y,σ)]*I(x,y)=L(x,y,kσ)-L(x,y,σ)

而尺度归一化的高斯拉普拉斯函数σ^2 ∇^2 G在利用极大值和极小值提取特征时,能够产生更为稳定的图像特征而逐渐使用高斯拉普拉斯函数近似高斯差分函数D(x,y,σ),具体过程不详细展开,可参考David Lowe 2004年的论文。

为了介绍高斯差分金字塔的生成,先介绍高斯金字塔。高斯金字塔则是由图像经过逐层下采样(步长为2的采样)而成,而每一层(称之为octave)中则含有多张由不同高斯函数卷积得到。

那么,接着对同一层(octave)的相邻两个图像进行差分,即可得到高斯差分金字塔。

在这种情况下,即建立起了三维尺度空间形式。

1.3 空间极值点的检测

为了寻找尺度空间的极值点,每一个采样点需要和它所有的空间相邻点比较,即与它的图像域和尺度域的相邻点进行比较大小。如下图所示,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点。

2.关键点的精确定位

由候选关键点的生成可知,这些候选关键点是DOG空间的局部极值点,而且这些极值点均为离散的点,这些点不一定是真实的极值点。那么,精确定位极值点的一种方法是,对尺度空间DoG函数进行曲线拟合,计算其极值点,从而实现关键点的精确定位。

而拟合函数一般采用二次函数:

对其求导取0,可得偏移量:

一般使(x,y,σ)任一维小于0.5即可停止选择。

而对于所确定的点还需要进行筛选,如通过设定阈值去除对比度低的点,或者hessian矩阵的迹与行列式的比值判断关键点是否在边缘,剔除这些不稳定的边缘响应点。

从上图可以看出,通过去除这些不稳定点,减少了特征的冗余度,能够在一定程度上减少特征匹配的计算量。

3.关键点的主方向

为了使描述符具有旋转不变性,需要利用图像的局部特征为给每一个关键点分配一个基准方向,一般使用图像梯度的方法求取局部结构的稳定方向。

在完成关键点的梯度计算后,使用直方图统计邻域内像素的梯度和方向。梯度直方图将0~360度的方向范围分为36个柱(bins),其中每柱10度。随着距中心点越远的领域其对直方图的贡献也响应减小(为简化,图中只画了45度一柱,8个方向的直方图)。而在主方向的计算中,还存在主方向的校正,通过一个旋转矩阵将坐标轴旋转为特征点的主方向。至此,图像的关键点已经检测完毕,每个关键点有三个信息:位置、尺度、方向,这些关键点即是该图像的SIFT特征点。

4.描述子的构造

图像的SIFT特征点已构造好,那么该如何进行描述?以关键点为中心取8×8的窗口,如下图。

左图的中央为当前关键点的位置,每个小格代表为关键点邻域所在尺度空间的一个像素,求取每个像素的梯度幅值与梯度方向,箭头方向代表该像素的梯度方向,长度代表梯度幅值,然后利用高斯窗口对其进行加权运算。最后在每个2×2的小块上绘制8个方向的梯度直方图,计算每个梯度方向的累加值,即可形成一个种子点,如右图所示。每个特征点由4个种子点组成,每个种子点有8个方向的向量信息,那么向量的维数为4×8=32维。将其按照顺时针方向进行展开,即可得到一个1×32的向量。

对每个关键点使用16×16的窗口,4×4共16个种子点来描述,这样一个关键点就可以产生128维的SIFT特征向量。

到此,生成了一个用于描述SIFT特征点的向量,SIFT算法过程基本上介绍完成。算法的这种邻域方向性信息联合增强了算法的抗噪声能力,同时对于含有定位误差的特征匹配也提供了比较理性的容错性。通过对特征点周围的像素进行分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。

有了描述图像的特征点,再结合相关的匹配算法,即可完成运动目标跟踪、物体识别、图像配准、全景图像的拼接、三维重建等问题。举几例子如下:

SIFT算法凭借其描述子对图像信息的强大描述能力和特征的鲁棒性成为计算机视觉领域极为经典的一个算法,使之在包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对的领域广泛的运用。文中仅仅简要地介绍了SIFT算法的思想和步骤,而对于其中的技术细节有一定的删减,如果想详细了解SIFT算法及文中未曾涉及的细节,请阅读David Lowe的论文:Lowe D G. Distinctive Image Features from Scale-Invariant Keypoints[J]. Int. J. Comput. Vision, 2004, 60(2): 91-110.

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180819G0CTI100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券