热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Sift十大问

ScaleInvariantFeatureTransform(SIFT)十大问向经典致敬1为什么要讨论尺度空间2为什么要建立高斯金字塔3为什么是高斯滤波?4为什么高斯

     Scale Invariant Feature Transform(SIFT)  十大问

         向经典致敬

  

             

              1 为什么要讨论尺度空间

              2 为什么要建立高斯金字塔

              3 为什么是高斯滤波?

              4 为什么高斯差分金字塔可以粗定位极值点?


            ************************************************************************

             1 为什么要讨论尺度空间

图像尺度空间感受实例

   感受什么是尺度空间

2尺度空间方法的基本思想是:

在视觉信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得不同尺度下的视觉处理信息,然后综合这些信息以深入地挖掘图像的本质特征。尺度空间方法将传统的单尺度视觉信息处理技术纳入尺度不断变化的动态分析框架中,因此更容易获得图像的本质特征。尺度空间的生成目的是模拟图像数据多尺度特征。高斯卷积核是实现尺度变换的唯一线性核。

3尺度空间理论的动机:

a)       现实世界的物体由不同尺度的结构所组成;

b)       在人的视觉中,对物体观察的尺度不同,物体的呈现方式也不同;

c)       对计算机视觉而言,无法预知某种尺度的物体结构是有意义的,因此有必要将所有尺度的结构表示出来;

d)       从测量的角度来说,对物体的测量数据必然是依赖于某个尺度的,例如温度曲线的采集,不可能是无限的,而是在一定温度范围进行量化采集。温度范围即是选择的尺度;

e)       采用尺度空间理论对物体建模,即将尺度的概念融合入物理模型之中。

图像尺度空间理论

当用一个机器视觉系统分析未知场景时,计算机没有办法预先知道图像中物体尺度,因此,我们需要同时考虑图像在多尺度下的描述,获知感兴趣物体的最佳尺度。所以在很多时候,我们会在将图像构建为一系列不同尺度的图像集,在不同的尺度中去检测我们感兴趣的特征。

5  最为基础的四类尺度空间

线性尺度空间

非线性尺度空间

形尺度空间

数学形态学尺度空间

线性尺度空间方法较好地体现了视觉多尺度分析的思想, 因而最早广泛应用于图像滤波和深层结构分析。然而, 线性尺度空间具有以下明显缺陷: 一方面, 热扩散方程描述的是各向同性的扩散过程, 因此在光滑图像时, 任意象素点的灰度值在各个方向的扩散都相同, 这必然引起图像边缘模糊化; 另一方面, 对比度不变性和线性性是一对矛盾, 热扩散方程的线性性决定了它无法满足对比度不变性,随着尺度t 的增加, 图像逐渐光滑, 但图像的细节信息逐渐变得模糊, 且对比度发生了显著变化, 这是图像处理所不愿看到的。因此, 为克服线性尺度空间的缺陷, 必须研究非线性尺度空间方法。

非线性尺度空间

对比度不变性和仿射不变性,而这些性质是线性尺度空间方法所不具备的。

形(shape)尺度空间

线性尺度空间和非线性尺度空间关注的是图像的整个空间区域, 然而在视觉识别和分析中, 我们也常常关心图像中的某些局部区域( 例如水平集和水平线)。形尺度空间是通过演化围成局部区域的约当曲线来分析图像局部特征的多尺度分析方法。

数学形态学尺度空间

数学形态学的基本思想是: 通过调整所含参数, 逐渐简化图像, 但同时保持图像的基本形状,因此其分析图像的过程具有视觉多尺度分析的特征。将数学形态学纳入尺度空间框架, 它主要由膨胀和腐蚀两类基本算子构成,在一定条件下, 非线性尺度空间方法可以通过数学形态学中的膨胀( 或腐蚀) 算子和仿射不变迭代滤波算子来实现, 而反之亦然。这说明两种尺度空间方法在一定意义上是一致的。

参考:《计算机视觉中的尺度空间方法*》孙剑, 徐宗本

************************************************************************

 2 为什么要建立高斯金字塔

 

   金字塔是图像多尺度表示的主要形式,图像金字塔是以多分辨率来解释图像的一种有效但概念简单的结构。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低的图像集合。大小不同的图像获取的信息因此尺度问题会产生不同的信息,(第一问尺度空间可以解释这个小问题),一般抽样比例在水平和竖直方向上都为1/2,从而得到一系列的缩小的图像。

    高斯金字塔模仿的是图像的不同的尺度,尺度应该怎样理解?对于一副图像,你近距离观察图像,与你在一米之外观察,看到的图像效果是不同的,前者比较清晰,后者比较模糊,前者比较大,后者比较小,通过前者能看到图像的一些细节信息,通过后者能看到图像的一些轮廓的信息,这就是图像的尺度,图像的尺度是自然存在的,并不是人为创造的。

每个金字塔共n层。金字塔的层数根据图像的原始大小和塔顶图像的大小共同决定。

高斯金字塔则是金字塔的进一步优化,为了让尺度体现其连续性。分为阶和层两个概念,每个阶直接通过降采样,每层之间是通过不同的高斯核实现。

多尺度和多分辨率

尺度空间表达和金字塔多分辨率表达之间最大的不同是:

  • 尺度空间表达是由不同高斯核平滑卷积得到,在所有尺度上有相同的分辨率;
  • 而金字塔多分辨率表达每层分辨率减少固定比率。

所以,金字塔多分辨率生成较快,且占用存储空间少;而多尺度(只进行高斯滤波)表达随着尺度参数的增加冗余信息也变多。多尺度表达的优点在于图像的局部特征可以用简单的形式在不同尺度上描述;而金字塔表达没有理论基础,难以分析图像局部特征。

Sift的高斯金字塔就是高斯滤波+金字塔,一般有4阶(分辨率上的区分),每一阶有5层(不同的高斯参数进行滤波)。

 ************************************************************************

3 为什么是高斯滤波?

    高斯核是唯一可以产生多尺度空间的线性核《Scale-space theory: A basic tool for analysing structures atdifferent scales》

使用高斯滤波器对图像进行尺度空间金塔塔图的构建,让这个尺度空间具有下面的性质:

1 加权平均和有限的孔径效应  2 层叠平滑

3 局部极值传递性            4 尺度伸缩不变性

高斯模版是圆对称的,且卷积的结果使原始像素值有最大的权重,距离中心越远的相邻像素值权重也越小。在实际应用中,在计算高斯函数的离散近似时,在大概3σ距离之外的像素都可以看作不起作用,这些像素的计算也就可以忽略。所以,通常程序只计算(6σ+1)*(6σ+1)就可以保证相关像素影响。

高斯模糊另一个很厉害的性质就是线性可分:使用二维矩阵变换的高斯模糊可以通过在水平和竖直方向各进行一维高斯矩阵变换相加得到。O(N^2*m*n)次乘法就缩减成了O(N*m*n)+O(N*m*n)次乘法。(N为高斯核大小,m,n为二维图像高和宽)

*******************************************************************************

   4 为什么高斯差分金字塔可以粗定位极值点? 

下面先讲解一下拉普拉斯算子:

        人眼更敏感的地方往往是图像细节,因此我们感兴趣的是图像灰度突变的开始点与结束点以及沿着灰度斜坡处的微分性质。
一阶微分的性质:
1) 在恒定灰度区域的微分值为零
2) 在灰度台阶或斜坡处为分支非零
3) 沿着斜坡的微分值非零
二阶微分性质:
1) 在恒定灰度区域微分值为零
2) 在灰度台阶或胁迫的起点处微分值非零
3) 沿着斜坡的微分值非零

       很明显一阶微分不仅在图像灰度跳变的地方非零,在灰度斜坡处也非零,这样可以产生粗边缘;而二阶微分只在图像灰度跳变的地方非零,可以产生一个双边缘。二阶微分对精细细节具有较强的相应。

我们更加关注各向同性的滤波器,所谓的各向同性是旋转不变的,即将原图像进行旋转后进行滤波处理给出的结果与先对图像进行滤波然后再旋转的结果相同。

因此我们希望用一个二阶微分且是各向同性的——》其中最简单各向同性微分二阶算子就是拉普拉斯算子了

转化为俩个变量的离散拉普拉斯算子:


       Laplace算子是通过对图像进行微分操作实现边缘检测的,所以对离散点和噪声比较敏感。于是,首先对图像进行高斯卷积滤波进行降噪处理,再采用Laplace算子进行边缘检测,就可以提高算子对噪声和离散点的鲁棒性,如此,拉普拉斯高斯算子Log (Laplace of Gaussian)就诞生了。

高斯-拉普拉斯算子其实就是:先对图像进行高斯模糊,然后再求二阶导数,二阶导数等于0处对应的像素就是图像的边缘

