SIFT 特征

是一种基于尺度空间的,对图像缩放,旋转甚至仿射变换保持不变性的图像局部特征描述算子。SIFT特征提取的是及其细微,大量的特征点,即时少数物体,物体的一小部分也可以产生大量特征向量。仅三个匹配的SIFT关键点就足以确定匹配关系。
SIFT算法用于图像配准的整个执行流程大致为:
1,度入图像,转换double类型
2,高斯滤波,线性插值,图像放大一倍
3,产生高斯金字塔和高斯差分金字塔图像序列,这是最耗时的一步;Lowe建议高斯金字塔一般选择4阶,每阶选择5层。
4,检测高斯差分金字塔尺度空间极值点,去除对比度和边缘不稳定的特征点,选取较小的曲率阈值或选取较大的对比度阈值均可以减小特征点的个数,应选取合适的阈值,若果图像太大,特征点太多,会导致内存溢出。
5,计算特征点幅值和方向序列
6,在特征点中寻找关键点,建立梯度方向直方图,得到每个关键点的位置,尺度和方向。
7,产生关键点描述子序列
8,根据产生的关键点描述子序列,基于欧氏距离初步得到关键点对,寻找与目标关键点欧氏距离最近的俩个关键点,用这俩个关键点中最近的距离与此近的距离的比值作为最近点的相似度度量,如果小于某个比例阈值,则接受这一对匹配点,
9,用hough变换对初步得到的关键点对进行再一次计算,得到最终的初始关键点对。
10,用RANSAC算法对初始关键点对进行精确匹配,提出错误的匹配点,得到最终的匹配点。

SURF

Surf算法是对Sift算法的一种改进,主要是在算法的执行效率上比Sift算法来讲运行更快!
SURF算法对积分图像进行操作,卷积只和前一幅图像有关,其降采样的方法是申请增加图像核的尺寸,这也是SIFT算法与SURF算法在使用金字塔原理方面的不同。SURF算法允许尺度空间多层图像同时被处理,不需对图像进行二次抽样,从而提高算法性能。
算法原理:
(1)、构建Hessian矩阵
Hessian矩阵是Surf算法的核心,为了方便运算,假设函数f(z,y),Hessian矩阵H是由函数,偏导数组成:

图像配准特征
H矩阵判别式为:

图像配准特征
判别式的值是H矩阵的特征值,可以利用判定结果的符号将所有点分类,根据判别式取值正负,来判别该点是或不是极值点。在SURF算法中,用图像像素l(x,y)代替函数值f(x,y),选用二阶标准高斯函数作为滤波器,通过特定核间的卷积计算二阶偏导数,这样便能计算出H矩阵的三个矩阵元素的值,从而计算出H矩阵:
图像配准特征

L (X,t)是一幅图像在不同解析度下的表示,可以利用高斯核G(t)与图像函数I(x)卷积实现。通过这种方法可以为图像中每个像素计算出其H行列式的值,并用这个值来判别特征点。为方便应用,Herbert Bay提出用近似值现代替L。为平衡准确值与近似值间的误差引入随尺度变化的权值,则H矩阵判别式可表示为:

图像配准特征

(2)、构建尺度空间
图像的尺度空间L(x,t)是这幅图像在不同解析度(Scale)下的表示。在计算视觉领域,尺度空间被象征性的表述为一个图像金字塔,其中,输入图像函数反复与高斯函数的核卷积并反复对其进行二次抽样,这种方法主要用于Sift算法的实现,但每层图像依赖于前一层图像,并且图像需要重设尺寸,因此,这种计算方法运算量较大,而SURF算法申请增加图像核的尺寸,这也是SIFT算法与SURF算法在使用金字塔原理方面的不同。算法允许尺度空间多层图像同时被处理,不需对图像进行二次抽样,从而提高算法性能。下左图是传统方式建立的一个金字塔结构,图像的尺寸是变化的,并且运算会反复使用高斯函数对子层进行平滑处理,右图Surf算法使原始图像保持不变而只改变滤波器大小。
图像配准特征

