SIFT算法步骤梳理
简介:SIFT算法是检测和描述局部特征的一种方法,具有尺度不变性,对于光线,噪声等的容忍度相当高。即便少数几个物体也可以产生大量SIFT特征。
SIFT算法实质上是在不同尺度空间上查找关键点,并计算出关键点的方向。
算法步骤:
1.构建尺度空间
- 利用高斯核来构建
- 高斯核是唯一可以产生多尺度空间的核,也是唯一线性核,利用高斯核对图像模糊处理不会引入其他噪声。
- 高斯核函数:
- 输入图像通过高斯核函数连续的对尺度进行参数变换,最终得到多尺度空间序列。图像中某一尺度的空间函数由高斯函数和原输入图像I(x,y)卷积得出:
- 高斯金字塔
- 模仿图像的不同尺度
- 生成步骤:高斯平滑-->对图像做下采样(一般先将图像扩大一倍,在扩大的图像基础上构建高斯金字塔,然后您对该尺寸下图像进行高斯模糊,几幅模糊的图像集合构成了一个八度,然后对该八度下倒数第三张图片进行下采样,长和宽分别缩短一倍,图像面积变为原来的四分之一。以此类推)
- 为什么选倒数第三张进行下采样?为了保持尺度空间的连续性,根据下图公式可以计算得出第o组第S层的图像尺度,可以发现下一组的第o层图像恰好和上一组倒数第三张图一致,所以每一组的第0张图像只需要用上一层的倒数第三张进行下采样即可。
2.DoG
- Laplace operator:二阶导
- LoG(Laplace of Gaussian)
- 把拉普拉斯算子和高斯函数联合到了一个步骤
- 等价于先对高斯函数求二阶导,再与原图进行卷积
将高斯拉普拉斯算子展开:
又有:
- DoG:对不同尺度下的高斯函数的差分
DoG算子为
DoG算子和LoG算子具有类似的波形,且计算复杂度低,所以一般用DoG代替LoG算子。
- DoG vs LoG
- 高斯差分图像
3.DoG定位极值点
- 特征点是由DoG空间的局部极值点组成的。
- 每一个像素要和他所有的相邻点比较(中间的监测点和它同尺度的8个相邻点和上下相邻尺度对应的9*2个,共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点)
- 确定潜在特征点
- 检测到的局部极值点A(x,y,σ)是离散情况下的一个极值点,如果考虑连续情况,则极值点可能落在了A点的附近(Δx,Δy,Δσ)(如下图所示),而真正的极值点B可以表示为在点A处的泰勒展开。
令上面D(x)的一阶导数为0,可以得到
- 对以上过程进行多次迭代(最多5次)得到最终候选点的精确位置.(偏移超过0.5时更新当前像素点,若没有超过0.5,则当前像素加上偏移就是精确点)
4.边缘和低对比度响应(移除某些特征点)
- 移除低对比度的点:D(X')小于0.03的点
- 移除边缘点:利用hessian矩阵
5.确定关键点方向
- 利用特征点领域像素的梯度来确定其方向参数
- 对于已经检测到的特征点,已知其尺度σ,可以确定该尺度下的高斯图像
- 梯度方向
- 梯度幅值
- 利用图像的梯度直方图求取关键点局部结构的稳定方向
- 以关键点为原点,一定区域内的图像像素点对关键点方向生成所做的贡献。
- 构建梯度直方图,梯度方向决定位于直方图的哪个槽(共36个槽,每10度划分一个),幅值加权更新槽内幅值的和。
6.构建关键点描述子(keypoints descriptor)
- 校正主方向,确保旋转不变性
- 以特征点为中心,将坐标轴旋转到特征点的主方向
- 生成描述子,形成128维的特征向量
- 基于梯度方向直方图,每45度一个划分,共划分8个槽
- 在每个4*4的小方块内绘制8个方向的梯度直方图,计算幅值,即形成一个种子点
- 对每个关键点使用16个种子点来描述,每个种子点有8个方向的信息,即形成了128为特征向量
- 归一化处理特征向量的长度,进一步去除光照的影响。
参考博文:
SIFT特征详解 - Brook_icv - 博客园
SIFT解析(二)特征点位置确定 - DreamFaquir - 博客园
SIFT解析(三)生成特征描述子_honpey爱编程-CSDN博客
SIFT定位算法关键步骤的说明 - ☆Ronny丶 - 博客园
SIFT算法步骤梳理相关推荐
- SIFT算法学习心得
文章转自:http://www.yongblog.com/archives/256.html 这篇文章主要介绍 SIFT 算法.希望通过对 SIFT 算法的总结来更加深入地了解"尺度不变特征 ...
- SLAM-Visual Navigation学习之SIFT算法与代码详解
** SIFT算法 ** 文章目录 SIFT算法 一.特征点,关键点,角点? 二.前置知识 1.尺度 2.卷积 3.高斯函数 4.高斯卷积(模糊) 三.SIFT算法的引入 Harris算法缺陷: 1. ...
- 图像特征提取与匹配——SIFT算法
图像特征提取与匹配--SIFT算法 尺度不变特征转换(Scale-invariant feature transform 或 SIFT)是一种用来侦测与描述影像中局部性特征的算法,它在空间尺度中寻找极 ...
- 经典算法研究系列:图像特征提取与匹配之SIFT算法
尺度不变特征转换(Scale-invariant feature transform 或 SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置 ...
- 图像特征提取与匹配之SIFT算法
推荐阅读: David G. Lowe, "Distinctive image features from scale-invariant keypoints," Interna ...
- 经典算法研究系列:九、图像特征提取与匹配之SIFT算法
经典算法研究系列:九.SIFT算法研究 作者:July.二零一一年二月十五日. 推荐阅读: David G. Lowe, "Distinctive image features from s ...
- sift算法的主要步骤
主要步骤 1).尺度空间的生成: 2).检测尺度空间极值点: 3).精确定位极值点: 4).为每个关键点指定方向参数: 5).关键点描述子的生成. L(x,y,σ), σ= 1.6 a good tr ...
- SIFT算法详解——图像特征提取与匹配
文章目录 前言 一.建立高斯差分金字塔 1.建立高斯金字塔 2.建立高斯差分金字塔 3.建塔过程中参数的设定及相关细节问题 二.关键点(key points)位置确定 1.阈值化 2.在高斯差分金字塔 ...
- SURF算法与SIFT算法的性能比较——图像特征点检测与提取算法分析
图像特征点提取算法的算法研究(SURF和SIFT算法) 1. 摘要 计算机视觉中,很大一部分研究集中在图像特征提取和特征生成算法上.对图像的优化,不同于一般数学问题的优化方法,图像的优化是对像素点,在 ...
- CS131-专题7:图像特征(SIFT算法)
速记要点: SIFT是什么:全称Scale Invariant Feature Transform尺度不变特征转换,2004年的论文.可以检测出图像中的局部特征点. SIFT算法特点: 稳定性:SIF ...
最新文章
- 禅道设置bug模板_JPress v3.0 beta.2 发布,修复 bug 和完善产品细节
- java实现 k nn算法_数据挖掘(二)——Knn算法的java实现
- keras inception_resnet_v2训练
- mysql服务器的启动方式有哪几种_Mysql启动的方式(四种)
- 插值法补齐缺失数据_关于数据清洗的常见方式
- 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix
- 【Linux】Linux服务器(centos7)环境搭建java/python3/nginx
- java如何使用promql_Prometheus 常用 PromQL 语句
- java中jsp时间插件_日期插件 - WEB源码|JSP源码/Java|源代码 - 源码中国
- Java棘手面试问题
- idea 自动加头部注释
- 【程序设计训练】1-7 F1方程式冠军
- python导出excel文件数字签名_如何使用带有etoken(笔驱动器)的Python对PDF文档进行数字签名?...
- 单身职场人士怎么利用晚上时间提高自己?
- 【Java攻城狮宝典】04-for循环
- Caddy源码阅读(一)Run详解
- PTA 2 时钟类-1(用默认的构造方法)分数 10
- diy网页加速服务器教程,巧用网络加速工具 加速网页浏览速度
- Java——闰年的判断方法,闰年概念
- Lanius大数据治理平台