SIFT–尺度空间、高斯金字塔

SIFT–尺度空间、高斯金字塔尺度空间高斯金字塔高斯模糊下采样高斯金字塔的构造过程差分高斯金字塔构造过程SIFT成名已久,但理解起来还是很难的,一在原作者Lowe的论文对细节提到的非常少,二在虽然网上有许多相应博文,但这些博文云里雾里,非常头疼,在查看了许多资料了,下面贴出我自己的一些理解,希望有所帮助。Lowe把SIFT分为四个阶段:构建尺度空间、关键点的定位、方向分配、特征描述符。下面分别从这四个阶段来阐述。尺度空


Jetbrains全系列IDE稳定放心使用


SIFT成名已久,但理解起来还是很难的,一在原作者Lowe的论文对细节提到的非常少,二在虽然网上有许多相应博文,但这些博文云里雾里,非常头疼,在查看了许多资料了,下面贴出我自己的一些理解,希望有所帮助。


Lowe把SIFT分为四个阶段:构建尺度空间、关键点的定位、方向分配、特征描述符。下面分别从这四个阶段来阐述。

尺度空间

尺度空间是一个比较晦涩的概念,但尺度空间在自然空间中又是真是存在的,这里我们先从尺度谈起,在自然界物体都是由大小不同的实体组成,我们描述着些实体比如说房子、桌子一般会说有多高或者有多大,那么这个多高和多大一般所说就是长度和占地面积。在肉眼可见的情况下,我们常用厘米、米这样的标量尺度来描述长度和占地面积。而很少用纳米和微米这样很小的尺度。也就是说尺度是用来衡量一个量的一个标准。即我们可以用厘米来描述一个桌子多高,也可以用纳米来描述(当然生活中是没必要的)。
再来一个地图的例子,有世界地图和北京地图俩幅。在世界地图上(大尺度下)我们只能看到的是每一个国家的分布,但这个国家的仔细信息我们在这个尺度上是看不到的。但在北京地图上(小尺度下)我们就能清晰看出每一个街道或者商铺的名称。所以往往大尺度下关注的是物体的全局信息,如物体的轮廓等,小尺度下则更注重物体的细节。

以上,对现实中物体的描述一定要在一个十分重要的前提下进行,即对自然界建模时的尺度。当我们用一个机器视觉系统分析未知场景时,计算机没有办法预先知道图像中物体尺度,因此我们需要同时考虑图像在多尺度下的描述,获知感兴趣物体的最佳尺度。图像的尺度空间表达指的就是图像在所有尺度下的描述。

高斯金字塔

提到信号多尺度描述,容易想到信号的金字塔化。用金字塔来作为图像尺度的表示形式时一般有俩个步骤:

1、用低通滤波器进行平滑。
2、对平滑过的图像进行下采样。

在用金字塔来作为尺度变化的描述时,我们要明确一点:这里的低通滤波器只能用高斯滤波。因为高斯核是实现尺度变换的唯一线性核(Lindeberg等人已经证明过)。而且不同的高斯核组成的尺度空间具有半群结构、尺度不变性和旋转不变性等。当金字塔的核为高斯核时,我们称为高斯金字塔。

所以我们首先要做的就是把处于不同尺度下的图片用高斯金字塔表示出来。
高斯金字塔分俩步:高斯模糊、下采样。

高斯模糊

高斯模糊在这片博文中有讲到,具体细节不阐述,这里贴出公式。

 G(x,y,σ)=12πσ2e−(x2+y2)/2σ2 





 σ 
在高斯函数中为正态分布的标准差。在用高斯金字塔表示尺度形式时

 σ 
定义为尺度大小。

我们定义原图像大小为

 I(x,y) 



尺度空间定义为原图像与高斯模糊卷积得到,尺度空间的表达式为

 L(x,y,σ)=G(x,y,σ)⨂I(x,y) 



很明显,在

 σ>=0 
才有意义,当

 σ=0 
表示对原图像无操作。当

 σ 
越大,尺度越大,也就是模糊程度越高。

下采样

生成对应的显示缩略图,分辨率是逐渐降低的。这里的下采样因子是2。
具体事例参见下图:
高斯金字塔

高斯金字塔的构造过程

这里我们先给出构造好的高斯金字塔,并解释其中用到的各种参数。
高斯金字塔
如图,这个高斯金字塔有5组(octave),每个Octave内又包含若干层。所有我们定义第一个参数   O  ,表示高斯金字塔的组数。
 σ  我们称为尺度参数,第一组第一层的尺度参数为  σ  ,且Lowe认为最优的  σ=1.6  。
且组间尺度关系倍数为2,如第二组的尺度参数是第一组尺度参数的俩倍(同一层的俩倍)。但组内尺度参数是不同的,且有比例关系  σn=kn−1⋅σ1  ,  σ1  指的是该组的第一层尺度,   k  称为比例系数,作者给出   k=21s  。这个关系适用于高斯金字塔的所有层。

具体步骤:

1、为获取更多的稳定的特征点数目,对原始图像做放大一倍操作,得到尺度参数  σ=1  (作者这里假定原始图像已有 σ=0.5  的高斯模糊)
2、所以为了得到第一组第一层图片的  σ=1.6  ,运用高斯模糊的半群性质。要对放大后的图像作  1.62−(0.5×2)2−−−−−−−−−−−−−√  的高斯平滑。
3、得到第一组第一层图片的尺度后,运用公式  σn=k⋅σ1  通过高斯模糊分别计算其它层的结果。
4、我们将第一组倒数第三层的图片作比例因子为2的降采样,结果作为第二组的第一层(第二组第一层的尺度是第一组第一层尺度的俩倍)。同理,运用公式  σn=k⋅ 2σ1  通过高斯模糊分别计算其它层的结果。
5、将第二组第三层的图片做比例因子为2的降采样,结果作为第三层第一组的结果,同样要注意初始尺度的变化,其它处理跟第二组同。
6、后面每组的处理都跟前面相同。

差分高斯金字塔构造过程

顺便阐述差分金字塔的构造过程,然后再贴出解释
在Lindeberg的论文《Scale-space theory: A basic tool for analysing structures at different scales》 指出尺度规范化的LoG算子具有真正的尺度不变性。即我们可以在不同尺度的图像(已经经过高斯卷积)上进行拉普拉斯运算(二阶导数),并求极值点,从而求出关键点。但这样做运算很大,Lowe做了近似处理。将高斯差分算子DOG近似于LoG算子。

差分高斯金字塔的公式如下:

D(x,y,σ)=(G(x,y,kσ)−G(x,y,σ))⨂I(x,y)=L(x,y,kσ)−L(x,y,σ) 



简单来说,
高斯金字塔每一组内相邻俩层的图片相减得到差分高斯金字塔。具体见下图。

差分高斯金字塔

极值点的检测是在差分高斯金字塔中进行的,Lowe提出每一层极值点是在三维空间中比较获得的,即这个极值点是同相邻俩层和本层周围点共26个点比较得出的,注意这里极值点是备选关键点,后面还要进一步处理,具体如下图:
极值点检测

高斯金字塔和差分高斯金字塔整个过程见下图:

高斯金字塔和差分高斯金字塔

一些解释:因为Lowe原文中对具体实现细节描述甚少,网上的一些资料也都是交代的模模糊糊,比如每层间的尺度的计算,都讲的不清楚,我也只贴出具体关系和已理解的部分。

1、高斯金字塔中每层图片数如何确立?
高斯金字塔每个Octave必须有s+3幅picture。因为极值点检测是在差分高斯金字塔中进行的,即每一层的极值点是必须有相邻俩层比较才能得出。所以差分高斯金字塔每组必须有s+2幅picture,因为差分高斯金字塔是由高斯金字塔相邻俩幅picture减去得来。所以反推得出高斯金字塔中每组有s+3幅picture。作者推荐   s=3  。

2、尺度空间的连续性如何体现?
Lowe设  s=3  ,且有   k=21s  ,则第一组中的尺度依次为:

 σ,213σ,223σ,233σ,243σ,253σ 



相应的差分高斯金字塔中的尺度为:


 σ,213σ,223σ,233σ,243σ 



