Speeded Up Robust Features(SURF,加速稳健特征),是一种稳健的局部特征点检测和描述算法。最初由Herbert Bay发表在2006年的欧洲计算机视觉国际会议(Europen Conference on Computer Vision,ECCV)上,并在2008年正式发表在Computer Vision and Image Understanding期刊上。

Surf是对David Lowe在1999年提出的Sift算法的改进,提升了算法的执行效率,为算法在实时计算机视觉系统中应用提供了可能。与Sift算法一样,Surf算法的基本路程可以分为三大部分:局部特征点的提取、特征点的描述、特征点的匹配。

但Surf在执行效率上有两大制胜法宝——一个是积分图在Hessian(黑塞矩阵)上的使用,一个是降维的特征描述子的使用。了解这两大法宝是如何出奇制胜前,先回顾一下传统Sift算法的基本思路及其优缺点。

Sift是一种基于尺度空间的,对图像缩放、旋转、甚至仿射变换保持不变性的图像局部特征描述算子。

一、特征点提取

Sift的特征点是在DOG金字塔尺度空间中提取的,尺度空间的构建涉及到高斯卷积、图像下采样和高斯差分操作。在尺度空间中先初步提取出在尺度空间和二维图像空间上都是局部极值点的兴趣点,再滤除掉能量低的不稳定的和错误的兴趣点,得到最终稳定的特征点。

二、特征点描述

特征点描述包括特征点方向分配和128维向量描述两个步骤。

特征的的方向分配:Sift求取特征点周围邻域内所有像素的梯度方向,生成梯度方向直方图,并归一化为0~360°的梯度方向直方图到36个方向内,取梯度直方图的主要分量所代表的方向作为特征点的方向。

128维向量描述:这个仍然是基于梯度方向直方图展开的,去特征点周围邻域4*4个快,每块提取出8个梯度方向,共计128个方向作为特征的描述子。

三、特征点的匹配

特征点的匹配是通过计算两组特征点的128维的特征点的欧氏距离实现的。欧氏距离越小,则相似度越高,当欧式距离小于设定阈值时,可以判定为匹配成功。

Sift算法的优点是特征稳定,对旋转、尺度变换、亮度保持不变性,对视角变换、噪声也有一定程度的稳定性;缺点是实时性不高,并且对于边缘光滑目标的特征点提取能力较弱。

Surf改进了特征的提取和描述方式,用一种更为高效的方式完成特征的提取和描述,具体实现流程如下:

1. 构建Hessian(黑塞矩阵),生成所有的兴趣点,用于特征的提取;

2. 构建尺度空间

3. 特征点定位

4. 特征点主方向分配

5. 生成特征点描述子

6. 特征点匹配

1. 构建Hessian(黑塞矩阵),生成所有的兴趣点,用于特征的提取;

构建Hessian矩阵的目的是为了生成图像稳定的边缘点(突变点),跟Canny、拉普拉斯边缘检测的作用类似(个人立即,欢迎拍砖),为下文的特征提取做好基础。构建Hessian矩阵的过程对应于Sift算法中的高斯卷积过程。

黑塞矩阵(Hessian Matrix)是一个多元函数的二阶偏导数构成的方阵,描述了函数的局部曲率。由德国数学家Ludwin Otto Hessian于19世纪提出。

对一个图像f(x,y),其Hessian矩阵如下:

在构造Hessian矩阵前需要对图像进行高斯滤波,经过滤波后的Hessian矩阵表述为:

当Hessian矩阵的判别式取得局部极大值时,判定当前点是比周围邻域内其他点更亮或更暗的点,由此来定位关键点的位置。

我们知道在离散数字图像中,一阶导数是相邻像素的灰度差:

二阶导数是对一阶导数的再次求导:

反过来看Hessian矩阵的判别式,其实就是当前点对瓶方向二阶偏导乘以垂直方向的二阶偏导再减去当前点水平、垂直二阶偏导的二次方:

Hessian矩阵判别式中的f(x,y)是原始图像的高斯卷积,由于高斯核实服从正态分布的,从中心点往外,系数越来越低,为了提高运算速度,Surf使用了盒式滤波器来近似替代高斯滤波器,所以在Dxy上乘了一个加权系数0.9,目的是为了平衡因使用盒式滤波器近似所带来的误差:

高斯滤波器和盒式滤波器的示意图如下:

上边两幅图是9*9高斯滤波器模板分别在图像上垂直方向上二阶导数Dyy和Dxy对应的值,下边两幅图是使用盒式滤波器对其近似,灰色部分的像素值为0,黑色为-2,白色为1。

那么为什么盒式滤波器可以提高运算速度呢,这就涉及到积分图的使用。盒式滤波器对图像的滤波转化成计算图像上不同区域间像素和的加减运算问题,这正是积分图的强项,只需要简单几次查找积分图就可以完成。

2. 构建尺度空间

同Sift一样,Surf的尺度空间也是由O组L成组成,不同的是,Sift中下一组图像的尺寸是上一组的一半,同一组间图像尺寸一样,但是所使用的高斯模糊系数逐渐增大;而在Surf中,不同组间图像的尺寸都是一致的,不同的是不同组间使用的盒式滤波器的模板尺寸逐渐增大,同一组间不同层间使用相同尺寸的滤波器,但是滤波器的模糊系数逐渐增大,如下图所示:

3. 特征点定位

特征点的定位过程Surf和Sift保持一致,将经过Hessian矩阵处理的每个像素点与二维图像空间和尺度空间邻域内的26个点进行比较,初步定位出关键点,再经过滤除能量比较弱的关键点以及错误定位的关键点,筛选出最终的稳定的特征点。

4. 特征点主方向分配

Sift特征点方向分配是采用在特征点邻域内统计其梯度直方图,取直方图bin值最大的以及超过最大bin值80%的那些方向作为特征点的主方向。而在Surf中,采用的是统计特征点圆形邻域内的harr小波特征。即在特征点的圆形邻域内,统计60度扇形内所有点的水平、垂直harr小波特征总和,然后扇形以0.2弧度大小的间隔进行旋转并再次统计该区域内harr小波特征值之后,最后将值最大的那个扇形的方向作为该特征点的主方向。该过程示意图如下:

5. 生成特征点描述子

在Sift中,是取特征点周围4*4个区域块,统计每小块内8个梯度方向,用着4*4*8=128维向量作为Sift特征的描述子。

Surf算法中,也是在特征点周围取一个4*4的矩形区域块,但是所取得矩形区域方向是沿着特征点的主方向。每个子区域统计25个像素的水平方向和垂直方向的haar小波特征,这里的水平和垂直方向都是相对主方向而言的。该haar小波特征为水平方向值之后、垂直方向值之后、水平方向绝对值之后以及垂直方向绝对值之和4个方向。该过程示意图如下:

把这4个值作为每个子块区域的特征向量,所以一共有4*4*4=64维向量作为Surf特征的描述子,比Sift特征的描述子减少了2倍。

6. 特征点匹配

与Sift特征点匹配类似,Surf也是通过计算两个特征点间的欧式距离来确定匹配度,欧氏距离越短,代表两个特征点的匹配度越好。不同的是Surf还加入了Hessian矩阵迹的判断,如果两个特征点的矩阵迹正负号相同,代表这两个特征具有相同方向上的对比度变化,如果不同,说明这两个特征点的对比度变化方向是相反的,即使欧氏距离为0,页直接予以排除。

匹配结果:

参考资料:  SURF算法分析

