surf算法详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SURF学习笔记

Speed-Up Robust Features(SURF)

SURF 是一种尺度,旋转不变的detector和descriptor.最大的特点是快!在快的基础上保证性能(repeatability,distinctiveness 和robustness)。

SURF采用有效策略的主要有:1)积分图(用于对图像卷积)2)detector是基于Hessian矩阵,descriptor是基于分布的

下面是SURF算法的具体实现:

1.兴趣点检测

SURF 对于兴趣点的检测是基于最基本的Hessian近似矩阵。

1.1积分图像

(由于不会在这里编辑公式,直接截图了)

PS:这里加一点自己的一点个人理解:关于矩形区域内像素点的求和应该是一种简单重复性运算,采用这种思路总体上提高了效率。为什么这么说呢?假设一幅图片共有n个像素点,则计算n个位置的积分图总共的加法运算有n-1次(注意:可不是

次哦,要充分利用递推思想),将这些结果保存在一个跟原图对应的矩阵M中。当需要计算图像中某个矩形区域内的所有像素之和是直接像查表一样,调出A,B,C,D四点的积分图值,简单的加减法(注意只需要三次哦)即可得到结果。反之,如果采用naive的方式直接在原图像

中的某个矩形区域内求和,你想想,总共可能的矩形组合有多少?!!且对于一幅图像n那是相当大啊,所以2^n

那可是天文数字,而且这里面绝大部分的矩形有重叠,重叠意味着什么?在算求和的时候有重复性的工作,其实我们是可以有效的利用已经计算过的信息的。这就是积分图法的内在思想:它实际上是先计算n个互不重叠(专业点说是不相交)的矩形区域内的像素点求和,充分利用这些值(已有值)计算未知值,有点类似递推的味道...这就完全避免了重复求和运算。

1.2 用于检测兴趣点的Hessian矩阵

作者Herbert Bay利用Hessian矩阵来检测兴趣点,具体是用Hessian矩阵行列式的最大值标记斑状结构(blob-like structure)的位置。同时,行列式值也作为尺度选择的依据,这里,作者是参考了Lindeberg的做法('Feature detection with automatic scale selection'我还没有拜读原文!!)。

说一下Hessian矩阵的定义:

中得到启发,采用了盒子型滤波器(box filter)对上面的滤波器进行近似。盒子型滤波器见图1.3.

补充一点:filter的响应还要根据filter的大小做一个归一化。这样做就可以保证对于任意大小的filter其F范数是统一的(这对于尺度不变性是有必要的)。

有了前面的着一些准备工作,就可以对一幅图像I计算每个点的近似Hessian矩阵的行列式值,将这些值存储,备用!

1.3尺度空间表示

算法的尺度不变性主要靠不同尺度下寻找感兴趣点。谈到不同尺度就不得不说‘金字塔’。Lowe在其SIFT大作中是这样构造尺度空间的:对原图像不断地进行Gauss平滑+降采样。得到金字塔图像后,有进一步得到了DoG图,边和斑状结构就是通过DoG图得到其在原图的位置。

SURF中的做法与SIFT是有所不同的。SIFT算法在构造金字塔图层时Gauss滤波器大小

不变,改变的是图像的大小;而SURF则恰恰相反:图像大小保持不变,改变的是滤波器的大小。

PS:之所以这么做的目的考虑的主要目的还是效率问题(这样可以利用积分图有关的快速计算,用不同size的Mask进行卷积运算,复杂度是一样的,仅仅是三个加减法而已)。而且,由于没有对图像进行降采样,所以不存在混叠现象。

与SIFT类似,SURF的尺度空间也是按组(Octaves)划分的。每一个Octave里是对输入图像用size不断增加的filter进行滤波后得到的一系列响应。总的来说,一组包含了一个缩放因子2()。每一组内的层数是一个常量。由于积分图像的离散特性(不懂),两个连续尺度间的最小尺度差分取决于二阶偏导在导数方向(x或y)上正的或负的波瓣(即不同的颜色块,见Fig.1.5)长度L0,实际中,L0设为filter边长的1/3。例如,对于9*9的filter,L0值为3.对于连续的level,采用的filter的size大小增加的最小量是2,以保证filter的边长始终是奇数,(奇数可以保证filter有中心点)。这样使得Mask以6个像素为单位进行扩充。

以图1.5,1.6为例对上面的叙述做一解释:图1.5左边是9*9大小y方向的二阶偏导计

算模板。Y方向共有3个波瓣(两正(白的),一负(黑的)),则的值即任意一个波瓣的宽度。右边是对每个波瓣各扩充2个像素后的filter,注意先是对波瓣扩充,即先扩宽,扩完后置于长怎么办,还没有搞懂.....貌似整体上最外的边(灰色的)是扩两个像素。

Fig.1.6

对于Fig.1.6左边是x-y方向的大小为9*9的filter,每个对角方向各有两个波瓣(2个黑的,2个白的),对波瓣扩两个像素,得到右边的filter。

尺度空间的构造具体对于第一组(Octave)而言开始所用的是大小为9*9的filter(最小的scale),接下来的filter大小依次为15*15,21*21,27*27,采用这些模板可以达到多于两个像素的尺度变化。作者说这么做是有必要的,原因是要对空域和相邻的尺度附近进行一个三维的非极大值抑制。(什么是非极大值抑制呢?字面意思:不是极大值就抑制。非极大值抑制通常用于边缘检测中边的进一步精简。举个简单例子,如果要从一些边缘中进一步提出水平边缘,那么就这么做:逐个检测边缘图中在水平方向的梯度值,如果不是局部极大值(非极大值),则就把该梯度值置0(抑制))。

由于要采用三维的非极大值抑制,那么Hessian响应图的首尾两个实际上是不包含极值信息的(这里跟SIFT算法里每一Octave里尽管有层,实际上只能利用中间的7层是一个

道理)。因此,经过内插后(后面会讲到),可能的最小的尺度应该是,

相关文档
最新文档