算法 | 尺度不变特征变换匹配算法 Scale Invariant Feature Transform (SIFT)
/******************************************************/
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)相关推荐
- 尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT)
1.SIFT综述 尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取 ...
- 尺度不变特征变换匹配算法详解
尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT) Just For Fun 对于初学者,从David G.Lowe的论文到实现,有许多鸿沟, ...
- SIFT算法详解:Scale Invariant Feature Transform
尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT) Just For Fun zdd zddmail@gmail.com or (zddhu ...
- 《Scale Invariant Feature Transform on the Sphere: Theory and Applications》论文阅读和源码理解(一)
<Scale Invariant Feature Transform on the Sphere: Theory and Applications>论文阅读和源码理解(一) 摘要 主要贡献 ...
- [转载]SIFT(尺度不变特征变换)算法小结
原文地址:SIFT(尺度不变特征变换)算法小结[转]作者:慕容天峰 最近一直在看SIFT算法.Sift是David Lowe于1999年提出的局部特征描述子,并于2004年进行了更深入的发展和完善.S ...
- 数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法
数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法 一.概述: 提到特征点算法,首先就是大名鼎鼎的SIFT算法了.SIFT的全称是Scale Invariant Feature Transf ...
- SIFT(尺度不变特征变换)原理与简单应用
目录 1.SIFT(Scale Invariant Feature Transform)简介 1.1.SIFT算法的操作步骤 兴趣点的检测: 特征方向的赋值: 特征点描述: 1.2.SIFT算法的适用 ...
- OpenCV中的尺度不变特征变换(SIFT Scale-Invariant Feature Transform)
OpenCV中的尺度不变特征变换(SIFT Scale-Invariant Feature Transform) 1. 效果图 2. 原理 2.1 步骤 2.2 opencv实现方法 2.3 SIFT ...
- 尺度不变特征变换(SIFT算法)Matlab程序代码测试例子的说明(Lowe的代码)
目前网络上可以找到的关于SIFT算法Matlab测试代码的资源就是: 1 加拿大University of British Columbia 大学计算机科学系教授 David G. Lowe发表于20 ...
最新文章
- R语言dplyr包combine()函数实现数据拼接(concatenate)实战
- logstash 自动重新加载配置
- 中文表示什么_越南水果摊贴出中文标语,看清文字内容后,中国游客:不再吃了...
- CodeForces - 1096D Easy Problem(线性dp)
- rebuild online意外终止导致ora-8104错误的实验
- java打印数组_Java中打印数组内容的方式有哪些?
- Django使用本机IP无法访问,使用127.0.0.1能正常访问
- java 惊群效应,eureka的惊群效应
- Voxengo音频插件合集:Voxengo Total Bundle Mac
- java pdf合并_利用iText 合并PDF与分解PDF的例子
- oracle 获取月份_网络工程师干货 | 2020年7月份最新的华为HCIARS培训教程,画质超级好!...
- css背景图不失真_CSS如何实现这种背景效果?
- windows 环境 批量下载 小破站 视频 bat 脚本
- Leetcode刷题-459:重复的子字符串
- Word处理控件Aspose.Words功能演示:使用 Java 将 Word 文档转换为 Markdown
- 实验有效的js原生前端 全国三级联动
- 谷粒商城高级篇(36)——商品上架之上传数据到Elasticsearch
- Review of 2012 Goal for 2013
- 深入理解Activity的生命周期
- 大数据(0b)离线数据仓库