SIFT和SURF特征提取分析(小结篇)_sift surf计算复杂度-程序员宅基地

                              

引言

本节主要是David Lowe对于SIFT算法的阐述Distinctive Image Features from Scale-Invariant Keypoints和 Herbert Bay, Andreas Ess, Tinne Tuytelaars, Luc Van Gool, 对于SURF算法的 阐述 以及小结。

SIFT特征提取小结

根据LOWE的文章(更为SIFT特征提取分析,请见详参考博文 尺度不变特征变换(SIFT)特征提取分析 ) 。

首先, 先对SIFT算法的主要原理、流程做一个简要阐述。由于 该算法的核心是“尺度不变”特征点的提取 ,所以特征点得筛选资源从 高斯金字塔产生的差分高斯空间中的局部极值点获得 。

  • 第一、个人认为关于高斯金字塔以及拉普拉斯算子的原理可以作以下直观理解:SIFT算法的尺度不变特征点大多是边缘上的点(更进一步是边缘上的角点(如矩形的四个顶点),关于边缘上非角点得去除会在下文提到),而边缘上的点即是高频(亮度与邻接点相差大)的点,它的亮度变化率取到一个极大值,即亮度变化率的变化率(亮度的二阶导数)等于0,即拉普拉斯算子△I=0。
  • 第二、由于当图像与高斯核卷积后,I(x,y)变为G(X,Y,σ),求二阶偏导数可以转化为求关于尺度σ的一阶偏导数(高斯核即二维正态分布是热传导方程的一个解),且求这个偏导数更易实现,所以引入以σ为变量的高斯差分空间。对高斯差分空间可作如下直观理解:当人眼由远及近地观察一个物体,物体的细节会变化,但大体轮廓不会变化,由此可以通过比较站在远处和近处的两个画面来确定轮廓。事实上高斯差分空间中的图像看起来像浮雕,轮廓非常明显,所以求出高斯差分空间邻接图像的极值点即可。】

其次,进行初步取得的极值点得筛选工作,分两步,筛出特征点。

  • 用二次曲面来模拟每个极值点附近的图像亮度函数,求出理论上极值点,设定一个界限,舍去实际点与理论点偏差大于界限的点。
  • 去除仅落在边缘上而非角点的点。这类应被舍去的点有一个特征:沿着边缘切线方向的图像函数平缓(曲率小),垂直边缘方向陡峭(曲率大)。由于Hessian矩阵的两个特征值是X,Y方向的曲率,所以求出每个极值点两个特征值的比值,设定一个界限,舍去不合格的点即可。

