Surf特征提取分析

Surf
Hessian
SIFT

读“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矩阵表征二阶梯度。

高斯二阶梯度到近似的二阶梯度算子如下图

1474701327495.jpg

从左到右分别表示在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在建塔的时候每层图像大小不变,只是对模板的尺度不断增大,相当于一个上采样的过程。

1474704408299.jpg

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

1474705392249.jpg

size大小和对应LoG尺度可以如下换算

尺度空间生成之后就开始进行定位关键点了。

关键点定位

这里和LoG,DoG相同,都是在生成尺度空间后,找在三维上找极值点。

1474706156407.jpg

这里和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),将该区域每个样本点这两个响应的高斯加权和作为该区域的方向,最后扫面了整个圆形区域,选择最大方向就是该关键点的方向。

使用的haar小波算子.jpg

分区域统计方向.jpg

ok,接下来就该描述关键点了

surf特征描述子

和sift类似,这时候为了保持旋转不变性,当然要将关键点的方向旋转一致之后再统计特征。

统计特征时,再该关键点周围选取的区域,划分成的子区域,在每个子区域内使用x方向,y方向的的haar小波特征算子提取haar小波特征,然后使用提取结果统计四个值作为该子区域的特征,那么一个关键点就可以使用16个子区域的特征联合表示,即64维向量。

子区域特征提取.jpg

部分实验结果

关键点检测

1474708745838.jpg

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

1474708128266.jpg

图像的配准

1474708804017.jpg

1474708821848.jpg


参考文献
1. tornadomeet,特征点检测学习_2(surf算法),博客园,2012,8
2. Speeded up robust features(wiki百科)

转载于:https://www.cnblogs.com/YiXiaoZhou/p/5903690.html

Surf特征提取分析相关推荐

  1. SURF特征提取分析(一)

    背景引言 计算机视觉中,引入尺度不变的特征,主要的思想是每个检测到的特征点都伴随着对应的尺寸因子.当我们想匹配不同图像时,经常会遇到图像尺度不同的问题,不同图像中特征点的距离变得不同,物体变成不同的尺 ...

  2. SURF特征提取算法详解

    上一节我们已经介绍了SIFT算法,SIFT算法对旋转.尺度缩放.亮度变化等保持不变性,对视角变换.仿射变化.噪声也保持一定程度的稳定性,是一种非常优秀的局部特征描述算法.但是其实时性相对不高. SUR ...

  3. [转]SIFT特征提取分析

    SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points) ...

  4. OpenCV | OpenCV:sift,SURF 特征提取

    一.环境准备 目前 Opencv 有2.x 和 3.x 版本,两个版本之间的差异主要是一些功能函数被放置到了不同的功能模块,因此大多数情况两个版本的代码并不能通用.建议安装 Anaconda,自行下载 ...

  5. SIFT特征提取分析

    SIFT特征提取分析 SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or cor ...

  6. OpenCV Using Python——基于SURF特征提取和金字塔LK光流法的单目视觉三维重建 (光流、场景流)...

    https://blog.csdn.net/shadow_guo/article/details/44312691 基于SURF特征提取和金字塔LK光流法的单目视觉三维重建 1. 单目视觉三维重建问题 ...

  7. 第十三节、SURF特征提取算法

    上一节我们已经介绍了SIFT算法,SIFT算法对旋转.尺度缩放.亮度变化等保持不变性,对视角变换.仿射变化.噪声也保持一定程度的稳定性,是一种非常优秀的局部特征描述算法.但是其实时性相对不高. SUR ...

  8. 图像特征提取(三)——SURF特征提取算法详解

    本文大量参考了:http://blog.csdn.net/cxp2205455256/article/details/41311013;并且在此博客的基础之上,增加了一些新的内容. 一.SURF算法的 ...

  9. 基于SURF特征提取的图像配准算法的matlab仿真

    目录 1.算法概述 2.仿真效果 3.MATLAB仿真源码 1.算法概述 SURF,全称Speeded-up Robust Feature,是SIFT算法的改进版和加速版,综合性能更优.由Herber ...

最新文章

  1. 光伏电价断崖式下跌 企业遭遇成长烦恼
  2. python函数拟合不规则曲线_python中的多变量(多项式)最佳拟合曲线?
  3. 独家 | 利用AI进行高精度图像编辑︰EditGAN(附链接)
  4. 访问tomcat html,访问云服务器tomcat里html界面
  5. php 跨区域,如何构造PHP的内容包括在非安全(http://)和安全(https://)区域以及跨多个目录使用?...
  6. 如何用FineReport制作一张报表(二)
  7. chrome 不记录填写值_使用 chrome-devtools Memory 面板
  8. java 阻塞队列 BQ_阻塞队列 BlockingQueue的使用(二)
  9. 新下载的工程,启动tomcat出现识别文件失败的现象。No qualifying bean of type 'com.kanq.platform.cert.mapper.CertificateSjdr
  10. Web接入QQ登陆简单入门操作
  11. 遥感学习笔记:遥感数据源免费数据获取途径
  12. 电脑进入安全模式的两种方法
  13. 软件测试常用的性能测试指标,7个常用的网络性能测试指标
  14. 什么打印软件比较好用?可以打印资料的网上打印平台
  15. Altium Designer 2020 PCB 插入图片logo的方法
  16. Pod控制器-ReplicaSet(RS)
  17. RAID管理工具 -- MegaCli常用命令
  18. 怎么能看出来一个人善不善良?
  19. 搜索问题之状态空间搜索(状态压缩+记忆化搜索+ BFS)
  20. PPT也能像PS一样抠图,你知道吗

热门文章

  1. android开发学习之路——连连看之游戏逻辑(五)
  2. dotnet core 数据库
  3. BZOJ 2427 软件安装(强连通分量+树形背包)
  4. smb(ms17-010)远程命令执行之msf
  5. IOS 本地推送 IOS10.0以上 static的作用 const的作用
  6. linux学习网站分享
  7. 安卓学习第37课——DatePickerDialog、TimePickerDialog
  8. android学习日记16--GridView(网格视图)
  9. 原来还有这样一个东西,重来不知道过-linux ,ulimit
  10. 【51nod】1239 欧拉函数之和 杜教筛