过程:

  • 1.尺度空间建立及极值点搜索(初步搜索);
  • 2.关键点精确定位:直线拟合使得关键点精确定位(x,y,σ)、消除边缘响应;

初步搜寻特征点后,得到特征点的层数,像素坐标(x,y),方向(文中分为18或36个离散方向)

1. SIFT算法具的特点

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

2.尺度空间

人不管物体离得远还是近,都能对它进行仔细辨认,这就是尺度不变性。

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

2.1 高斯拉普拉斯与高斯差分

Laplace算子作为一种优秀的边缘检测算子,在边缘检测中得到了广泛的应用。该方法通过对图像 求图像的二阶倒数的零交叉点来实现边缘的检测,公式表示如下:
SIFT特征简介

由于Laplace算子是通过对图像进行微分操作实现边缘检测的,所以对离散点和噪声比较敏感。于是,首先对图像进行高斯卷积滤波进行降噪处理,再采用Laplace算子进行边缘检测,就可以提高算子对噪声和离散点的鲁棒性。当然,实际上是先对高斯算子进行拉普拉斯求导,再对其进行卷积操作(类似于先积分后求导和先求导后积分)。如此,拉普拉斯高斯算子Log(高斯拉普拉斯(Laplace of Gaussian)):

SIFT特征简介
参见高斯拉普拉斯算子
由于x方向和y方向上的高斯拉普拉斯的指数部分一样,所以既可以分别计算x,y方向的高斯拉普拉斯,也可以一起计算,这就是高斯拉普拉斯的线性可分。

于是一副二维图像的尺度空间定义为:
SIFT特征简介

高斯卷积核是实现尺度变换的唯一线性核。原始像素的值有最大的高斯分布值,所以有最大的权重,相邻像素随着距离原始像素越来越远,其权重也越来越小。这样进行模糊处理比其它的均衡模糊滤波器更高地保留了边缘效果。

(x,y)是空间坐标,是尺度坐标。σ大小决定图像的平滑程度,大尺度对应图像的概貌特征,小尺度对应图像的细节特征。大的σ值对应粗糙尺度(低分辨率),反之,对应精细尺度(高分辨率)。但是其运算量过大,通常可使用DoG(差分高斯,Difference of Gaussina)来近似计算LoG[Marr and Hidreth]。
设k为相邻两个高斯尺度空间的比例因子,则DoG的定义

SIFT特征简介
从上式可以知道,将相邻的两个高斯空间的图像相减就得到了DoG的响应图像
实际实现时,也即将相邻的经过不同的高斯核卷积生成的图像直接相减即得到DOG

如何实现尺度不变呢?即采用金字塔,将不同分辨率的信息都存储下来;

在 Lowe的论文中 ,将第0层的初始尺度定为1.6(最模糊),图片的初始尺度定为0.5(最清晰). 在检测极值点前对原始图像的高斯平滑以致图像丢失高频信息,所以 Lowe 建议在建立尺度空间前首先对原始图像长宽扩展一倍,以保留原始图像信息,增加特征点数量

3.提取特征点(空间极值点检测)

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

在极值比较的过程中,每一组图像的首末两层是无法进行极值比较的,为了满足尺度变化的连续性(下面有详解),我们在每一组图像的顶层继续用高斯模糊生成了 3 幅图像,高斯金字塔有每组S+3层图像。DOG金字塔每组有S+2层图像

假设s=3,也就是每个塔里有3层,则k=2*(1/s)=2*(1/3)(此处每个塔或每个组分辨率之间倍数为2,比如64*64,32*32);那么按照上图可得Gauss Space和DoG space 分别有3个(s个)和2个(s-1个)分量(DoG space 两两顺序比较,所以会少一个)

在DoG space中,1st-octave两项分别是σ,kσ; 2nd-octave两项分别是2σ,2kσ;由于无法比较极值,我们必须在高斯空间继续添加高斯模糊项,使得形成σ,kσ,k2σ,k3σ,k4σ这样就可以选择DoG space中的中间三项kσ,k2σ,k3σ(只有左右都有才能有极值),那么下一octave中(由上一层降采样获得)所得三项即为2kσ,2k2σ,2k3σ,其首项2kσ=24/3。刚好与上一octave末项k3σ=23/3尺度变化连续起来,所以每次要在Gaussian space添加3项,每组(塔)共S+3层图像,相应的DoG金字塔有S+2层图像。

4.去掉不好的特征点(极值点)

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

不符合要求的点主要有两种:

4.1低对比度的特征点

借用harris角点的思路 视觉特征点算法(一)Moravec,Harris,Shi-Tomasi角点,利用图像对比度D =I(x+dx,y+dy)-I(x,y)。
由于x为极大值点,所以在此处dD/dx = 0,通过对上式求导,并令导数为0,得到导数确为0的精确的点(实际曲率为0的点):
SIFT特征简介
再代入前面泰勒展开式(只取到一阶导数)

设对比度的阈值为T,若∣D(x^)∣≥T∣D(x^)∣≥T,则该特征点保留,否则剔除掉。文章中设为 0.03

4.2不稳定的边缘响应点

SIFT特征简介
注:曲率本来是指几何曲线的弯曲程度,是角度对弧长的微分,其定义是:
SIFT特征简介
平均曲率:是空间上曲面上某一点任意两个相互垂直的正交曲率的平均值。如果一组相互垂直的正交曲率可表示为K1,K2,那么平均曲率则为:K = (K1 +K2 ) / 2。
主曲率:过曲面上某个点上具有无穷个正交曲率,其中存在一条曲线使得该曲线的曲率为极大,这个曲率为极大值Kmax,垂直于极大曲率面的曲率为极小值Kmin。这两个曲率属性为主曲率。他们代表着法曲率的极值。

