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 ...
随机推荐
- 趣谈n++与++n的differences
前言:今天小白在学习时无意发现一组有趣的孪生兄弟** n++ 与 ++n** 探索:二者不同之处 工具:VS2022 过程: 前者是++n,输出11,12,13,14 后者是n++,输出10,11,1 ...
- Windows报错0xc0000142的处理方法
1.问题描述 桌面有个弹窗报错(0xc0000142),无法关闭,影响Windows的使用 此错误很有可能是缺少组件导致 2.解决办法 进入" C:\Windows\System32 &qu ...
- 【PHP】5版本 过程式操作MySQL
建立连接和释放连接: # 连接参数 $sever = 'localhost:3309'; $username = 'root'; $password = 'root'; # 调用连接方法,如果失败结束 ...
- PyCharm2024 专业版激活设置中文
PyCharm2024 专业版激活设置中文 官网下载最新版:https://www.jetbrains.com/zh-cn/pycharm/download 「hack-jet激活idea家族.zip ...
- 树莓派3b+ 安装Ubuntu mate18.04系统 配置SSH 、 远程桌面realvnc
Ubuntu mate for 树莓派3b+ 系统下载: 下载地址: https://ubuntu-mate.org/download/ 这里用32位系统:(64位也可以的,虽然还是实验阶段的,不 ...
- 【Spring源码分析】Spring Scope功能中的动态代理 - Scoped Proxy
本文基于Springboot 3.3.2及Springcloud 2023.0.1版本编写. Spring Scoped Proxy是什么 在使用Spring cloud配置中心动态配置更新功能时,笔 ...
- 【VMware ESXi】把硬盘当内存用?VMware 内存分层(Memory Tiering),你值得拥有!
VMware vSphere 8.0 U3 发布了一个非常有意义的功能叫内存分层(Memory Tiering),以利用基于 PCIe 的 NVMe 设备充当第二层(辅助)内存,从而使 ESXi 主机 ...
- React项目接入代码编辑器aceEditor
不建议去查看aceEditor官方,最好去github查看 安装命令: npm install react-ace 引入包: import AceEditor from 'react-ace'; im ...
- 004.MinIO-DirectPV分布式存储部署
MinIO部署介绍 部署概述 Kubernetes hostpath.local和本地静态配置都存在需要事先在node节点准备好可用的块存储或文件系统,例如对插入的硬盘,或者磁盘阵列做分区格式化,文件 ...
- 每天那么多工作,我为什么能做到 "不忘事" ?
大家好,我是程序员鱼皮. 我相信很多朋友都遇到过丢失工作.或者忘记事情的情况,尤其是事情一多,就更容易遗漏:而如果在工作中你漏掉了某项任务,需要上级或同事重复提醒你,是很影响别人对你的印象的. 那么如 ...