图像检索服务器编写问题记录——SIFT尺度不变特征变换匹配算法学习

SIFT解决的问题及其思路

SIFT之前更加传统的匹配图像的方法是使用颜色、灰度等全局特征来描述整张图像,进而用这些全局特征去匹配图像。这样拍摄的光照、角度等因素对图像匹配的影响巨大。

  • 解决的问题

1.图像匹配时,两张相同图像,因为拍摄远近、模糊不同,导致匹配不出来。

2.图像匹配时,两张相同图像,因为拍摄角度、方向不同,导致匹配不出来。

3.图像匹配时,两张相同图像,因为拍摄光照条件不同,导致匹配不出来。

  • 解决问题的思路

1.使用图像的局部特征来描述整张图像,降低图像颜色光照等对匹配的影响——部分解决问题3

2.使用具有尺度不变性的局部特征来描述图像——解决问题1

3.使用具有旋转不变性的局部特征来描述图像——解决问题2


SIFT尺度不变特征变换匹配算法

  • 尺度不变

1.尺度的概念及重要性

概念】:可以简单理解为尺度越大,图像分辨率越低,特征提取时抠的细节越少;尺度越小,图像分辨率越高,抠的细节越多。例子:(我们用枝叶细节这些局部特征来描述一棵树),我们站得远,观察的时候比较模糊,尺度比较大,能看到的枝叶细节少;我们站得近,看的比较清晰,观察的时候尺度小,能看到的枝叶细节多。

尺度的重要性】:尺度过小,细节抠的过于细致;尺度过大,细节抠的过于少。以上面树的例子就是。我们用一棵杉树去匹配所有树。如果尺度过小,那么杉树的局部细节只能匹配出杉树这个树种,而匹配不出同为树的松树。如果尺度过大,那么杉树的局部细节提的比较少,那么在匹配树的过程中,可能就把木棍也匹配出来了。

2.尺度不变性

尺度不变性概念】:以上面树的例子,无论我们站得远,还是站得近,我们都能通过观察到的枝叶细节这些局部特征来判断这是不是一棵树
为什么要尺度不变原因】:图像匹配的时候,匹配和被匹配图像,即使拍的是同一个物体,也会因为拍摄时模糊,清晰(远近)也就是分辨率的不同等问题导致无法匹配出来,所以我们需要找出那些不受【图像拍摄远近、模糊】影响的局部特征。----->sift检测的特征【角点】

  • 特征变换

1.SIFT的特征点(关键点)

sift的关键点】:是角点,sift中的角点是DOG图中的极值点(不是边缘、不是边缘、不是边缘)(角点的几何意义:DOG算子是LOG算子的近似,LOG算子是非混合二阶偏导和。一阶偏导数是像素的变化率(切线),二阶偏导数是像素变化率的变化率(可以代替曲率大小。曲率:切线方向角对弧长的转动率,其几何意义是:曲线偏离直线的程度,也即曲线越弯曲,某点前后切线变化越大,曲率越大)。那么DOG算子的局部极值点,就是切线变化率比较大的点,即角点是曲率比较大的点。)


2.关键点提取和关键点描述

  • 求解的基本的方法的导出(两种关键点提取算子的转换)
LOG算子】:LOG算子具有旋转不变性+其他什么原因,总之,是使用LOG算子来检测角点的,

高斯函数:

高斯函数梯度算子(x,y两个方向的曲率和最大):

LOG算子:

DOG算子】:log算子求解太慢,太麻烦,所以使用DOG算子近似求解LOG算子的值:

LOG具有旋转不变性,但是高斯差分就不在具有旋转不变性了。那这里因为我没有去求证为什么高斯拉普拉斯求的关键点,天然的具有尺度不变性和旋转不变性,所以我也没能说明为什么高斯差分近似log算子之后它的尺度不变性和旋转不变性就丢了。

