/******************************************************/
github:https://github.com/MichaelBeechan
CSDN:https://blog.csdn.net/u011344545
/******************************************************/
记得最早使用SIFT还是OpenCV2中,不知后来为什么被去掉了!!!直到前段时间听说SIFT算法专利到期了(原来是因为SIFT算法有使用权限),接着很快OpenCV4就有这个功能了!!!!!

1、SIFT简介

图像匹配的核心问题将同一目标在不同时间、不同分辨率、不同光照、不同位姿情况下所成的像相对应。
传统的匹配算法往往是直接提取角点或边缘,对环境的适应能力较差,因此急需提出一种鲁棒性强、能够适应不同光照、不同位姿等情况下能够有效识别目标的方法。
所以1999年SIFT诞生了:David G. Lowe老爷子提出:E-mail: lowe@cs.ubc.ca

1999 年哥伦比亚大学 David G.Lowe 教授总结了现有的基于不变量技术的特征检测方法,提出了一种**基于尺度空间的**、对**图像缩放**、**旋转**甚至**仿射变换**保持不变性的图像局部特征描述算子—— **SIFT(尺度不变特征变换)**,直到算法在2004被完善。

将一幅图像映射(变换)为一个局部特征向量集:特征向量具有平移、缩放、旋转不变性,同时对光照变化、仿射及投影变换也有一定不变性。

SIFT 算法特点

 - SIFT 特征是**图像的局部特征**,其对**旋转**、**尺度缩放**、**亮度变化保持不变性**,对**视角变化**、**仿射变换**、**噪声**也保持一定程度的稳定性。- 独特性好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配。- 多量性,即使少数的几个物体也可以产生大量 SIFT 特征向量。- 经过优化的 SIFT 算法可满足一定的速度需求。- 可扩展性,可以很方便的与其他形式的特征向量进行联合。

SIFT 算法解决的问题

 - 目标的旋转、缩放、平移- 图像仿射/投影变换- 光照影响- 目标遮挡- 杂物场景- 噪声

2、SIFT算法实现


SIFT 算法实现物体识别主要有三大工序,1 1 、提取关键点;2 2 、对关键点附加详细的信息(局部特征)也就是所谓的描述器;3 3 、通过两方特征点(附带上特征向量的关键点)的两两比较找出相互匹配的若干对特征点,也就建立了景物间的对应关系。

2.1 关键点检测

根据文献 《 Scale- - space theory: A basic tool for analysing structures at different scales 》 我们可知,高斯核是唯一可以产生 多尺度空间的核,一个图像的尺度空间, L( x,y,σ) , 定义为原始图像 I(x,y) 与一个可变尺度的2 2 维高斯函数 G(x,y,σ) 卷积运算

Lindeberg 在文献 《 Scale- - space theory: A basic tool for analysing structures at different scales 》 指出尺度规范化的 LoG 算子具有真正的尺度不变性。
LoG 算子即( Laplacion of Gaussian ), 可以由高斯函数梯度算子 GOG 构建

LOG算子与高斯核函数的关系

DoG ( Difference of Gaussian )函数


在 Lowe 的论文中,将第0 0 层的初始尺度定为 1.6,图片的初始尺度定为 0.5,则图像金字塔第0层的实际尺度为

2.2 关键点描述

描述的目的是在关键点计算后,用一组向量将这个关键点描述出来,这个描述子不但包括关键点,也包括关键点周围对其有贡献的像素点。用来作为目标匹配的依据,也可使关键点具有更多的不变特性,如光照变化、 3D 视点变化等。

下图是一个 SIFT 描述子事例。其中描述子由2×2×8 维向量表征,也即是2×2个8 方向的方向 直方图组成。 左图的种子点由8×8单元组成。每一个小格都代表了特征点邻域所在的尺度空间的一个像素,箭头方向代表了像素梯度方向,箭头长度代表该像素的幅值。然后在4×的窗口内计算8 个方向的梯度方向直方图。绘制每个梯度方向的累加可形成一个种子点,如右图所示:由 一个特征点由4 个种子点的信息所组成。

Lowe 实验结果表明 : 描述子采用4×4×8= 128维向量表征 ,综合效果最优(不变性与独特性)

2.3 关键点匹配

分别对参考图reference image 和观测图, observation image建立关键点描述子集合。目标的识别是通过两点集内关键点描述子的比对来完成。具有 128 维的关键点描述子的相似性度量采用欧式距离。

2.4 消除错配点

关键点匹配并不能标志着算法的结束,因为在匹配的过程中存在着大。 量的错配点。
RANSAC ( Random Sample Consensus , 随机抽样一致 )是一种鲁棒性的参数估计方法。
思想首先根据具体问题设计出某个目标函数,然后通过反复提取最小点集估计该函数中参数的初始值,利用这些初始值把所有的数据分为 “ 内点 ” ( inlier )和 “ 外点 “ ( outlier ),最后用所有的内点重新计算和估计函数的参数。