极值点只能在差分高斯金字塔的中间三层取得,我们依次写下可以取得极值点的尺度:

 213σ,223σ,233σ,243σ,2⋅213σ,2⋅223σ,2⋅233σ,2⋅243⋯ 

我们可以发现这些数据是离散连续的,也就是说通过高斯金字塔描述的尺度空间是连续的,
这样在尺度空间的极值点确定过程中,我们不会漏掉任何一个尺度上的极值点。

3、下一组的第一层图片如何得到?
下一组第一层的图片由上一组倒数第三层下采样得到。由  2  中可知,倒数第三层的尺度为   233σ=2⋅σ  ,所以第二组第一层图片的尺度正好是第一组第一层的俩倍。
具体过程也有从Lowe的源码反推的,这里不贴了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181961.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 整理了十五道为数不多的tomcat面试题,错过就没了!

    整理了十五道为数不多的tomcat面试题,错过就没了!当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)在servlet注册时加上如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

    2022年6月6日
  • linux如何改文件内容,linux下用命令修改文件内容

    linux如何改文件内容,linux下用命令修改文件内容linux下vi命令修改文件及保存的使用方法进入vi的命令vifilename:打开或新建文件,并将光标置于第一行首vinfilename:打开文件,并将光标置于第n行首vifilename:打开文件,并将光标置于一行首v…(转)linux下vi命令修改文件及保存的使用方法进入vi的命令vifilename:打开…

    2022年7月26日
  • xshell连接虚拟机使用的是什么连接模式_虚拟机安装ssh服务

    xshell连接虚拟机使用的是什么连接模式_虚拟机安装ssh服务XShell使用前提:1.对应的需要连接的虚拟机在vm中开机着2.下载并安装好XShell3.虚拟机网络连通(具体可看(5条消息)Hadoop(1)——Hadoop集群构建(4)——Linux系统网络配置_连胜是我偶像的博客-CSDN博客使用教程:1.点击新建,输入名称(该名称为xshell中使用的名称),输入主机(对应虚拟机的ip地址)2.右键新建的会话,点击打开3.输入账号密码进行登录4.成功标志…

    2022年9月2日
  • 逻辑删除还是物理删除

    逻辑删除还是物理删除看到标题,有的童鞋心中暗想“数据删除有什么可提的呢?不就是执行个delete语句吗?有什么难的呀?”其实呢数据删除没有你想的这么简单,一般情况下公司会明确的要求数据只能逻辑删除,不能物理删除。那什么优势逻辑删除,什么又是物理删除呢?物理删除就是我们之前常用的DELETE、TRANCATE、DROP语句删除数据,不管你用哪种方式,都是将数据从硬盘上抹除,这样数据表的体积就变小了,数据的读写性能就提上去了。有个共识InnoDB引擎的数据表记录一旦超过2000万,它的读写性能就很差,我们用物理删除能缩小表

    2022年6月2日
  • rsyslog日志管理[通俗易懂]

    rsyslog日志管理[通俗易懂]文章目录简介基本维护核心概念实例配置客户端日志服务器输出日志到mysql简介rsyslog是一个快速的日志处理系统,具有卓越的性能和出色的安全性,采用模块化设计,他可以从各种数据源中接收输入、转换数据再将结果输出到指定的位置。他不仅适用于企业,也适用于小型系统。rsyslog是一个c/s架构,既可以作为日志客户端上报日志,也可以作为服务端接收日志rsyslog是模块化设计,因此很多功能需要…

    2022年9月24日
  • cglib代理[通俗易懂]

    cglib代理[通俗易懂]cglib代理​ 在此之前,我们学习了JDK动态代理,而JDK动态代理有一定的局限性,因为使用JDK动态代理时,被代理类必须实现接口,然后动态代理生成的代理类同时实现该接口实现代理模式,但在特定情况下没办法让被代理类实现接口,那么此时我们就需要使用cglib代理。代理模式的三要素两个成员:被代理对象、执行者(类似于Spring中切面的概念)使用场景:当某件事情不方便自己做,但是必须要做时…

    2022年5月6日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号