因为高斯差算子(DOG)与高斯-拉普拉斯(LOG)存在关系,所以使用了高斯差分算子,那么下面看看他们的关系。

首先直接说出结论:

  1 高斯差分计算简单,速度快,因为它利用高斯卷积的减法运算。但通过减法取代LoG核的计算过程,显著减少了运算次数。

  2高斯差分是对尺度归一化的一个很好的近似,而尺度归一化的空间具有真正的尺度不变性。     

 

一幅二维图像在不同尺度空间可以表示由图像的高斯核卷积得到:

      ,   

      D(x,y,z)=\frac{s}{ss}

       构建高斯差尺度空间DOG: 

     

      

在实际计算时,使用高斯金字塔每组中相邻上下两层图像相减,得到高斯差分图像,然后进行极值检测,关键点是由DOG空间的局部极值点       组成的。SIFT里面:一个像点与同层的8个,上下分别9个像素,一共26个像素点进行比较,都大或者都小则记录为极值点。




参考:SIFT算法详解

           小魏的修行路




推荐阅读
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 本文介绍了几种常用的图像相似度对比方法,包括直方图方法、图像模板匹配、PSNR峰值信噪比、SSIM结构相似性和感知哈希算法。每种方法都有其优缺点,适用于不同的应用场景。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 题目《BZOJ2654: Tree》的时间限制为30秒,内存限制为512MB。该问题通过结合二分查找和Kruskal算法,提供了一种高效的优化解决方案。具体而言,利用二分查找缩小解的范围,再通过Kruskal算法构建最小生成树,从而在复杂度上实现了显著的优化。此方法不仅提高了算法的效率,还确保了在大规模数据集上的稳定性能。 ... [详细]
  • 本文提出了一种基于栈结构的高效四则运算表达式求值方法。该方法能够处理包含加、减、乘、除运算符以及十进制整数和小括号的算术表达式。通过定义和实现栈的基本操作,如入栈、出栈和判空等,算法能够准确地解析并计算输入的表达式,最终输出其计算结果。此方法不仅提高了计算效率,还增强了对复杂表达式的处理能力。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • 当使用 `new` 表达式(即通过 `new` 动态创建对象)时,会发生两件事:首先,内存被分配用于存储新对象;其次,该对象的构造函数被调用以初始化对象。为了确保资源管理的一致性和避免内存泄漏,建议在使用 `new` 和 `delete` 时保持形式一致。例如,如果使用 `new[]` 分配数组,则应使用 `delete[]` 来释放内存;同样,如果使用 `new` 分配单个对象,则应使用 `delete` 来释放内存。这种一致性有助于防止常见的编程错误,提高代码的健壮性和可维护性。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 每日前端实战:148# 视频教程展示纯 CSS 实现按钮两侧滑入装饰元素的悬停效果
    通过点击页面右侧的“预览”按钮,您可以直接在当前页面查看效果,或点击链接进入全屏预览模式。该视频教程展示了如何使用纯 CSS 实现按钮两侧滑入装饰元素的悬停效果。视频内容具有互动性,观众可以实时调整代码并观察变化。访问以下链接体验完整效果:https://codepen.io/comehope/pen/yRyOZr。 ... [详细]
  • 本文探讨了利用JavaScript实现集合的对称差集算法的方法。该算法旨在处理多个数组作为输入参数,同时保留每个数组中元素的原始顺序。算法不会移除单个数组内的重复元素,但会删除在不同数组之间出现的重复项。通过这种方式,能够有效地计算出多个数组的对称差集。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 本文介绍了一种算法,用于计算当前日期在本年度的具体周数。该方法由作者王峰提出,通过私有函数 `weekOfYear` 实现,能够准确地确定当前日期在一年中的周位置。此算法在日历计算和时间管理中具有广泛应用,适用于各种编程语言和应用场景。 ... [详细]
  • LintCode 1218. 计算补数的 JavaScript 算法
    本题要求给定一个正整数,计算其补数。补数是指将该数字的二进制表示逐位取反,然后转换回十进制得到的新数。 ... [详细]
  • 使用 SourceTree 管理 SVN 代码仓库的详细指南
    SourceTree 是一款功能强大的 Git 管理工具,但很多人不知道它同样支持管理 SVN 代码仓库。本文将详细介绍如何使用 SourceTree 来管理和操作 SVN 代码仓库。 ... [详细]
author-avatar
victor
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有