最后,选定特征点后,就对每个特征点进行描述子(模拟人眼视网膜)的制作(因为特征点对图像的变化过于敏感,而描述子不敏感)。

  • 由于SIFT对旋转有不变性,所以为每个特征点计算一个方向,这是制作描述子的预备工作。(具体实现是选定一个特征点附近的区域,算出区域中所有点的梯度大小以及方向,然后将这些方向分为36组,按梯度大小和正态分布函数加权,绘制0~360°的直方图,再用二次函数拟合求直方图的最大值点,得到一个特征点的总方向(若有次最大值点接近极大值点,则将这一特征点分为二个在同一坐标的点,但分别使用两个不同方向)。
  • 确定方向后将区域内所有点的梯度方向转过一个上述确定的主方向的角度。然后将区域分为4*4=16个正方形子区域,每个区域中的点按梯度大小和正态分布加权,绘制出8个方向的直方图,所以每个特征点可得到一个128维的描述子向量(因为要使特征点对对比度变化不敏感,还需对向量归一化处理)。这些描述子即可用于匹配,即寻找另一幅图像中与该特征点128维向量几何距离最短的点。LOWE提到的方法是用K-D树搜索,但由于高维情形耗时较长,需加一个近似最优的贪心法剪枝和一个卡时出解的策略求得近似解。至此,SIFT算法完成。
除上述对SIFT算法的理论可行性讨论外,在SIFT实现的过程中还有一个重要的方面是一些参数的选择,例如一个OCTAVE几个图,一个描述子几个子区域,以及舍弃极值点时界限阈值(threshold)的选择,这些都关系到识别的精确度和算法的效率。Lowe在文章中给出了推荐数据,但在具体情况下可能可以再作微调(如识别的场景不同)。

SIFT算法时间复杂度的瓶颈在于描述子的建立和匹配 ,如何优化对特征点的描述方法是提升SIFT效率的关键,PCA-SIFT等算法在这里做了优化。

SURT特征提取小结

SURF算法 (更为SURF特征提取分析,请见详参考博文 SURF特征提取分析 ) 是对SIFT算法的改进,其基本结构、步骤与SIFT相近,但具体实现的过程有所不同。SURF算法的优点是速度远快于SIFT且稳定性好。

首先, 先对SURF算法的中 特征点的提取

  • 在SURF算法中,特征点的判据为某像素亮度的Hessian矩阵的行列式(Dxx*Dyy-Dxy*Dxy)为一个极值。由于Hessian矩阵的计算需要用到偏导数的计算,这一般通过像素点亮度值与高斯核的某一方向偏导数卷积而成;在SURF算法里,为提高算法运行速度,在精度影响很小的情况下,用近似的盒状滤波器(0,1,1组成的box filter)代替高斯核。因为滤波器仅有0,-1,1,因此卷积的计算可以用积分图像(Integral image)来优化(O(1)的时间复杂度),大大提高了效率。每个点需计算Dxx,Dyy,Dxy三个值,故需要三个滤波器;用它们滤波后,得到一幅图像的响应图(Response image,其中每个像素的值为原图像素的Dxx*Dyy-Dxy*Dxy)。对图像用不同尺寸的滤波器进行滤波,得到同一图像在不同尺度的一系列响应图,构成一个金字塔(该金字塔无需像SIFT中的高斯一样进行降采样,即金字塔每组中的每层图像分辨率相同)。
  • 特征点的检测与SIFT一致,即若某点的Dxx*Dyy-Dxy*Dxy大于其邻域的26个点(与SIFT一致)的Dxx*Dyy-Dxy*Dxy,则该点为特征点。特征点的亚像素精确定位与SIFT一致。
其次,描述子的建立
  • 为保证特征点描述子的旋转不变性,需对每个特征点计算主方向。计算主方向的过程如下:
    1. 统计以特征点为中心,正比于特征点尺度的某个数位半径,张角为60°的扇形区域内所有像素点的 sumX=(y方向小波变换响应)*(高斯函数),sumY=(x方向小波变换响应)*(高斯函数), 计算合成向量角度θ=arctan(sumY/sumX),模长sqrt(sumy*sumy+sumx*sumx)。
    2. 将扇形沿逆时针旋转(一般取步长为0.1个弧度),以同样方法计算合成向量。
    3. 求出各方向扇形的合成向量模长最大值,其对应的角度即特征点主方向。
  • 描述子的建立过程如下:
    1. 选定以特征点为中心的一块正方形区域,将其旋转与主方向对齐。
    2. 将正方形分为4x4的16个子区域,对每个区域进行Haar 小波变换(同样用积分图像加速),得到4个系数。
    3. 由上述两步,生成4x4x4=64维向量,即描述子,用它可以进行匹配等工作。

此算法的优点 在于大量合理使用积分图像降低运输量,而且在运用的过程中并未降低精度(小波变换,Hessian矩阵行列式检测都是成熟有效的手段) 。在时间上,SURF运行速度大约为SIFT的3倍;在质量上,SURF的鲁棒性很好,特征点识别率较SIFT高,在视角、光照、尺度变化等情形下,大体上都优于SIFT。

关于Image Engineering& Computer Vision更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014792364/article/details/64438419

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签