(3)、精确定位特征点
  此步骤和sift类似,将经过hessian矩阵处理过的每个像素点与其3维领域的26个点进行大小比较,如果它是这26个点中的最大值或者最小值,则保留下来,当做初步的特征点。采用3维线性插值法得到亚像素级的特征点,同时也去掉那些值小于一定阈值的点。
图像配准特征

(4)、主方向确定
Sift选取特征点主方向是采用在特征点领域内统计其梯度直方图,取直方图bin值最大的以及超过最大bin值80%的那些方向做为特征点的主方向。而在surf中,不统计其梯度直方图,而是统计特征点领域内的harr小波特征。即在特征点的领域(比如说,半径为6s的圆内,s为该点所在的尺度)内,统计60度扇形内所有点的水平haar小波特征和垂直haar小波特征总和,haar小波的尺寸变长为4s,这样一个扇形得到了一个值。然后60度扇形以一定间隔进行旋转,最后将最大值那个扇形的方向作为该特征点的主方向。该过程的示意图如下:
图像配准特征

(5)特征点描述子生成
sift中,是在特征点周围取1616的邻域,并把该领域化为44个的小区域,每个小区域统计8个方向梯度,最后得到448=128维的向量,该向量作为该点的sift描述子。
在surf中,也是在特征点周围取一个正方形框,框的边长为20s(s是所检测到该特征点所在的尺度)。该框带方向,方向当然就是第4步检测出来的主方向了。然后把该框分为16个子区域,每个子区域统计25个像素的水平方向和垂直方向的haar小波特征,这里的水平和垂直方向都是相对主方向而言的。该haar小波特征为水平方向值之和,水平方向绝对值之和,垂直方向之和,垂直方向绝对值之和。该过程的示意图如下所示:
图像配准特征

这样每个小区域就有4个值,所以每个特征点就是164=64维的向量, 相比sift而言,少了一半,这在特征匹配过程中会大大加快匹配速度。
总结:
Sift/Surf采用Henssian矩阵获取图像局部最值还是十分稳定的,但是在求主方向阶段太过于依赖局部区域像素的梯度方向,有可能使得找到的主方向不准确,后面的特征向量提取以及匹配都严重依赖于主方向,即使不大偏差角度也可以造成后面特征匹配的放大误差,从而匹配不成功;另外图像金字塔的层取得不足够紧密也会使得尺度有误差,后面的特征向量提取同样依赖相应的尺度,发明者在这个问题上的折中解决方法是取适量的层然后进行插值。Sift是一种只利用到灰度性质的算法,忽略了色彩信息。
SURF和SIFT的主要区别:
1) 预处理时:SITF将图像在各个方向上扩大了两倍,SURF则是计算积分图像。
2) 尺度空间的构造:SIFT是用高斯卷积乘以图像,获得LoG空间。通过相邻层相减得到DoG尺度空间,对原图进行向下采样得到下一层;SURF通过改变Box滤波器的尺寸来得到不同的尺度空间,无需改变图像的大小。
3) 极值点的确定:SIFT通过比较DoG尺度空间3维(3
33)像素灰度值来确定极值;SURF用Hessian矩阵行列式的特征值符号来确定极值。
4) 是否需要剔除边缘响应:SIFT需要,根据Hessian的求出主曲率,采用阈值抑制掉边缘响应;而SURF不需要剔出边缘响应;
5) 极值点方向估计:SIFT根据像素的梯度来确定。将360°分成36份,进行直方图统计;SURF根据像素在x,y方向上的Harr小波响应来确定。将360°分成72份,用直方图统计每相邻60°之内的响应值之和。
6) 特征向量维数:SIFT是4
4个子区域,8个方向共128维;SURF是4*4个子区域,4个方向的响应值共64维;
7) 相似度度量方法:基于KD的存储结构,采用BBF算法进行匹配;SURF是快速索引匹配和欧式距离差方匹配;
8) 剔除伪匹配点:SIFT采用RANSAC算法剔除伪匹配点;SURF则不需要剔除伪匹配点;

HARRIS算子

