Speeded Up Robust Features(SURF,加速稳健特征)

一.积分图像

  1. 什么是积分图像

积分图像是输入的灰度图像经过一种像素间的累加运算得到种新的图像媒介。对于一幅灰度的图像,积分图像中的任意一点(x,y)的值是指从图像的左上角到这个点的所构成的矩形区域内所有的点的灰度值之和

  1. 积分图像的作用

积分图像是SURF算法减小计算量的关键,从SIFT到SURF算法的性能提升很大程度归功于积分图像的使用

  1. 积分图像与原始图像的关系

a.相同点:

积分图像与原始图像的尺寸相同,积分图像中每个位置坐标与原始灰度图像的像素坐标相对应。

b.不同点:

不同的是,在原始图像采用灰度图像的情况下,灰度图像每个像素使用8bit表示,而积分图像由于像素的累加运算,或者由于图像尺度的变化,积分图像中每个像素位宽将会需要积分的像素尾款来表示

  1. 如何得到积分图像

a.积分像素值

surf算法的源代码python surf算法详解_积分图

1.坐标系的建立

对于一幅原始的灰度图像,以图像中的第一个像素位置作为坐标原点,向右为

surf算法的源代码python surf算法详解_surf算法的源代码python_02

轴正向,向下为

surf算法的源代码python surf算法详解_特征点_03

轴正向建立坐标系。

2.积分像素值的确定

将任意像素

surf算法的源代码python surf算法详解_surf算法的源代码python_04

与坐标原点之间围成的矩形区域内所有像素值相加得到一个新的值,在这里我们把它定义为积分像素值。

 

b.积分图像的确定

原始图像中每个像素经过运算都会得到新的积分像素值,最终构成一幅新的积分图像。

 

c.积分图像的作用

有了积分图像的概念,在原始图像中我们可以计算任意矩形区域内的像素之和。这种运算方式有效的减少了运算量,因为矩形的面积大小不会影响到运算量。任意矩形内的像素累加只需要使用矩形四个顶角位置的积分像素值进行加减运算即可得到。

surf算法的源代码python surf算法详解_surf算法的源代码python_05

如果要计算矩形

surf算法的源代码python surf算法详解_尺度空间_06

内的所有像素的累加值只需要再积分图像中找到对应

surf算法的源代码python surf算法详解_特征点_07


surf算法的源代码python surf算法详解_surf算法的源代码python_08


surf算法的源代码python surf算法详解_surf算法的源代码python_09


surf算法的源代码python surf算法详解_积分图_10

四个位置的积分像素的值进行加减运算:

surf算法的源代码python surf算法详解_积分图_11

 

二.Hessian矩阵

0.与SIFT算法对比

a. SIFT算法采用的是DoG图像,而SURF采用的是Hessian矩阵行列式近似值图像

b. SIFT算法中使用高斯差分对

surf算法的源代码python surf算法详解_surf算法的源代码python_12


surf算法的源代码python surf算法详解_尺度空间_13


surf算法的源代码python surf算法详解_surf算法的源代码python_14

进行近似估计,使用

surf算法的源代码python surf算法详解_特征点_15


surf算法的源代码python surf算法详解_尺度空间_16


surf算法的源代码python surf算法详解_尺度空间_17

函数代替高斯拉普拉斯函数,即

surf算法的源代码python surf算法详解_特征点_18

Hessian矩阵通过高斯差分后得到近似估计的Hessian矩阵

surf算法的源代码python surf算法详解_surf算法的源代码python_19

高斯函数的高阶微分与离散的图像函数

surf算法的源代码python surf算法详解_特征点_20

做卷积运算时相当于使用高斯滤波模板对图像做滤波处理

其行列式为

surf算法的源代码python surf算法详解_surf算法的源代码python_21

 

1.定义

a.图像中某个像素点Hessian矩阵

surf算法的源代码python surf算法详解_尺度空间_22

即每一个像素点都可以求出一个Hessian矩阵。

其行列式为:

 

b.图像的Hessian矩阵

由于我们的特征点需要具备尺度无关性,所以在进行Hessian矩阵构造前,需要对其进行高斯滤波。这样,经过滤波后在进行Hessian的计算

surf算法的源代码python surf算法详解_尺度空间_23

其中

surf算法的源代码python surf算法详解_特征点_24

表示

surf算法的源代码python surf算法详解_尺度空间_25

图像函数与高斯函数二阶微分(

surf算法的源代码python surf算法详解_尺度空间_26

)在像素点

surf算法的源代码python surf算法详解_积分图_27

处的卷积。

surf算法的源代码python surf算法详解_尺度空间_28


surf算法的源代码python surf算法详解_尺度空间_29

也类似这么定义

 

 

c.盒子滤波器

高斯函数的高阶微分与离散的图像函数

surf算法的源代码python surf算法详解_surf算法的源代码python_30

做卷积运算时相当于使用高斯滤波模板对图像做滤波处理。在实际运用中,高斯二阶微分进行离散化和裁剪处理得到盒子滤波器近似代替高斯滤波板进行卷积计算

 

surf算法的源代码python surf算法详解_特征点_31

网格中渐变的颜色深度代表高斯滤波模板中不同的权重系数。某一尺寸的高斯滤波模板经过离散化和裁剪生成的盒子滤波器包括

surf算法的源代码python surf算法详解_尺度空间_32

三个方向。对高斯高阶微分函数进行离散化处理的同时也将滤波模板的各部分的滤波权重进行简化,所以系数都是

surf算法的源代码python surf算法详解_surf算法的源代码python_33

集合中的元素

 

三.尺度空间的构造

上述工作是通过模板卷积求二阶偏导数得到H矩阵,接下来要通过H矩阵构建尺度空间。

a.SIFT尺度空间

在SIFT中,尺度空间是用金字塔模型对图像滤波缩放得到的。SIFT算法首先对一幅图片进行下采样得到若干图像,每次下采样得到的图片作为每一组的原始图像。为了保证图像金字塔的连续性,对每组的原始图像以不同的

surf算法的源代码python surf算法详解_特征点_34

进行高斯滤波,金字塔每组中又得到若干滤波后的图像。

这样得到的图像金字塔分为若干组(Octave),同时每组又有若干层(Layer)图片组成。显然,图像金字塔的计算量会随着金字塔组数和层数的增加而变大。

surf算法的源代码python surf算法详解_积分图_35

b.SURF尺度空间

1.相同点

SURF算法的尺度空间同样由若干组(Octave)构成,每一组中包含若干层(Level)。

2.不同点

组:

SURF算法中不会对图片进行下采样。SURF算法先从

surf算法的源代码python surf算法详解_尺度空间_36

尺寸的盒子滤波器开始,对盒子滤波器的尺寸进行扩展,

surf算法的源代码python surf算法详解_积分图_37

尺寸的盒子滤波器是

surf算法的源代码python surf算法详解_特征点_38

为1.2时的高斯二阶微分函数经过离散和减裁后的滤波模板。在SURF中,我们保持图像不变,仅仅改变高斯滤波窗口的大小来获得不同尺度的图像,即构成了尺度空间。

surf算法的源代码python surf算法详解_尺度空间_39

层:

每一层对应的

surf算法的源代码python surf算法详解_尺度空间_40

与滤波模板尺寸之间的关系式为

surf算法的源代码python surf算法详解_特征点_41

。Bay建议将尺度空间分为四组,每组中包括四层。

surf算法的源代码python surf算法详解_特征点_42

为了保持尺度空间的连续性,SURF算法尺度空间相邻组中有部分层重叠,同时每组中的盒子滤波器的尺寸都是逐渐增大的。

c.Hessian行列式图像的产生过程

在SURF算法的尺度空间中,每一组中任意一层包括

surf算法的源代码python surf算法详解_surf算法的源代码python_43

三种盒子滤波器。对一幅输入图像进行滤波后通过Hessian行列式计算公式可以得到对于尺度坐标下的Hessian行列式的值,所有Hessian行列式值构成一幅Hessian行列式图像。

surf算法的源代码python surf算法详解_积分图_44

一幅灰度图像经过尺度空间中不同尺寸盒子滤波器的滤波处理,可以生成多幅Hessian行列式图像,从而构成了图像金字塔。

 

四.特征点精确定位

a.非极大值抑制过程

在每一组中选取相邻的三层Hessian行列式图像,对于中间层的每一个Hessian行列式值都可以做为待比较的点,在空间中选取该点周围的26个点进行比较大小,若该点大于其他26个点,则该点为特征点。从上诉过程可以知道,当尺度空间每组由四层构成时,非极大值抑制只会在中间两层进行,相邻的组之间不进行比较。

 

b.设定Hessian行列式的阀值

低于Hessian行列式阀值的点不能作为最终的特征点。在实际选择阀值时,根据实际应用中对特征点数量和精确度的要求改变阀值。阀值越大,得到的特征点的鲁棒性越好。在处理场景简单的图像时,其阀值可以适当的调低。在复杂的图像中,图像经旋转或者模糊后特征点变化的数量较大,测试需要适当提高阀值。

 

五.主方向计算

为了使特征具备较好的旋转不变性,需分配给每个特征点一个主方向。在SURF中,主方向是对以特征点为中心的6倍特征尺度为半径的圆形区域内的Haar小波响应做统计运算得到的。

a.兴趣点方向的确定

首先赋予每一个兴趣点方向特征。我们以某个兴趣点为圆心,以6S(S为该兴趣点对应的尺度)为半径的圆形领域里,用尺寸为4S的Haar小波模板对图像进行处理,求x,y两个方向的Haar小波响应。

Haar小波的模板如图所示,

surf算法的源代码python surf算法详解_特征点_45

其中左侧模板计算X方向的响应,右侧模板计算y方向的响应,黑色表示-1,白色表示+1。用其对圆形领域进行处理后,就得到了该领域内每个点对应的x,y方向的响应,然后用以兴趣点为中心的高斯函数(

surf算法的源代码python surf算法详解_尺度空间_46

)对这些响应进行加权

在这个圆形领域内做一个60度的扇形区域,统计这个扇形区域内的haar小波特征总和,然后转动扇形区域,再统计小波特征总和。小波特征总和最大的方向为主方向。

surf算法的源代码python surf算法详解_尺度空间_47

b. 构建描述子向量

1. SIFT算法

在SIFT中关键点描述是选取了关键点周围

surf算法的源代码python surf算法详解_surf算法的源代码python_48

的领域,又将其划分为

surf算法的源代码python surf算法详解_尺度空间_49

的区域,每个区域统计8个方向梯度,最后得到

surf算法的源代码python surf算法详解_尺度空间_50

维度的描述向量。

2.SURF算法

在SURF中,我们在关键点周围选取一个正方形框,方向为关键点的主方向,边长为20S。将其划分为16个区域(边长为5S),每个区域统计25个像素的水平方向和垂直方向的Haar小波特性(均相对于正方形框的主方向确定的)

 

surf算法的源代码python surf算法详解_特征点_51

该小波特征包括水平方向值之和,水平方向绝对值之和,垂直方向值之和和垂直方向绝对值之和(为了把强度变化的极性信息也包括描述符中,所以对绝对值进行累加)。这样每个区域有4个值,则每个正方形框有

surf算法的源代码python surf算法详解_积分图_52

维,即每个关键点描述是64维,比SIFT描述少了一半

 

六.SURF算法与SIFT算法总结对比

(1)在生成尺度空间方面,SIFT算法利用的是差分高斯金字塔与不同层级的空间图像相互卷积生成。SURF算法采用的是不同尺度的box filters与原图像卷积

(2)在特征点检验时,SIFT算子是先对图像进行非极大值抑制,再去除对比度较低的点。然后通过Hessian矩阵去除边缘的点。

而SURF算法是先通过Hessian矩阵来检测候选特征点,然后再对非极大值的点进行抑制

(3)在特征向量的方向确定上,SIFT算法是在正方形区域内统计梯度的幅值的直方图,找到最大梯度幅值所对应的方向。SIFT算子确定的特征点可以有一个或一个以上方向,其中包括一个主方向与多个辅方向。

SURF算法则是在圆形邻域内,检测各个扇形范围内水平、垂直方向上的Haar小波响应,找到模值最大的扇形指向,且该算法的方向只有一个。

(4)SIFT算法生成描述子时,是将

surf算法的源代码python surf算法详解_surf算法的源代码python_53

的采样点划分为

surf算法的源代码python surf算法详解_surf算法的源代码python_54

的区域,从而计算每个分区种子点的幅值并确定其方向,共计

surf算法的源代码python surf算法详解_积分图_55

维。SURF算法在生成特征描述子时将

surf算法的源代码python surf算法详解_积分图_56

的正方形分割成

surf算法的源代码python surf算法详解_尺度空间_57

的小方格,每个子区域25个采样点,计算小波haar响应

surf算法的源代码python surf算法详解_积分图_58

,一共

surf算法的源代码python surf算法详解_尺度空间_59

维。

综上,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.