Surf算法特征点检测与匹配相关推荐

  1. 图像特征点检测与匹配评价准则——量化

    欢迎转载,转载请注明出处,谢谢! 目前图像匹配中,局部特征匹配占据了绝大部分,常用的局部特征匹配方法有Harris.SIFT.SURF.ORB等等,不同的特征点检测和匹配方法尤其独特的优势和不足:  ...

  2. 图像特征点检测与匹配评价——量化指标

    原文:http://blog.csdn.net/cgwang_1580/article/details/68944319 目前图像匹配中,局部特征匹配占据了绝大部分,常用的局部特征匹配方法有Harri ...

  3. 系统性综述:特征点检测与匹配

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨梦寐mayshine@知乎(已授权) 来源丨https://zhuanlan.zhihu.com ...

  4. 基于图像的三维重建——特征点检测与匹配(2)

    文章目录 前言 一.特征点检测 二阶的拉普拉斯高斯边缘提取算法(LOG) 尺度不变特征变换算法(SIFT) 加速稳健特征算法(SURF) Harris角点特征提取算子 加速分割测试特征提取(FAST) ...

  5. 十.OpenCv 特征点检测和匹配

    特征点检测和匹配 1. 特征检测的基本概念 特征检测是计算机视觉和图像处理中的一个概念.它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征.特征检测的结果是把图像上的点分为不同的子集 ...

  6. 【OpenCV学习】(十)特征点检测与匹配

    [OpenCV学习](十)特征点检测与匹配 背景 提取图像的特征点是图像领域中的关键任务,不管在传统还是在深度学习的领域中,特征代表着图像的信息,对于分类.检测任务都是至关重要的: 特征点应用的一些场 ...

  7. 【阅读文献】单目视觉SLAM方法综述【2】~特征的检测与匹配

    2.1 特征的检测与匹配 SLAM系统中,是以环境中的路标点为基础的. 单目视觉系统无法从单帧图像恢复深度.如何 利用图像特征检测与匹配获得高质量的路标,关系到单目视觉SLAM的鲁棒性. 图像特征可分 ...

  8. opencv学习笔记三十六:AKAZE特征点检测与匹配

    KAZE是日语音译过来的 , KAZE与SIFT.SURF最大的区别在于构造尺度空间,KAZE是利用非线性方式构造,得到的关键点也就更准确(尺度不变性 ): Hessian矩阵特征点检测 ,方向指定, ...

  9. Patch2Pix(CVPR 2021)特征点检测与匹配论文精读笔记

    前言 论文地址 论文补充材料 / 附录 代码地址   翻译并记录阅读每段的感受和写作逻辑.大概了解特征点检测和目标检测的大致方法的话,不用递归式读论文也能基本理解本文的方法. 参考文献 检测: [5] ...

  10. brisk matlab,opencv学习笔记三十七:BRISK特征点检测与匹配

    简介 BRISK算法是2011年ICCV上<BRISK:Binary Robust Invariant Scalable Keypoints>文章中,提出来的一种特征提取算法,也是一种二进 ...

最新文章

  1. Nature Methods:Rob Knight发布Striped UniFrac算法轻松分析微生物组大数据
  2. 今目标戴珂:掘金企业协同
  3. 零基础自学python的建议-python回顾——对零基础学者的建议(一)
  4. python库整理: Collections.Counter
  5. c++ string 堆还是栈_5 个刁钻的 String 面试题!你都遇到过哪些?
  6. eureka需要替换吗_Spring Cloud Alibaba迁移指南1:零代码从Eureka迁移到Nacos
  7. 深入理解C++中的explicit关键字
  8. Java ArrayList与LinkedList数据结构和特点
  9. 关于软件定义IT基础设施的未来,深信服是这么思考的
  10. SpringBoot 集成 Jsp、Thymeleaf 模板引擎 + Thymeleaf 基本使用
  11. 2017百度之星资格赛:1005. 寻找母串(卡特兰数+分块打表)
  12. windows核心编程第二章阅读
  13. 数字密码锁设计(利用数字逻辑电路的电子密码锁)
  14. 重装系统后开机启动项菜单如何删除
  15. 服务器建网站要数据库,云服务器建网站需要数据库
  16. 中国电信“公板”计划主攻中端市场
  17. PHP项目集成支付宝PC端扫码支付API(国内支付)
  18. 《思维力:高效的系统思维》读书笔记05 - 快速提升你的沟通表达能力
  19. LeetCode-1789. 员工的直属部门
  20. 2021,前端月薪30K已是白菜价?

热门文章

  1. ssm项目从零到精通的超全解析(含项目源码)
  2. idea运行SSM项目配置tomcat及启动
  3. uni-app项目打包为app
  4. 如何正确使用RS485半双工芯片
  5. 安全工具之hackingtool
  6. 牛客网sql练习题解(34-42)
  7. android 描点抠图源码,一款功能强大的AI驱动一键安卓抠图软件,人物商品图章签名logo...
  8. OSEK-NM直接网络管理一:概念部分
  9. 基于LabVIEW 2018开发的自动化测试系统源码,该系统模仿TestStand编写
  10. Sketch颜色替换更改插件 PasteDirect v1.0破解版