5.求取主方向:

利用特征点邻域像素的梯度分布特性来确定其方向参数,再利用图像的梯度直方图求取关键点局部结构的稳定方向

找到了特征点,也就可以得到该特征点在金字塔中的尺度σ,也就可以得到特征点所在的尺度图像:
SIFT特征简介

对于检测到的特征点,采集其所在高斯金字塔图像3σ邻域窗口(一般认为超过3σ邻域的无关重要)内像素的梯度和方向分布特征。梯度的模值和方向如下:
SIFT特征简介

L为关键点所在的尺度空间值,按Lowe的建议,梯度的模值m(x,y)需要进行一次高斯滤波处理:σ=1.5σoct(每一层的σ=σoctσ0σ是最底层的高斯模糊的核大小)

在实际计算时,我们在以关键点为中心的邻域窗口内采样,并用直方图统计邻域像素的梯度方向。梯度方向的直方图的横轴是梯度方向的角度(梯度方向的范围是0到360度,直方图每36度一个柱共10个柱,或者没45度一个柱共8个柱),纵轴是梯度方向对应梯度幅值的累加,它们在直方图的峰值就是特征点的主方向。

至此,图像的关键点已经检测完毕,每个关键点有三个信息:位置,所处尺度、方向,由此可以确定一个SIFT特征区域:一个SIFT特征区域由三个值表示,中心表示特征点位置,半径表示关键点的尺度,箭头表示主方向。

6.生成特征描述子(128维度)

通过以上步骤,对于每一个关键点,拥有三个信息:位置、尺度以及方向。接下来就是为每个关键点建立一个描述符,用一组向量将这个关键点描述出来,使其不随各种变化而改变,比如光照变化、视角变化等等。
特征描述符的生成大致有三个步骤:
1.旋转坐标轴x轴到特征点主方向,确保旋转不变性。
2生成描述子,最终形成一个128维的特征向量
然后用直方图统计邻域内像素的梯度和方向:将梯度
3归一化处理,将特征向量长度进行归一化处理,进一步去除光照的影响。
其中第二步:
先确定该特征点的一个邻域,将该领域分为子邻域(通常4x4),每个子邻域内有一个种子点,然后用双线性插值计算各个子邻域内的八个方向的梯度模(这儿和求取主方向不同,方向更离散);合起来就是4x4x8维向量

7.匹配特征点SIFT

此时SIFT特征向量已经去除了尺度变化、旋转等几何变形因素的影响,再继续将特征向量的长度归一化,则可以进一步去除光照变化的影响。下一步我们采用关键点特征向量的欧式距离来作为两幅图像中关键点的相似性判定度量。
为了排除因为图像遮挡和背景混乱而产生的无匹配关系的关键点,Lowe提出了比较最近邻距离与次近邻距离的方法。取图像1中的某个关键点,并找出其与图像2中欧式距离最近的前两个关键点.在这两个关键点中,如果最近的距离除以次近的距离少于某个比例阈值,则接受这一对匹配点。降低这个比例阈值,SIFT匹配点数目会减少,但更加稳定。Lowe推荐ratio的阈值为0.8。但作者对大量任意存在尺度、旋转和亮度变化的两幅图片进行匹配,结果表明ratio取值在0. 4~0. 6之间最佳,小于0. 4的很少有匹配点,大于0. 6的则存在大量错误匹配点。(如果这个地方你要改进,最好给出一个匹配率和ration之间的关系图,这样才有说服力)作者建议ratio的取值原则如下:

ratio=0. 4 对于准确度要求高的匹配;
ratio=0. 6 对于匹配点数目要求比较多的匹配;
ratio=0. 5 一般情况下。
也可按如下原则:当最近邻距离<200时ratio=0. 6,反之ratio=0. 4。ratio的取值策略能排分错误匹配点。

评价:

对模糊的图像和边缘平滑的图像,检测出的特征点过少,对圆更是无能为力。近来不断有人改进,其中最著名的有SURF和CSIFT。
1. the match method of sift is easily interfered by image noise, repeated structures, and image distortion

附录

关于曲率是什么
参考:
(最推荐)http://blog.csdn.net/pi9nc/article/details/23302075
http://www.cnblogs.com/wangguchangqing/p/4853263.html#autoid-0-0-0
http://blog.csdn.net/abcjennifer/article/details/7639681/

http://blog.csdn.net/abcjennifer/article/details/7639681/
基础知识:图像滤波http://blog.csdn.net/zouxy09/article/details/49080029
各种图像滤波:https://blog.csdn.net/zouxy09/article/details/49080029
源码分析:
系列文章,缺一不可:
1.http://blog.csdn.net/masibuaa/article/details/9204157
2.http://blog.csdn.net/masibuaa/article/details/9207657
//注意:add_good_ori_features之前已经将feat移除(cvSeqPopFront),因此对所有的feature点都会做一次add_good_ori_features
3.http://blog.csdn.net/masibuaa/article/details/9191309

后来Y.Ke将其描述子部分用PCA代替直方图的方式
归一化处理
  •在求出4*4*8的128维特征向量后,此时SIFT特征向量已经去除了尺度变化、旋转等几何变形因素的影响。而图像的对比度变化相当于每个像素点乘上一个因子,光照变化是每个像素点加上一个值,但这些对图像归一化的梯度没有影响。因此将特征向量的长度归一化,则可以进一步去除光照变化的影响。
  •对于一些非线性的光照变化,SIFT并不具备不变性,但由于这类变化影响的主要是梯度的幅值变化,对梯度的方向影响较小,因此作者通过限制梯度幅值的值来减少这类变化造成的影响。

相关文章: