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 ...
 
随机推荐
- scratch源码下载 | 超大太空游戏【80MB】
			
按方向键或AWSD键控制角色移动,按空格键或X键攻击. 程序超级大,共80MB,耐心等待加载. 截图: 点击下载源码 更多源码访问:小虎鲸scratch资源站
 - 我用Awesome-Graphs看论文:解读Pregel
			
Pregel论文:<Pregel: A System for Large-Scale Graph Processing> 上次向大家分享了论文图谱项目Awesome-Graphs的介绍文章 ...
 - python os.path 模块详解
			
python os.path 模块详解 os.path.basename() 返回最后一项,通常是文件名os.path.dirname() 返回的是目录,不包含文件名os.path.split() 返 ...
 - RPC和 HTTP协议
			
RPC 和HTTP 的区别 服务发现 HTTP,知道服务域名,可以通过 DNS 解析 得到 服务的IP地址,从而进行访问 RPC 需要一个专门的中间服务去保存服务名和IP信息(注册中心,nacos.c ...
 - web3 产品介绍: safe --多签钱包 多人审批更放心
			
Safe是一款由Gnosis团队开发的多签钱包,它提供了一种安全.灵活和易于使用的方式来管理加密资产.在本文中,我们将介绍Safe的主要特点以及如何使用Safe来保护您的数字资产. 一.Safe的特点 ...
 - 【Mybatis-Plus】联表分页查询实现
			
参考文章: https://blog.csdn.net/weixin_43847283/article/details/125822614 上上周写的SQL案例确实可以重构,所以搬到Demo里面测试看 ...
 - 【转载】   Python格式化字符串f-string概览
			
版权声明:本文为CSDN博主「sunxb10」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/sunxb10/a ...
 - python语言绘图:绘制一组二项分布图
			
代码源自: https://github.com/PacktPublishing/Bayesian-Analysis-with-Python ============================= ...
 - C# Cefsharp 设置代理方法
			
前提条件 为了实现在cefsharp里面设置代理,首先在创建一个ChromiumWebBrowser的时候,检查是否使用了以下代码 settings.CefCommandLineArgs.Add(&q ...
 - 学习使用docker-compose搭建Redis哨兵集群
			
搭建的记录 Redis的容器部署后,redis-server的默认安装目录为 /usr/local/bin. docker volumes 映射的文件与本地的文件共享,修改本地文件后,需要重启dock ...