SIFT 特征点算法

SIFT算法是记录每个极值点附近的梯度方向,并以一个主要梯度方向为基准来兼顾特征旋转的情况。它通过不同模糊程度的灰度图相减找极值 ,筛选确定出真实关键点后按梯度和权重求出关键点的主方向,再给关键点附近的16个区块确定8方向矢量,相当于给这幅图的这个位置做个特征标记【类比特征向量】。于是能通过这些特征标记寻找出两图对应的特征点,从而通过多个对应特征点确定图像变换矩阵。
即,Sift是一种基于尺度空间的,对图像缩放、旋转、甚至仿射变换保持不变性的图像局部特征描述算子。缺点是实时性不高,并且对于边缘光滑目标的特征点提取能力较弱。

【SIFT实例】 目标识别及VLFeat开源库 --代码君CodeSama

尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法,用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。SIFT所查找到的关键点是一些十分突出且不会因光照、仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等,对于光线、噪声、些微视角改变的容忍度相当高。

SIFT算法可以解决的问题:
目标的自身状态、场景所处的环境和成像器材的成像特性等因素影响图像配准/目标识别跟踪的性能。而SIFT算法在一定程度上可解决:

  1. 目标的旋转、缩放、平移(RST)
  2. 图像仿射/投影变换(视点viewpoint)
  3. 光照影响(illumination)
  4. 目标遮挡(occlusion)
  5. 杂物场景(clutter)
    其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。

SIFT算法分解为如下四步:
6. 尺度空间极值检测:搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。【用高斯滤波获取尺度空间。(用两次一维的高斯卷积将消除二维高斯矩阵所产生的边缘,还比二维高斯卷积的计算量少)。将图像金字塔每层的一张图像使用不同参数的高斯模糊(这里的公式是关键),使得金字塔的每层含有多张(6-8张)高斯模糊图像。在高斯金字塔中一共生成O组L层不同尺度的图像,这两个量合起来(O,L)就构成了高斯金字塔的尺度空间,即给定的一组坐标(O,L)就可以唯一确定高斯金字塔中的一幅图像。
把模糊后的图像两两相减(另外起名叫DoG空间),Dog空间里的图像是用来寻找极值点的原始数据。

