简介: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个点比较,以确保在尺度空间和二维图像空间都检测到极值点)
  1. 确定潜在特征点
  • 检测到的局部极值点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算法步骤梳理相关推荐

  1. SIFT算法学习心得

    文章转自:http://www.yongblog.com/archives/256.html 这篇文章主要介绍 SIFT 算法.希望通过对 SIFT 算法的总结来更加深入地了解"尺度不变特征 ...

  2. SLAM-Visual Navigation学习之SIFT算法与代码详解

    ** SIFT算法 ** 文章目录 SIFT算法 一.特征点,关键点,角点? 二.前置知识 1.尺度 2.卷积 3.高斯函数 4.高斯卷积(模糊) 三.SIFT算法的引入 Harris算法缺陷: 1. ...

  3. 图像特征提取与匹配——SIFT算法

    图像特征提取与匹配--SIFT算法 尺度不变特征转换(Scale-invariant feature transform 或 SIFT)是一种用来侦测与描述影像中局部性特征的算法,它在空间尺度中寻找极 ...

  4. 经典算法研究系列:图像特征提取与匹配之SIFT算法

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

  5. 图像特征提取与匹配之SIFT算法

    推荐阅读: David G. Lowe, "Distinctive image features from scale-invariant keypoints,"  Interna ...

  6. 经典算法研究系列:九、图像特征提取与匹配之SIFT算法

    经典算法研究系列:九.SIFT算法研究 作者:July.二零一一年二月十五日. 推荐阅读: David G. Lowe, "Distinctive image features from s ...

  7. sift算法的主要步骤

    主要步骤 1).尺度空间的生成: 2).检测尺度空间极值点: 3).精确定位极值点: 4).为每个关键点指定方向参数: 5).关键点描述子的生成. L(x,y,σ), σ= 1.6 a good tr ...

  8. SIFT算法详解——图像特征提取与匹配

    文章目录 前言 一.建立高斯差分金字塔 1.建立高斯金字塔 2.建立高斯差分金字塔 3.建塔过程中参数的设定及相关细节问题 二.关键点(key points)位置确定 1.阈值化 2.在高斯差分金字塔 ...

  9. SURF算法与SIFT算法的性能比较——图像特征点检测与提取算法分析

    图像特征点提取算法的算法研究(SURF和SIFT算法) 1. 摘要 计算机视觉中,很大一部分研究集中在图像特征提取和特征生成算法上.对图像的优化,不同于一般数学问题的优化方法,图像的优化是对像素点,在 ...

  10. CS131-专题7:图像特征(SIFT算法)

    速记要点: SIFT是什么:全称Scale Invariant Feature Transform尺度不变特征转换,2004年的论文.可以检测出图像中的局部特征点. SIFT算法特点: 稳定性:SIF ...

最新文章

  1. 禅道设置bug模板_JPress v3.0 beta.2 发布,修复 bug 和完善产品细节
  2. java实现 k nn算法_数据挖掘(二)——Knn算法的java实现
  3. keras inception_resnet_v2训练
  4. mysql服务器的启动方式有哪几种_Mysql启动的方式(四种)
  5. 插值法补齐缺失数据_关于数据清洗的常见方式
  6. 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix
  7. 【Linux】Linux服务器(centos7)环境搭建java/python3/nginx
  8. java如何使用promql_Prometheus 常用 PromQL 语句
  9. java中jsp时间插件_日期插件 - WEB源码|JSP源码/Java|源代码 - 源码中国
  10. Java棘手面试问题
  11. idea 自动加头部注释
  12. 【程序设计训练】1-7 F1方程式冠军
  13. python导出excel文件数字签名_如何使用带有etoken(笔驱动器)的Python对PDF文档进行数字签名?...
  14. 单身职场人士怎么利用晚上时间提高自己?
  15. 【Java攻城狮宝典】04-for循环
  16. Caddy源码阅读(一)Run详解
  17. PTA 2 时钟类-1(用默认的构造方法)分数 10
  18. diy网页加速服务器教程,巧用网络加速工具 加速网页浏览速度
  19. Java——闰年的判断方法,闰年概念
  20. Lanius大数据治理平台

热门文章

  1. Unity 根据文件路径批量修改图片格式
  2. Python实现向量自回归(VAR)模型——完整步骤
  3. github注册以及安装教程
  4. smart3d加载到谷歌_到底什么是Google Smart Lock?
  5. PS插件:灯光工厂安装教程
  6. JSP学习——EL表达式和JSTL学习小结
  7. 华为扩大内存代码_荣耀手机扩大内存代码_华为手机内存扩大拨号代码
  8. 服务器“**”上的MSDTC不可用的解决办法
  9. nsis使用URLDownloadToFile下载文件
  10. 腾讯教育 App Flutter 跨端点播组件实践