Surf特征提取分析
Surf特征提取分析
读“H.Bay, T. Tuytelaars, L. V. Gool, SURF:Speed Up Robust Features[J],ECCV,2006”笔记
SURF:Speed Up Robust Features,加速鲁棒特征。
我觉得SURF是SIFT特征的一种近似计算,在相似性能甚至更好性能的同时提高了算法的速度。这些近似体现在
在尺度空间中,使用box filtes与原图像卷积,而不是使用DoG算子
确定关键点方向时,Surf是利用不同方向bin中的haar小波响应的最大值最为方向,而Sift是统计周围区域像素点的方向直方图,找出最大方向bin作为主方向,而且还可以有多个方向。
特征描述子,Surf在关键点周围取
区域分成44块小区域,在每个小区域计算采样点的haar响应,统计对应的四个特征
,共64维特征,而Sift在周围1616的区域划分成4*4的子区域,每一个子区域提取长度为8的方向直方图特征,排列起来形成128维特征向量。
为什么速度会提升呢?这里要明白一点,DoG算子分开两步其实是先高斯平滑再差分。
使用box filters相对于高斯滤波,再辅助以积分图速度肯定提升不少。
Hessian矩阵的计算一般而言还是挺麻烦的,但这里可以使用积分图计算,无论尺度是多少都可以使用几个数的加减完成,速度很快。
确定关键点方向时使用haar特征同样可以利用积分图,简单快速。
特征描述子使用64维取代128维特征降低了后续处理的数据规模
接下来就来一步步分析surf特征吧
Fast-Hessian Detector 尺度空间生成
这一步其实相当于LoG算子。
在LoG中首先使用高斯平滑,然后对平滑后的图形进行Laplace获得二阶梯度特征。
而Fast-Hessian Detector则是首先使用box filter滤波,然后使用Hessian矩阵表征二阶梯度。
高斯二阶梯度到近似的二阶梯度算子如下图

从左到右分别表示在y方向LoG算子(
),xy方向的LoG算子
,y方向近似的LoG算子
,xy方向近似的LoG算子
Hessian矩阵能够刻画二维曲面上点的不同方向变化剧烈程度,这里可以参见角点检测,只有当Hessian矩阵的两个特征值均远大于0时才认为该点是角点。行列式是特征值的乘积。
Hessian矩阵的计算

那么使用上图的类似算子,就可以表示成

但是近似毕竟是近似,这里近似一点,那里近似一点,累积的方差就大了,所以在计算hessian矩阵行列式时进行了修正

1.2是LoG的尺度,9是box filter的边长,自己可以算一算
于是

其中D是近似的Hessian矩阵。
这个式子是怎么来的呢?很难理解对不对,我们来推一推,目的是要
设
,于是

是不是发现问题了,在上面算0.9时我们
替换成
时仍然成立,所以就得到了计算行列式的近似式。
论文中指出surf初始size是
,这么大区域平滑的效果等同于尺度为
的高斯平滑。
同样的surf中也会建塔,但是和sift不同的是,sift在尺度增大的同时,不断对图像下采样,而surf在建塔的时候每层图像大小不变,只是对模板的尺度不断增大,相当于一个上采样的过程。

论文中第一塔中size分别为
,而以后每塔中size边长差距逐塔翻倍。
如下图

size大小和对应LoG尺度可以如下换算
尺度空间生成之后就开始进行定位关键点了。
关键点定位
这里和LoG,DoG相同,都是在生成尺度空间后,找在三维上找极值点。