求解方法的导出】:等号左边的就是DOG算子,求局部极值点时,因为只要比较大小,所以系数(k-1)>0有无都没什么问题。第三个参数是方差。两个高斯函数相差的只是方差。方差描述的是像素值们偏离平均像素值的程度。方差越大,偏离程度越大。前后两个高斯函数可以看成一个没有被高斯滤波平滑之前的x,y点的像素值,后面一个可以被看成高斯滤波平滑后的x,y点的像素值。所以关键点的检测方法就很明显了。就是求两个相邻高斯平滑后图像的差分的极值。

  • 关键点提取和关键点描述
1.建立高斯差分金字塔,求出待选的关键点

形成多尺度的DOG金字塔】共n组(降采样一次为一组),每组S幅图像(高斯平滑一次为一幅)。(为什么要同组中再进行高斯平滑?降采样不是已经实现尺度变化了吗?降采样后(隔点采样尺度(分辨率)一下子降的太厉害了),为了尺度连续性,同组中仍然需要采用高斯平滑,这样第一组的最后一张图的尺度和第二组的第一张图的尺度就连续了。)


待选关键点检测】在同组内,相邻图像相减得到高斯差分图,即DOG图。如果一个局部极值点(3*3邻域中)同组的DOG图,以及上下相邻两组的DOG图中都可以检测到,那么该点就作为待选关键点(但是这里提取的仅仅只是待选关键点,这些关键点仍然需要进一步筛选)。

2.精确定位关键点,去除低对比度的关键点、去除边缘响应【尺度不变性】

精确定位关键点】:以上定位的极值点是离散空间的极值点,不是连续空间的极值点。(什么意思?降采样的影响,降采样,隔点采样,删掉的位置才是真正的极值点(极值点位置是要要透视投影回去和上下两组DOG图极值点比较的))。

如何精确】:【1.】求连续空间的极值点:用DOG函数的泰勒展开式在已知的离散空间的极值点展开。【2.】将求出的连续空间的极值点与离散空间的极值点比较,它们之间的偏移量大于0.5,那么替换原离散极值点位置,将新的离散极值点代入函数,反复差值求解,直至收敛(保留),或迭代超过规定次数(删除)。

去除对比度小的关键点】:还有就是将极值点小于0.04的关键点全部删除。

边缘响应的去除】:【1.】进一步精确后的关键点,由DOG算子计算后的局部极值点,DOG算子近似于LOG算子。LOG算子算的是x,y两个方向的切线变化率(可以代替曲率),关键点是这两个切线变化率的和取了局部极值点。【2.】边缘响应去除,就是去除那些待选关键点中,x,y两个方向求出来的切线变化率不对称的点(例如:x方向的切线变化率过大,y方向切线变化率过小,虽然他们的总和虽然是局部极值点,但是这不是SIFT想要的极值点)

                                        


3.给筛选后的关键点赋值一个的方向参数【旋转不变性】

给特征点赋值一个方向参数】-----旋转不变性

上几步中得出了精确的、尺度不变的关键点(特征点);本步为每个尺度不变的特征点,附加方向,使之具有旋转不变性;利用特征点(关键点)邻域像素的梯度方向分布直方图为特征点指定方向参数,这样特征点就有了方向,算子具备旋转不变性。

如何附加

1.梯度方向和梯度模的计算。
2.将关键点邻域内的像素点计算出梯度方向和模。
3.统计方向,形成方向直方图,模作加权用。
4.取方向直方图的主方向作为关键点的方向。


4.关键点描述

关键点描述目的】:希望在关键点计算后,用一组向量将这个关键点周围描述出来,这个描述子不但包括关键点,也包括关键点周围对其有贡献的像素点。用来作为目标匹配的依据,也可使关键点具有更多的不变特性,如光照变化、3D视点变化

关键点描述思路】:通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性


  • 匹配

穷举】:

KD树】:

你可能感兴趣的:(图像检索服务器编写记录)