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. 技术面试,高效求职准则
  2. Oracle 备份还原数据库练习.
  3. leanote 信息栏显示笔记本和笔记类型
  4. python数据清理的实践总结_Python数据清洗实践
  5. python中对列表浅复制深复制另类的理解方式
  6. 阿里云大数据总监:计算让城市更智能
  7. 【MTSP】基于matlab遗传算法求解多旅行商问题【含Matlab源码 016期】
  8. c语言运动员成绩查询,运动会成绩管理系统
  9. 一个程序员未来5年的自我规划
  10. 使用Metricbeat和Filebeat监控Nginx性能指标和日志
  11. word安全模式解除方法
  12. office excel 条件格式——使用公式确定要设置格式的单元格——筛选并标记一个表中每行数据的最小(大)值
  13. rust Vec 常用操作
  14. 底物的分子描述符计算及 CYP450 酶-底物选择性技术研究
  15. 北京理工大学计算机学院学生数,金福生_北京理工大学计算机学院
  16. SpringBoot中使用Easyexcel实现Excel导入导出功能(三)
  17. IoC Containers and the DI pattern
  18. EditText的属性说明
  19. 设计模式-备忘录模式(快照模式)
  20. H3C交换机路由器的策略路由配置

热门文章

  1. 狂神SSM项目整合(含完整代码免费)
  2. 【AHP】层次分析法 | 过程解读 案例实践
  3. linux ubuntu 五笔输入法,ubuntu16.04 安装五笔输入法
  4. MINGW里面没有mingw32 make.exe
  5. Python 智能检测编码的工具
  6. 好用且种类多的Unity3d游戏特效素材推荐,都在这里
  7. 使用vscode编写原生微信小程序
  8. 网络安全应急响应-恶意代码分析技术
  9. 笔记:PJL的一些用法
  10. c# 打印 html,c# – 使用模板打印