3、SIFT算法的应用

SIFT 算法目前在军事、工业和民用方面都得到了不同程度的应用,其应用已经渗透了很多领域,典型的应用如下:

• 物体识别
• 机器人定位与导航
• 图像拼接
• 三维建模
• 手势识别
• 视频跟踪
• 笔记鉴定
• 指纹与人脸识别
• 犯罪现场特征提取
•••••••••••••

4、SIFT算法的扩展与改进


算法 | 尺度不变特征变换匹配算法 Scale Invariant Feature Transform (SIFT)相关推荐

  1. 尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT)

    1.SIFT综述 尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取 ...

  2. 尺度不变特征变换匹配算法详解

    尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT) Just For Fun 对于初学者,从David G.Lowe的论文到实现,有许多鸿沟, ...

  3. SIFT算法详解:Scale Invariant Feature Transform

    尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT) Just For Fun zdd  zddmail@gmail.com or (zddhu ...

  4. 《Scale Invariant Feature Transform on the Sphere: Theory and Applications》论文阅读和源码理解(一)

    <Scale Invariant Feature Transform on the Sphere: Theory and Applications>论文阅读和源码理解(一) 摘要 主要贡献 ...

  5. [转载]SIFT(尺度不变特征变换)算法小结

    原文地址:SIFT(尺度不变特征变换)算法小结[转]作者:慕容天峰 最近一直在看SIFT算法.Sift是David Lowe于1999年提出的局部特征描述子,并于2004年进行了更深入的发展和完善.S ...

  6. 数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法

    数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法 一.概述: 提到特征点算法,首先就是大名鼎鼎的SIFT算法了.SIFT的全称是Scale Invariant Feature Transf ...

  7. SIFT(尺度不变特征变换)原理与简单应用

    目录 1.SIFT(Scale Invariant Feature Transform)简介 1.1.SIFT算法的操作步骤 兴趣点的检测: 特征方向的赋值: 特征点描述: 1.2.SIFT算法的适用 ...

  8. OpenCV中的尺度不变特征变换(SIFT Scale-Invariant Feature Transform)

    OpenCV中的尺度不变特征变换(SIFT Scale-Invariant Feature Transform) 1. 效果图 2. 原理 2.1 步骤 2.2 opencv实现方法 2.3 SIFT ...

  9. 尺度不变特征变换(SIFT算法)Matlab程序代码测试例子的说明(Lowe的代码)

    目前网络上可以找到的关于SIFT算法Matlab测试代码的资源就是: 1 加拿大University of British Columbia 大学计算机科学系教授 David G. Lowe发表于20 ...

最新文章

  1. R语言dplyr包combine()函数实现数据拼接(concatenate)实战
  2. logstash 自动重新加载配置
  3. 中文表示什么_越南水果摊贴出中文标语,看清文字内容后,中国游客:不再吃了...
  4. CodeForces - 1096D Easy Problem(线性dp)
  5. rebuild online意外终止导致ora-8104错误的实验
  6. java打印数组_Java中打印数组内容的方式有哪些?
  7. Django使用本机IP无法访问,使用127.0.0.1能正常访问
  8. java 惊群效应,eureka的惊群效应
  9. Voxengo音频插件合集:Voxengo Total Bundle Mac
  10. java pdf合并_利用iText 合并PDF与分解PDF的例子
  11. oracle 获取月份_网络工程师干货 | 2020年7月份最新的华为HCIARS培训教程,画质超级好!...
  12. css背景图不失真_CSS如何实现这种背景效果?
  13. windows 环境 批量下载 小破站 视频 bat 脚本
  14. Leetcode刷题-459:重复的子字符串
  15. Word处理控件Aspose.Words功能演示:使用 Java 将 Word 文档转换为 Markdown
  16. 实验有效的js原生前端 全国三级联动
  17. 谷粒商城高级篇(36)——商品上架之上传数据到Elasticsearch
  18. Review of 2012 Goal for 2013
  19. 深入理解Activity的生命周期
  20. 大数据(0b)离线数据仓库

热门文章

  1. 欧几里得空间——度量矩阵
  2. python编辑用户登录界面_python编辑用户登入界面的实现代码
  3. java中上传文件_Java中文件上传下载 --使用Minio
  4. js比较两个String字符串找出不同,并将不同处高亮显示
  5. linux如何ARP嗅探 Linux下嗅探工具Dsniff安装记录
  6. 可变数组NSMutableArray
  7. android HDMI 清晰度 分辨率
  8. .Net学习笔记----2015-07-10(GDI绘图)
  9. 分布式集群的Session问题
  10. thinkPHP源码目录介绍