SURF (Speeded Up Robust Features,加速稳健特征)
本篇文章来自wikipedia,如果需要阅读英文,可以去看一下。
SURF (Speeded Up Robust Features, 加速稳健特征) 是一个稳健的图像识别和描述算法,首先于2006年发表在ECCV大会上。这个算法可被用于计算机视觉任务,如物件识别和3D重构。他部分的灵感来自于 SIFT 算法。SURF标准的版本比SIFT要快数倍,并且其作者声称在不同图像变换方面比SIFT更加稳健。
SURF使用海森矩阵的行列式值作特征点侦测并用积分图加速运算;SURF 的描述子基于 2D 离散小波变换 响应并且有效地利用了积分图。
算法
SURF算法的概念及步骤均建立在SIFT之上,但详细的流程略有不同。SURF算法包含以下三个步骤:特征点侦测、特征邻近描述、描述子配对。
特征点侦测
SIFT使用了连续不同尺度的高斯滤波器处理影像,并且经由高斯差来侦测影像中尺度不变的特征点。
SURF使用了方型滤波器取代SIFT中的高斯滤波器,借此达到高斯糢糊的近似。其滤波器可表示为:

此外使用方型滤波器可利用积分图大幅提高运算速度,仅需计算位于滤波器方型的四个角落値即可。
SURF使用了斑点侦测的海森矩阵来侦测特征点,其行列式值代表像素点周围的变化量,因此特征点需取行列式值为极大、极小值。除此之外,为了达到尺度上的不变,SURF还使用了尺度σ的行列式值作特征点的侦测,给定图形中的一点p=(x, y),在尺度σ的海森矩阵为H(p, σ):

尺度空间描述与特征点定位
因为影像会在不同的尺度下作比较,特征点往往会在不同尺度下被侦测到。在SIFT中,由于连续的高斯糢糊处理以及影像的降采样,在尺度上会型成类似金字塔的概念,例如高斯金字塔。
而SURF中尺度是由方型滤波器的大小决定的,并不是连续的高斯糢糊及降采样处理。其中最底层的尺度(初始尺度)的方型滤波器大小为9*9,近似于σ=1.2的高斯滤波器。越往上层的尺度滤波器的大小也就跟着增加,例如15*15、21*21、27*27......。
其尺度的转换公式为:
与SIFT相同,SURF会使用特征点海森矩阵的行列式值作邻近资料插补来定位特征点。
特征点描述子
为了保留特征点不变的特性,例如旋转、尺度上的不变性,需要赋予特征点一个描述子,使其能保有其不变性且能够轻易地被区分。大多数的描述子建立的方法为描述特征点与其相邻的相素点间的变化,因此描述子往往都是区域性的。
同时描述子的维度也是描述子重要的考量之一,一个维度不足的描述子可能会使能特征点不易区分,然而维度过大的描述子要耗费的计算也就越复杂。SURF的描述子使用了哈尔小波转换的概念,并利用积分图简化描述子的计算。
方位定向
为了使得特征点拥有转动不变性,需要赋予特征点一个方向。SURF的描述子计算特征点周围半径维6σ个像素点的x,y方向的哈尔小波转换,其中σ是此特征点位于的尺度。所得到的小波响应以特征点为中心的高斯函数作加权,并将其值标于一xy作标平面上作图。最后在xy作标平面上以π/3为一个区间,将区间内小波响应的x、y分量加总得到一向量,在所有的向量当中最长的(即x、y分量最大的)即为此特征点的方向。
此外在xy平面上选择角度的区间大小可由角度的分辨率、描述子的独特程度等因素来作为调整的考量。
描述子量值
选定了特征点的方向后,其周围像素点需要以此方向为基准来建立描述子。此时以5*5个像素点为一个子区域,取特征点周围20*20个像素点的范围共16个子区域,计算子区域内的x、y方向(此时以平行特征点方向为x、垂直特征点方向为y)的哈尔小波转换总合,
与其向量长度总合
、
共四个量值,共可产生一个64维资料的描述子。
描述子配对[编辑]
替所有的特征点建立描述子后便能使用描述子达成特征点的配对,借此应用在物体辨识、3D模型建立等应用上。
实现
- 原始实现 (闭源)
- OpenSURF (开源) 有详细的文档和参考手册的实现(C++, C#, Java, Android, iPhone)
- OpenSurfCL (开源) OpenSURF 在 OpenCL 上的免费实现(C++, C# Wrapper, JNI)
- OpenCV SURF (开源) SURF 的特征分离实现 (OpenCV 2.0)
- SURFmex Matlab OpenCV的 SURF 接口(MEX)代码。
- OpenSURF Matlab (开源) 到 OpenSURF (Matlab) 的接口
- libmv SURF (开源) 分离与匹配的实现
- Python mahotas (开源) 包含 SURF 实现的计算机视觉包
- Dlib C++ Library (开源) SURF 特征分离的实现
- Pan-o-matic (开源) 包含 SURF 算法的软件
- Parallel SURF[永久失效链接] 基于 Pan-o-matic 的多线程实现
- C# SURF plugin for Multi-Agent Serving System (开源) 分离和匹配的实现
- JavaSurf (开源) java 实现 (平台独立)
- JOpenSURF (开源) java 翻译的 OpenSURF
- ImageJ SURF (开源) 作为 ImageJ 插件,拥有舒适的GUI和输出统计的SURF实现(平台独立)
- ASSURF (开源) 在 Adobe Flash 平台中基于 ActionScript 的SURF实现
- Speeded Up SURF (开源) GPU 实现
- CUDA SURF[永久失效链接] (开源) GPU 使用 CUDA 的实现, 接口与 OpenSURF (C++, CUDA) 类似
- Mathematica 实现
- GPU SURF (开源) GPU 实现
SURF (Speeded Up Robust Features,加速稳健特征)的更多相关文章
- sift、surf、orb 特征提取及最优特征点匹配
目录 sift sift特征简介 sift特征提取步骤 surf surf特征简介 surf特征提取步骤 orb orb特征简介 orb特征提取算法 代码实现 特征提取 特征匹配 附录 sift si ...
- Computer Vision_33_SIFT:Speeded-Up Robust Features (SURF)——2006
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
- Extracting and composing robust features with denosing autoencoders 论文
这是一篇发表于2008年初的论文. 文章主要讲了利用 denosing autoencoder来学习 robust的中间特征..进上步,说明,利用这个方法,可以初始化神经网络的权值..这就相当于一种非 ...
- [原][译][osgearth]关于Features & Symbology (特征与符号)(OE绘制矢量几何与特殊字符)讲解(OE官方文档翻译)
原文参考:http://docs.osgearth.org/en/latest/user/features.html 自己翻译的,本人英文水平有限,有问题看原链接,原文 20170802重置修改部分翻 ...
- 论文笔记(3)-Extracting and Composing Robust Features with Denoising Autoencoders
这篇文章是Bengio研究的在传统的autoencoder基础上增加了噪声参数,也就是说在输入X的时候,并不直接用X的数据,而是按照一定的概率来清空输入为0.paper中的名词为corrupted.这 ...
- OpenCV-Python Tutorials目录
版本 3.4.6 1 Introduction to OpenCV OpenCV介绍Learn how to setup OpenCV-Python on your computer! 2 Gui F ...
- 图像局部显著性—点特征(SURF)
1999年的SIFT(ICCV 1999,并改进发表于IJCV 2004,本文描述):参考描述:图像特征点描述. 参考原文:SURF特征提取分析 本文有大量删除,如有疑义,请参考原文. SURF对SI ...
- opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较
opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较 参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_ ...
- opencv::SURF特征
SURF特征基本介绍 SURF(Speeded Up Robust Features)特征关键特性: -特征检测 -尺度空间 -选择不变性 -特征向量 工作原理 . 选择图像中POI(Points o ...
- SURF算子(1)
SURF算子,参考这篇文章的解释http://www.ipol.im/pub/art/2015/69/ SURF 是 Speeded Up Robust Features 加速鲁棒特征的含义. T ...
随机推荐
- 免费使用TasteWP一键搭建线上临时WordPress网站
虽然用宝塔面板或者1Panel面板可以非常快速的搭建一个WordPress网站,但是有时候只想测试下我设计的页面或者开发的主题和插件,又得买服务器,绑定域名,安装程序,搭建起来也过于浪费时间了:再或者 ...
- 【WSDL】02 四种客户端调用方式
WSDL概念和一些语法内容: https://www.w3school.com.cn/wsdl/index.asp SOAP概念: https://www.runoob.com/soap/soap-t ...
- application.properties配置文件存储参数
配置文件存储参数 当我们需要很多的参数时,项目很大,文件很多,每涉及一个技术,每涉及一个第三方的参数时,当这些参数数据发生变化,修改会相当的麻烦.这时候把参数配置到application.proper ...
- Blazor Web 应用如何实现Auto模式
本文介绍Blazor Web应用Auto交互呈现模式的实现方案,如下示例是基于 Known 框架来实现的,该解决方案共有3个项目,具体实现步骤如下: 1. 前后端共用项目 创建前后端共用类库项目Sam ...
- 在docker容器中创建用户组和用户,并且多用户共用一个anaconda环境
背景: 实验室可以使用一个浪潮的AI计算平台,该平台运行的都是docker容器,并且不能联网,因此谁要是想要安装什么软件的话就需要自己单独打包镜像到平台上,大致步骤为: 1. 在平台的镜像管理中找 ...
- 个人常用的 matplotlib 绘图模板
import numpy as np import matplotlib import matplotlib.pyplot as plt matplotlib.rcParams['mathtext.f ...
- Spring 相关知识
https://www.bilibili.com/video/BV1gW411W7wy?spm_id_from=333.788.b_636f6d6d656e74.173 老雷的Spring注解驱动 源 ...
- 【CDQ分治】【模板】三维偏序(陌上花开)
P3810 [模板]三维偏序(陌上花开) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include <bits/stdc++.h> using namespace ...
- Camera | 3.瑞芯微平台MIPI摄像头常用调试命令
瑞芯微专栏 前面2篇我们讲解了camera的一些基础概念和知识. 本文主要讲述在瑞芯微平台上摄像头开发常用的调试命令. 0.环境 soc : rk3568 board: EVB1-DDR4-V10 软 ...
- apche doris 2.0.0 Linux环境下一键安装部署脚本
1 #!/bin/bash 2 # doris部署环境要求: 3 #(1)一台或多台机器,操作系统CentOS 7.x-86_x64 4 #(2)硬件配置:内存4G+,CPU 2核+: 5 #(3)集 ...