依据Dog空间里的相邻图片检测极值点
极值点公式:(式中σ是尺度空间坐标)

  1. 关键点定位:第一步检测到的极值点是作为候选的离散空间的极值点,这步通过拟合三维二次函数来精确确定关键点的位置和尺度【对上图的D公式求偏导 求得连续空间下的真实极值点的像素位置(如果x、y或者σ偏离了0.5以上就换位置重新进行插值计算】,同时去除低对比度的关键点和不稳定的边缘响应点【超出迭代次数或者极值D过低属于噪声】。

  2. 方向确定:相对像素的亮度值,梯度对光照具有更好的鲁棒性。基于图像局部的梯度方向,分配给每个关键点位置一个或多个主方向。
    计算关键点周围一定区域的梯度值,比如8*8区域。
    1、然后将得到的角度值进行36等分。
    2、在特征点对应的尺度空间计算梯度值。
    3、利用高斯核对梯度进行计算权重。

    建立一个36维的直方图,每次累加的值就是它的权重。大于主方向峰值80%的方向作为该关键点的辅方向【仅有15%的关键点被赋予多个方向】

  3. 关键点描述:再在选择完主方向后,通过对关键点周围图像区域分块,记录16个种子点【在下文提及】的方向 并以主方向计算相对角度。这样就算图像进行旋转,主方向也会进行旋转,相对角度保持相对恒定状态,即使有比较大的局部形状的变形和光照变化也不会受到影响。

    左图的中央为当前关键点的位置,每个小格代表为关键点邻域所在尺度空间的一个像素,求取每个像素的梯度幅值与梯度方向。4*4个一组,依据高斯加权计算每个梯度方向的累加值,即可形成一个种子点【配图右侧是4个种子】,每个种子点有8个方向的向量信息。这种邻域方向性信息联合增强了算法的抗噪声能力,同时对于含有定位误差的特征匹配也提供了比较理性的容错性。每个关键点使用4×4共16个种子点来描述,这样一个关键点就可以产生128维的SIFT特征向量。这个128维的SIFT特征向量就像是我们每个人的身份证一样,拥有绝对标识,几乎不可能重复,在这里可以对128维向量进行归一化处理,可以去除光照变化的影响。我们对模板图和目标图分别建立描述子集合。

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

SIFT算法详解【公式细节一看就困】

SIFT讲解(SIFT的特征点选取以及描述是重点)

SIFT特征匹配详细原理+Python实现【含实例】

SIFT论文原文翻译【里面还有很多值得学习的知识】

基础知识
图像金字塔、高斯金字塔、差分金字塔(DOG金字塔)、尺度空间、DoG (Difference of Gaussian)角点检测

Surf算法

与Sift算法一样,Surf算法的基本路程可以分为三大部分:局部特征点的提取、特征点的描述、特征点的匹配。 但Surf在执行效率上有两大制胜法宝——一个是积分图在Hessian(黑塞矩阵)上的使用,一个是降维的特征描述子的使用。 为算法在实时计算机视觉系统中应用提供了可能。

Surf改进了特征的提取和描述方式

  1. 构建Hessian(黑塞矩阵),生成所有的兴趣点,用于特征的提取;
    在构造Hessian矩阵前需要对图像进行高斯滤波,构建Hessian矩阵的过程对应于Sift算法中的高斯卷积过程。
    降低滤波器精度

  2. 构建尺度空间
    不在组与组之间改变图像大小,而是改变滤波器的模板尺寸的大小。

  3. 特征点定位
    一样

  4. 特征点主方向分配
    统计60度扇形内所有点的水平、垂直haar小波特征总和,最后将值最大的那个扇形的方向作为该特征点的主方向。该过程示意图如下:

  5. 生成特征点描述子
    用4个值作为每个子块区域的特征向量【sift是8个】该haar小波特征为水平方向值之和、垂直方向值之和、水平方向绝对值之和以及垂直方向绝对值之和。一个特征点有16*4=64维向量

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

Surf算法特征点检测与匹配【是sift算法的改进版】

基础知识
小波变换一之Haar变换

找特征点的算法 SIFT和SURF算法相关推荐

  1. java opencv surf_在OpenCV3.1.0中使用SIFT,SURF算法

    写在前边: 1.我使用的是python2.7 + OpenCV3.1.0 2.OpenCV3.0.0+的文档有很大问题,很多文档写的还是OpenCV2.0+, OpenCV3.0+根本用不了,其中有一 ...

  2. [图像识别]10.OpenCV的特征点检测 SIFT和SURF算法

    回顾,上节课你学了什么? R=cv.cornerHarris(img,blockSize,ksize,k) corners=cv.goodFeaturesToTrack(img,maxCorners, ...

  3. 图像处理SIFT与SURF算法详解

    图像的特征点检测是图像配准的第一步,下面将为大家介绍尺度不变特征检测(SIFT)和加速鲁棒特征检测(SURF)两种算法. 一.SIFT算法 SIFT 算法是一种高精度的特征点检测算法.运用此算法检测出 ...

  4. SIFT与SURF算法比较

    SIFT在图像的不变特征提取方面拥有无与伦比的优势,但并不完美,仍然存在实时性不高,有时特征点较少,对边缘光滑的目标无法准确提取特征点等缺陷,自SIFT算法问世以来,人们就一直对其进行优化和改进,其中 ...

  5. OpenCV2学习笔记(十二):特征提取算法SIFT与SURF

    当尝试在不同图像之间进行特征匹配时,通常会遇到图像的大小.方向等参数发生改变的问题,简而言之,就是尺度变化的问题.每幅图像在拍摄时与目标物体的距离是不同的,因此要识别的目标物体在图像中自然会存在不同的 ...

  6. 图像特征检测描述(一):SIFT、SURF、ORB、HOG、LBP特征的原理概述及OpenCV代码实现

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 什么叫特征检测?就是检测图像中目标的特征呗,所谓 ...

  7. Opencv Sift和Surf特征实现图像无缝拼接生成全景图像

    Sift和Surf算法实现两幅图像拼接的过程是一样的,主要分为4大部分: 1. 特征点提取和描述 2. 特征点配对,找到两幅图像中匹配点的位置 3. 通过配对点,生成变换矩阵,并对图像1应用变换矩阵生 ...

  8. SIFT、SURF等关键点特征提取算法代码

    文章目录 1.关键点特征提取算法 2.SIFT代码(python+opencv) 2.SURF代码(python+opencv) 3.SIFT和SURF的比较 1.关键点特征提取算法 特征提取是提取出 ...

  9. 局部特征(4)——SIFT和SURF的比较

    局部特征系列: 局部特征(1)--入门篇 局部特征(2)--Harris角点 局部特征(3)--SURF特征总结 局部特征(4)--SIFT和SURF的比较 局部特征(5)--如何利用彩色信息 Col ...

  10. surf算法原理-包你明白surf过程

    SURF 算法,全称是 Speeded-Up Robust Features.该算子在保持 SIFT 算子优良性能特点的基础上,同时解决了 SIFT 计算复杂度高.耗时长的缺点,对兴趣点提取及其特征向 ...

最新文章

  1. 查看linux中某个端口(port)是否被占用
  2. mysql ansi_ANSI模式下如何运行MySQL
  3. java long的包,long longValue()
  4. 补习系列(3)-springboot中的几种scope
  5. Python网络爬虫与信息提取[request库的应用](单元一)
  6. 中国水产养殖疫苗行业市场供需与战略研究报告
  7. python 原始字符串_Python原始字符串
  8. ExtraPhrase:一种针对抽象式(生成式)摘要的数据增强方法
  9. 机器学习—K-means聚类、密度聚类、层次聚类理论与实战
  10. python在化学中的应用_用Python配平化学方程式的方法
  11. QT5入门学习(一)
  12. 数学符号大全(量词符号、代数符号等)
  13. 笔记:线性代数的本质
  14. 2017春运抢票软件哪个好,教你看懂刷票原理!
  15. java英语_Java英语单词 PDF 下载
  16. 浏览器链接打开客户端应用
  17. 用MATLAB对语音进行基频搬移,语音信号变声处理系.doc
  18. sin n次方 x 的降幂公式
  19. 微信分享服务器,微信分享的链接会被腾讯后台先访问
  20. 内存卡打不开需要格式化怎么恢复数据

热门文章

  1. [经验分享] 收费版文字转语音,免费使用
  2. 技术中心部门薪酬和考核体系
  3. 计算机考试表格函数应用题,2017年职称计算机考试Excel练习题2
  4. paypal 支付接口开发--Java版
  5. 端到端语音识别技术预研与实践
  6. 深入浅出谈LPWAN物联网通信技术
  7. Spring整合FreeMarker生成静态页面(静态模板)
  8. Power Apps 入门介绍
  9. java计算机毕业设计企业员工工资管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  10. 计算机与医疗PPT,《人工智能医药》ppt课件