【CV学习5】SURF算法详解
Speeded Up Robust Features(SURF,加速稳健特征)
一.积分图像
- 什么是积分图像
积分图像是输入的灰度图像经过一种像素间的累加运算得到种新的图像媒介。对于一幅灰度的图像,积分图像中的任意一点(x,y)的值是指从图像的左上角到这个点的所构成的矩形区域内所有的点的灰度值之和
- 积分图像的作用
积分图像是SURF算法减小计算量的关键,从SIFT到SURF算法的性能提升很大程度归功于积分图像的使用
- 积分图像与原始图像的关系
a.相同点:
积分图像与原始图像的尺寸相同,积分图像中每个位置坐标与原始灰度图像的像素坐标相对应。
b.不同点:
不同的是,在原始图像采用灰度图像的情况下,灰度图像每个像素使用8bit表示,而积分图像由于像素的累加运算,或者由于图像尺度的变化,积分图像中每个像素位宽将会需要积分的像素尾款来表示
- 如何得到积分图像
a.积分像素值
1.坐标系的建立
对于一幅原始的灰度图像,以图像中的第一个像素位置作为坐标原点,向右为轴正向,向下为轴正向建立坐标系。
2.积分像素值的确定
将任意像素与坐标原点之间围成的矩形区域内所有像素值相加得到一个新的值,在这里我们把它定义为积分像素值。
b.积分图像的确定
原始图像中每个像素经过运算都会得到新的积分像素值,最终构成一幅新的积分图像。
c.积分图像的作用
有了积分图像的概念,在原始图像中我们可以计算任意矩形区域内的像素之和。这种运算方式有效的减少了运算量,因为矩形的面积大小不会影响到运算量。任意矩形内的像素累加只需要使用矩形四个顶角位置的积分像素值进行加减运算即可得到。
如果要计算矩形内的所有像素的累加值只需要再积分图像中找到对应,,,四个位置的积分像素的值进行加减运算:
二.Hessian矩阵
0.与SIFT算法对比
a. SIFT算法采用的是DoG图像,而SURF采用的是Hessian矩阵行列式近似值图像
b. SIFT算法中使用高斯差分对、和进行近似估计,使用、和函数代替高斯拉普拉斯函数,即
Hessian矩阵通过高斯差分后得到近似估计的Hessian矩阵
高斯函数的高阶微分与离散的图像函数做卷积运算时相当于使用高斯滤波模板对图像做滤波处理
其行列式为
1.定义
a.图像中某个像素点Hessian矩阵
即每一个像素点都可以求出一个Hessian矩阵。
其行列式为:
b.图像的Hessian矩阵
由于我们的特征点需要具备尺度无关性,所以在进行Hessian矩阵构造前,需要对其进行高斯滤波。这样,经过滤波后在进行Hessian的计算
其中表示图像函数与高斯函数二阶微分()在像素点处的卷积。和也类似这么定义
c.盒子滤波器
高斯函数的高阶微分与离散的图像函数做卷积运算时相当于使用高斯滤波模板对图像做滤波处理。在实际运用中,高斯二阶微分进行离散化和裁剪处理得到盒子滤波器近似代替高斯滤波板进行卷积计算
网格中渐变的颜色深度代表高斯滤波模板中不同的权重系数。某一尺寸的高斯滤波模板经过离散化和裁剪生成的盒子滤波器包括三个方向。
对高斯高阶微分函数进行离散化处理的同时也将滤波模板的各部分的滤波权重进行简化,所以系数都是集合中的元素
三.尺度空间的构造
上述工作是通过模板卷积求二阶偏导数得到H矩阵,接下来要通过H矩阵构建尺度空间。
a.SIFT尺度空间
在SIFT中,尺度空间是用金字塔模型对图像滤波缩放得到的。SIFT算法首先对一幅图片进行下采样得到若干图像,每次下采样得到的图片作为每一组的原始图像。为了保证图像金字塔的连续性,对每组的原始图像以不同的进行高斯滤波,金字塔每组中又得到若干滤波后的图像。
这样得到的图像金字塔分为若干组(Octave),同时每组又有若干层(Layer)图片组成。显然,图像金字塔的计算量会随着金字塔组数和层数的增加而变大。
b.SURF尺度空间
1.相同点
SURF算法的尺度空间同样由若干组(Octave)构成,每一组中包含若干层(Level)。
2.不同点
组:
SURF算法中不会对图片进行下采样。SURF算法先从尺寸的盒子滤波器开始,对盒子滤波器的尺寸进行扩展,尺寸的盒子滤波器是为1.2时的高斯二阶微分函数经过离散和减裁后的滤波模板。在SURF中,我们保持图像不变,仅仅改变高斯滤波窗口的大小来获得不同尺度的图像,即构成了尺度空间。
层:
每一层对应的与滤波模板尺寸之间的关系式为。Bay建议将尺度空间分为四组,每组中包括四层。
为了保持尺度空间的连续性,SURF算法尺度空间相邻组中有部分层重叠,同时每组中的盒子滤波器的尺寸都是逐渐增大的。
c.Hessian行列式图像的产生过程
在SURF算法的尺度空间中,每一组中任意一层包括三种盒子滤波器。对一幅输入图像进行滤波后通过Hessian行列式计算公式可以得到对于尺度坐标下的Hessian行列式的值,所有Hessian行列式值构成一幅Hessian行列式图像。
一幅灰度图像经过尺度空间中不同尺寸盒子滤波器的滤波处理,可以生成多幅Hessian行列式图像,从而构成了图像金字塔。
四.特征点精确定位
a.非极大值抑制过程
在每一组中选取相邻的三层Hessian行列式图像,对于中间层的每一个Hessian行列式值都可以做为待比较的点,在空间中选取该点周围的26个点进行比较大小,若该点大于其他26个点,则该点为特征点。从上诉过程可以知道,当尺度空间每组由四层构成时,非极大值抑制只会在中间两层进行,相邻的组之间不进行比较。
b.设定Hessian行列式的阀值
低于Hessian行列式阀值的点不能作为最终的特征点。在实际选择阀值时,根据实际应用中对特征点数量和精确度的要求改变阀值。阀值越大,得到的特征点的鲁棒性越好。在处理场景简单的图像时,其阀值可以适当的调低。在复杂的图像中,图像经旋转或者模糊后特征点变化的数量较大,测试需要适当提高阀值。
五.主方向计算
为了使特征具备较好的旋转不变性,需分配给每个特征点一个主方向。在SURF中,主方向是对以特征点为中心的6倍特征尺度为半径的圆形区域内的Haar小波响应做统计运算得到的。
a.兴趣点方向的确定
首先赋予每一个兴趣点方向特征。我们以某个兴趣点为圆心,以6S(S为该兴趣点对应的尺度)为半径的圆形领域里,用尺寸为4S的Haar小波模板对图像进行处理,求x,y两个方向的Haar小波响应。
Haar小波的模板如图所示,
其中左侧模板计算X方向的响应,右侧模板计算y方向的响应,黑色表示-1,白色表示+1。用其对圆形领域进行处理后,就得到了该领域内每个点对应的x,y方向的响应,然后用以兴趣点为中心的高斯函数()对这些响应进行加权
在这个圆形领域内做一个60度的扇形区域,统计这个扇形区域内的haar小波特征总和,然后转动扇形区域,再统计小波特征总和。小波特征总和最大的方向为主方向。
b. 构建描述子向量
1. SIFT算法
在SIFT中关键点描述是选取了关键点周围的领域,又将其划分为的区域,每个区域统计8个方向梯度,最后得到维度的描述向量。
2.SURF算法
在SURF中,我们在关键点周围选取一个正方形框,方向为关键点的主方向,边长为20S。将其划分为16个区域(边长为5S),每个区域统计25个像素的水平方向和垂直方向的Haar小波特性(均相对于正方形框的主方向确定的)
该小波特征包括水平方向值之和,水平方向绝对值之和,垂直方向值之和和垂直方向绝对值之和(为了把强度变化的极性信息也包括描述符中,所以对绝对值进行累加)。这样每个区域有4个值,则每个正方形框有维,即每个关键点描述是64维,比SIFT描述少了一半
六.SURF算法与SIFT算法总结对比
(1)在生成尺度空间方面,SIFT算法利用的是差分高斯金字塔与不同层级的空间图像相互卷积生成。SURF算法采用的是不同尺度的box filters与原图像卷积
(2)在特征点检验时,SIFT算子是先对图像进行非极大值抑制,再去除对比度较低的点。然后通过Hessian矩阵去除边缘的点。
而SURF算法是先通过Hessian矩阵来检测候选特征点,然后再对非极大值的点进行抑制
(3)在特征向量的方向确定上,SIFT算法是在正方形区域内统计梯度的幅值的直方图,找到最大梯度幅值所对应的方向。SIFT算子确定的特征点可以有一个或一个以上方向,其中包括一个主方向与多个辅方向。
SURF算法则是在圆形邻域内,检测各个扇形范围内水平、垂直方向上的Haar小波响应,找到模值最大的扇形指向,且该算法的方向只有一个。
(4)SIFT算法生成描述子时,是将的采样点划分为的区域,从而计算每个分区种子点的幅值并确定其方向,共计维。
SURF算法在生成特征描述子时将的正方形分割成的小方格,每个子区域25个采样点,计算小波haar响应,一共维。
综上,SURF算法在各个步骤上都简化了一些繁琐的工作,仅仅计算了特征点的一个主方向,生成的特征描述子也与前者相比降低了维数。
七.参考与致谢
1.小林的CV视觉工坊
2.多篇哈工大硕士论文
3. Bay H, Ess A, Tuytelaars T, et al. Speeded-up robust features (SURF)[J]. Computer vision and image understanding, 2008, 110(3): 346-359.