它用一阶偏导来描述亮度变化,这种算子受信号处理中自相关函数的启发,给出与自相关函数相联系的矩阵M。M矩阵的特征值是自相关函数的一阶曲率,如果两个曲率值都高,那么就认为该点是特征点。
Harris角点提取方法的原理是:如果某一点向任一方向的微小偏移都会引起灰度的很大变化,这就说明该点是角点。
Harris算子的优点:
(1)、计算简单:Harris算子中只用到灰度的一阶差分以及滤波,操作简单,整个过程的自动化程度高;
(2)、提取的点特征均匀而且合理:Harris算子对图像中的每个点都计算其特征值,然后在邻域中选取最优点;
(3)、可以定量的提取特征点:Harris算子最后一步是对所有的局部极值进行排序,所以可以根据需要提取一定数量的最优点;
(4)、Harris算子在计算时用到了图像数据的一阶导数,具有各向同性。因此对图像旋转、亮度变化、视角变化和噪声的影响具有较好的鲁棒性。
Harris角点检测算法一般步骤:
(1)、构造梯度算子:
p = [0.037659 0.249153 0.426375 0.249153 0.037659];
d = [0.109604 0.276691 0.000000 -0.276691 -0.109604];
Ix = conv2(p, d, im, ‘same’);
Iy = conv2(d, p, im, ‘same’);
(2)、高斯滤波,构造自相关矩阵M:
h = fspecial(‘gaussian’, [sze sze], sigma);
smim = filter2(h, im);
(3)、提取特征点:先对处理过的中间结果,进行类似于灰度膨胀;设定一阈值,用于判断是否是特征点的条件之一;去除图像边界,图像边界不作为提取特征点的范围。

   Harris算子不具有尺度不变性,为了满足对图像尺度的不变性,又提出了多尺度Harris算子。

1.hog特征原理
1.HOG的核心思想是所检测的局部物体外形能够被光强梯度或边缘方向的分布所描述。
通过将整幅图像分割成小的连接区域(称为cells),每个cell生成一个方向梯度直方图或者cell中pixel的边缘方向,这些直方图的组合可表示出(所检测目标的目标)描述子。为改善准确率,局部直方图可以通过计算图像中一个较大区域(称为block)的光强作为measure被对比标准化,然后用这个值(measure)归一化这个block中的所有cells.这个归一化过程完成了更好的照射/阴影不变性。
hog特征优点:
(1).几何和光学转化不变性,尤其适合人的检测。
(2).Hog没有旋转和尺度不变性。(所以计算量小)
那么行人检测中怎么应用HOG呢?
对于解决Scale-invariant的问题:将图片进行不同尺度的缩放,就相当于对模板进行不同尺度scale的缩放。
对于解决Rotation-invariant 的问题:建立不同方向的模版(一般取157的)进行匹配。
2.hog实现原理
对于一个image,在一个大小为winSIZE的检测窗口中,用一个大小为blockSIZE的block来扫描整个检测窗口,每个block又分为四个cell,每次block扫描都输出四个cell的梯度信息然后保存到特征向量中。
这三者的示意图如下:[2]
窗口大小 winSize
图像配准特征
块大小 blockSize
图像配准特征
胞元大小 cellSize
图像配准特征
通俗的讲:
HOG特征提取方法就是将一个image:
灰度化(将图像看做一个x,y,z(灰度)的三维图像)
划分成小cells(2
2)
计算每个cell中每个pixel的gradient(即orientation)
统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor
对opencv中的hog源码中一些固定参数来个简单说明:
   检测窗口大小为12864;
   Block大小为16
16;
   Cell大小为88;
   Block在检测窗口中上下移动尺寸为8
8;
   1个cell的梯度直方图化成9个bin;
   滑动窗口在检测图片中滑动的尺寸为88;
代码中的一个hog描述子是针对一个检测窗口而言的,所以一个检测窗口共有105=((128-16)/8+1)
((64-16)/8+1)个block;一个block中有4个cell,而一个cell的hog描述子向量的长度为9;所以检测窗口的hog向量长度=3780=10549维。每次block扫描都输出四个cell的梯度信息然后保存到特征向量中,知道扫描完最后特征向量输出3780维的向量。

相关文章: