二特征点提取算法1、基于SIFT(ScaleInvariantFeatureTransform)方法的图像特征匹配参看DavidG.Lowe的“DistinctiveImageFeaturesfromScale-InvariantKeypoints”基于SIFT方法的图像特征匹配可分为特征提取和特征匹配两个部分,可细化分为五个部分:①尺度空间极值检测(Scale-spaceextremadetection);②精确关键点定位(Keypointlocalization)③关键点主方向分配(Orientationassignment)④关键点描述子生成(Keypointdescriptorgeneration)⑤比较描述子间欧氏距离进行匹配(ComparingtheEuclideandistanceofthedescriptorsformatching)1.1尺度空间极值检测特征关键点的性质之一就是对于尺度的变化保持不变性。因此我们所要寻找的特征点必须具备的性质之一,就是在不同尺度下都能被检测出来。要达到这个目的,我们可以在尺度空间内寻找某种稳定不变的特性。Koenderink和Lindeberg已经证明,变换到尺度空间唯一的核函数是高斯函数。因此一个图像的尺度空间定义为:(,,)Lxy,是由可变尺度的高斯函数(,,)Gxy与输入图像(,)Ixy卷积得到,即:),(),,(),,(yxIyxGyxL(1.1)其中:2222/)(221),,(yxeyxG在实际应用中,为了能计算的相对高效,所真正使用的是差分高斯尺度空间(differenceofGaussian)(,,)Dxy。其定义如下:),,(),,(),()),,(),,((),,(yxLkyxLyxIyxGkyxGyxD(1.2)如上式,D即是由两个相邻的尺度的差(两个相邻的尺度在尺度上相差一个相乘系数k)。图1.1图1.1所展示的是建立DOG的一种实用的方法。初始图像与不同σ值的高斯函数卷积,得到一垛模糊后的图像,然后将这一垛模糊图像临近两两相减即得所对应的DOG。这些模糊后的图像以k为系数在尺度空间里被分隔开,并且该垛内最高的尺度应是最低尺度的2倍。为了能开展后续工作(与尺度空间极值检测相关,将在后续文章中作出解释)并满足上述要求,每垛需要通过卷积得到s+3个模糊后的图像,并且s和k需要具有关系sk/12。在一垛图像建立完毕后,还需要降采样得到下一垛图像的DOG。在实际操作中首先用2倍于第一垛图像的σ值建立出模糊图像,然后再将此垛图像降二采样,即每2个像素抽出一个像素,就可以得到下一垛图像的DOG。在上述工作完成后,所要完成的就是尺度空间的极值检测。DOG上的某个像素要和本尺度的8个相邻像素以及上下相邻尺度各9个相邻像素比较。这样做的目的是为了确保图像在尺度空间和二维图像空间均检测到极值点。如果该像素点在这所有参与比较的点中有最大值或者最小值,则认为该像素点是尺度空间的极值点之一。图1.2表示这种极值检测的原理。图1.2另外需要注意的是,上述的尺度空间极值点检测在每一个垛中都要进行。最后获得的极值点总和是所有垛中所检测到的极值点的集合。那么如果这个极值点处在降采样后的垛中,则需要在找出他后将其坐标变换到原始大小的原图上。容易写出这个变换公式为:0min0002,[0,...1],[0,...1][0,...1]oxxooOxNM(1.3)其中0x是原始大小图像即原始图像上的坐标,经采样变换后变为x;o是处于垛的阶数(即处于第几个垛中);mino=0或者-1,当第一垛图像为原图经过尺寸加倍后的图像生成时值为1,不经过加倍则为0。另外在建立尺度空间的过程中有两个较为重要的参数要确定。可以将之描述为尺度空间抽样频率和空间域抽样频率。尺度空间抽样频率表现为每个DOG垛所含有的DOG数目。由于每个DOG垛中最大尺度已经确定是最小尺度的2倍,则在这个范围内的DOG数目越多,抽样频率就越高。这个频率影响着特征提取的效果。Lowe教授在其文章中论述了对于该参数所做的实验。图1.3实验表明在每个垛中有3个抽样时特征点提取效果是最好的(从图1.3左图可以看出,无论是变化过的图像中能取到与原图中相同的特征点的比例,还是所取到的特征点与数据库内特征点匹配上的比例都是最高)。而之所以更高的抽样频率不能带来更好的匹配效果,是因为抽样频率越高,虽然提取的特征点越多,但这样的特征点大多是不稳定的,因此无法提高匹配的成功率,这从图1.3右图可以看出。另外一个参数是空间域抽样频率。表现为σ的数值。由于图像与高斯函数的卷积可以看作是空间滤波,则σ与滤波的截止频率有很大的关系。σ越大,截止频率就越小,能够看到的抽样值频率也越小。图1.4Lowe教授在文章中也对σ的取值做了相关实验,实验结果表明当σ取1.6时所得到的匹配效果最好,这从图1.4中可以看出(同样的,在变化过的图像中能取到与原图中相同的特征点的比例,还是所取到的特征点与数据库内特征点匹配上的比例都是最高)。另外他还证明,在建立尺度空间的第一垛图像时,先将原始图像的尺寸加倍,则可以使稳定的特征点的数目达到原来的4倍。1.2精确关键点定位极值点确定之后,必须进行有效的后续工作对这些点进行筛选;因为此时往往会有可观数量的极值点具有很低的对比度或者处于不理想的边缘。我们把这些极值点成为备选关键点,而后续工作的目的就是去掉那些对比度低的以及处于不理想边缘处的备选关键点(keypointcandidate),以得到最终参与匹配的特征关键点(keypoint)。1.2.1更精确的关键点位置描述早期的关键点定位方法比较粗糙。目前所采用较多的方法是由Brown教授所提出的三维二次曲线(3Dquadraticfunction)展开。该方法将DOG在所关注的像素点处用三维泰勒级数展开(展开到2次方项),然后再精确定位极值的位置至亚像素级。展开式如下:xxDxxxDDxDTTT2221)((1.4)其中:(,,),TDxDDXxyXyD,22222222222222DDDxxyxDDDDXyxyyDDDxy,,,,2112()()4xyxyxyxykkkkDDDDD,(k指当前k层,k-1指k的下层,k+1指上一层)1,1,1,1,21111()()4xyxyxyxykkkkDDDDDx···可以看到,所有的偏导数值都由像素值的差分来近似;后面会涉及到的Hessian算子中的相关计算也是由像素值的差分来近似的。按照泰勒级数的定义,其中D和D的偏导数都是在展开点所计算的值,而x是估计点到展开点的偏移量,即:),,(000yyxxx其中被减值是估计点的坐标,减数为展开点的坐标。那么要求得D的极值,则自然想到对这样展开后的D对x求导,然后使导数为0,即求得了局部的极值。在这种理念下,则极值点对于展开点的偏移量xˆ满足:xDxDx122)(ˆ(1.5)则容易由此得到极值点的坐标。容易想到,如果三维向量xˆ在任何一个维度的值大于0.5,那么这个极值点会更接近另外一个像素点,而不是本身的这个展开点。那么此时就将展开点换做更接近的那个点,然后再次展开计算偏移量xˆ。最后偏移量的值被加到展开点上以得到关键点的最终位置。当然这个最终位置的坐标不一定是整数,所以这个关键点的位置是一种修正过的,或说插值过(interpolated)的估计值。需要注意的是,SIFT特征匹配最终也不需要有一个整数的坐标值。在生成了关键点描述子之后,在匹配时与具体的坐标就不相关了。1.2.2去除对比度低的不稳定关键点在精确定位了特征关键点之后,该特征关键点的DOG函数可以由其临近的像素点的DOG展开获得,即式(1.1)。研究表明,特征关键点的DOG函数值)ˆ(xD可以用来去除那些因为对比度偏低而不稳定的关键点。其值越低,则越不稳定越应该忽略。在实际操作中,用来求)ˆ(xD的函数并不是(1.1),而是在此基础上继续忽略2阶项后所得:xxDDxDTˆ21)ˆ((1.6)在Lowe教授的研究中,这个阈值为0.03,亦即所有03.0)ˆ(xD的点全部去除。1.2.3去除由边缘响应所带来的不稳定关键点为了增强特征点的稳定性,仅仅去除低对比的点是不够的。DOG函数有着较强的边缘响应,如果关键点被定位在边缘,那么这个关键点很有可能是不稳定的,尤其容易受到噪声的影响,即是是少量的噪声也会影响匹配的稳定性。一个定义不好的高斯差分算子的极值在横跨边缘的地方有较大的主曲率,而在垂直边缘的方向有较小的主曲率。那么我们只需要求出关键点主曲率便可以决定是否因其处于边缘而舍去他。主曲率可以通过2×2的Hessian矩阵H来计算,其中:DxxDxyHDxyDyy该点的两个主曲率是与Hessian矩阵的两个特征值成比例的。而在实际应用中并不用计算出H的特征值,因为我们可以只考虑他们中较大的特征值比较小的特征值的比例r便可以确定该点是不是处于边缘(因为在横跨边缘的地方有较大的主曲率,对应一个大特征值;而在垂直边缘的方向有较小的主曲率,对应一个较小特征值,比例只要足够大,就可以认为该点满足处于边缘的性质)。设α为较大的特征值,β为较小的特征值,则=r。由于()xxyyTrHDD(1.7)2()()xxyyxyDetHDDD(1.8)我们构建222()()(1)()()TrHrratioDetHr(1.9)则如果我们考虑0rr时则认为该点处于边缘,那在具体判定时,我们可以不用计算出其具体特征值,而是只用等效判断是否有020)1(rrratio即可。计算一个二阶矩阵的迹以及其行列式,要比计算其特征值的代价小得多,只用进行20次不到的浮点操作即可。一般情况下,阈值0r取为10。1.3关键点主方向分配给一个关键点分配主方向,并将主方向纳入关键点的描述子特性之中,那么这个关键点就具有了旋转不变性。描述主方向需要用到像素点的梯度。梯度的模和方向如下以像素差分的方法定义和计算:22(,)((1,)(1,))((,1)(,1))mxyLxyLxyLxyLxy(1.10)1(,)tan((,1)(,1))/((1,)(1,))xyLxyLxyLxyLxy(1.11)关键点的主方向是通过统计以关键点为中心的一个邻域之内所有点梯度方向来确定。在实际计算中,这种统计通过梯度方向直方图来确定。梯度直方图将360°分为36个柱,每个柱为10°。其中出现的梯度方向峰值就是这个关键点的主方向。在邻域内的点的方向被纳入直方图时,还要经过一次高斯加权;这个加权的高斯函数是以关键点为中心,1.5σ为标准差的,其中σ就是这个关键点所在的尺度。若当梯度直方图中存在的次高峰,其模值大于等于最高峰的80%,那么就将该次高峰对应的方向定为该点的辅方向。如果一个特征点有辅方向,那么就建立另外一个新的特征点,这个特征点和原特征点有着同样的坐标,但是方向不同。也就是说这样会出现一些坐标相同但是主方向不同的特征点。实验表明,虽然只有15%的特征点存在辅方向,但是给具有辅方向的关键点生成新关键点,能极大的提高匹配的稳定性。最后,如果还想进一步提高峰值位置的精度,可以用最接近峰值的3个直方图值做抛物线拟合,将拟合出的抛物线最大值的位置作为精确的峰值位置,亦即精确的主方向角度。1.4关键点描述子生成前面的工作我们已经指定了特征关键点的位置、尺度和方向,这样特征点就已经对于这些参数的变化保持了不变性。下一步就是要生成一种能描述这样特征的描述子,并尽可能让这种描述子对于其他一些变化也有一定的不变性,如光照和三维视角变化。在建立描述子时,要将描述子的主方向