这里和DoG不同的是不用剔除边缘导致的极值点了,因为Hessian矩阵的行列式就已经考虑到边缘的问题了,而DoG计算只是把不同方向变化趋势给出来,后续还需要使用Hessian矩阵的特征值剔除边缘产生的影响。
在定位关键点时,要使用3维线性插值的方法得到亚像素级的坐标位置。
Scale space interpolation is especially important in our case, as the difference in scale between the first layers of every octave is relatively large.
这样关键点也找到了,下一步为了旋转不变性就该确定关键点方向了
关键点方向
不像sift中依靠梯度方向直方图确定主方向,Surf首先将周围`!$6s$的圆形区域分成6个扇形区间,s是对应的尺度,和size的换算方法,上文给出了。然后在每个扇形区域使用提取x方向和y方向的Haar小波特征(Haar小波的边长为4s),将该区域每个样本点这两个响应的高斯加权和作为该区域的方向,最后扫面了整个圆形区域,选择最大方向就是该关键点的方向。


ok,接下来就该描述关键点了
surf特征描述子
和sift类似,这时候为了保持旋转不变性,当然要将关键点的方向旋转一致之后再统计特征。
统计特征时,再该关键点周围选取
的区域,划分成
的子区域,在每个子区域内使用x方向,y方向的的haar小波特征算子提取haar小波特征,然后使用提取结果统计
四个值作为该子区域的特征,那么一个关键点就可以使用16个子区域的特征联合表示,即64维向量。

部分实验结果
关键点检测

匹配结果图,这两幅图中相似的要素其实蛮多的,这使匹配的效果并不理想

图像的配准


参考文献
1. tornadomeet,特征点检测学习_2(surf算法),博客园,2012,8
2. Speeded up robust features(wiki百科)
Surf特征提取分析的更多相关文章
- SIFT特征提取分析
SIFT特征提取分析 sift 关键点,关键点检测 读'D. G. Lowe. Distinctive Image Features from Scale-Invariant Keypoints[J] ...
- [转]SIFT特征提取分析
SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points) ...
- OpenCV Using Python——基于SURF特征提取和金字塔LK光流法的单目视觉三维重建 (光流、场景流)
https://blog.csdn.net/shadow_guo/article/details/44312691 基于SURF特征提取和金字塔LK光流法的单目视觉三维重建 1. 单目视觉三维重建问题 ...
- 第十三节、SURF特征提取算法
上一节我们已经介绍了SIFT算法,SIFT算法对旋转.尺度缩放.亮度变化等保持不变性,对视角变换.仿射变化.噪声也保持一定程度的稳定性,是一种非常优秀的局部特征描述算法.但是其实时性相对不高. SUR ...
- HOG特征提取分析(转)
背景引言 方向梯度直方图(Histogram of Oriented Gradient,HOG)是用于在计算机视觉和图像处理领域,目标检测的特征描述子.该项技术是用来计算图像局部出现的方向梯度次数或信 ...
- OpenCV245之SURF源代码分析
一.fastHessianDetector函数分析 (1)參数 const Mat& sum 积分图片 const Mat& mask_sum vecto ...
- SIFT特征提取分析(转载)
转载自: http://blog.csdn.net/abcjennifer/article/details/7639681 SIFT(Scale-invariant feature transform ...
- 图像局部显著性—点特征(SURF)
1999年的SIFT(ICCV 1999,并改进发表于IJCV 2004,本文描述):参考描述:图像特征点描述. 参考原文:SURF特征提取分析 本文有大量删除,如有疑义,请参考原文. SURF对SI ...
- python opencv3 特征提取与描述 DoG SIFT hessian surf
git:https://github.com/linyi0604/Computer-Vision DoG和SIFT特征提取与描述 # coding:utf-8 import cv2 # 读取图片 im ...
随机推荐
- python基础——第三方模块
python基础——第三方模块 在Python中,安装第三方模块,是通过包管理工具pip完成的. 如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了. 如果你正在使用Window ...
- python基础——filter函数
python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...
- ios 多线程小结----- GCD篇
//3 GCD(充分利用设备的多盒)-------------屏蔽了线程,只能看见任务 队列步骤两步,定制任务,将任务添加到队列.GCD将添加的任务,放到线程中去执行,自动执行,自动释放原则:先进先出 ...
- Hibernate的ORM原理和实现
>>Hibernate和ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样 ...
- C#调用ArcGIS REST服务
ArcGIS REST API提供了简单.开放的接口来访问和使用ArcGIS Server发布的服务.使用ArcGIS REST API通过URL可以获取和操作每一个服务中的所有资源和操作. 1.使用 ...
- SQL Server创建随机测试数据
我们在做数据仓库开发的过程中,经常需要插入大量的测试数据来测试数据库查询性能和计算占用的存储空间等.本文主要介绍下不借用第三方的工具在数据库中直接生成大量的测试数据. 需求 每一行包含5个日期字段和一 ...
- 跨平台C的IDE
1.JetBrains的新跨平台C++ IDE,CLion已经开始EAP了,不过这货是收费的 http://confluence.jetbrains.com/display/CLION/Early+A ...
- Centos6.5里安装Hbase(伪分布式)
首先我们到官方网站下载Hbase,而我使用的版本是hbase-0.94.27.tar.gz 解压下来: tar zxvf hbase-.tar.gz 寻找java安装路径 [root@localhos ...
- php 以图搜图
感知哈希算法count < =5 匹配最相似count > 10 两张不同的图片var_dump(ImageHash::run('1.jpg’, '2.jpg’)); <?php c ...
- ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statemen
转自:http://www.cnblogs.com/iosdev/archive/2013/07/15/3190431.html mysql 配置文件目录:/etc/my.cnf root 密码为空的 ...