目录:

1、高斯尺度空间(GSS - Gauss Scale Space)

2、高斯差分(DOG - Difference of Gauss)

  2.1 生产DoG

  2.2 为什么用DoG来检测特征点

3、GSS尺度选择

  3.1 GSS中尺度值的产生

  3.2 高斯核性质及其在SIFT中的应用


1 GSS(GAUSS SCALE-SPACE)

  It has been shown by Koenderink (1984) and Lindeberg (1994) that under a variety of reasonable assumptions the only possible scale-space kernel is the Gaussian function. Therefore, the scale space of an image is defined as a function, L(x, y, σ), that is produced from the convolution of a variable-scale Gaussian, G(x, y, σ), with an input image, I(x, y):

  唯一能产生尺度空间的核为高斯核函数,所以我们将图像的尺度空间表示成一个函数L(x,y,σ),它是由一个变尺度的高斯函数G(x,y,σ)与图像I(x,y)卷积产生的。即

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

其中*代表卷积操作,G(x, y, σ) 为二维高斯核函数,表示为:

2 DOG(DIFFERENCE OF GAUSS)  

2.1 DOG生成

  SIFT算法建议,在某一尺度上对特征点的检测,可以通过对两个相邻高斯尺度空间的图像相减,得到一个DoG (Difference of Gaussians)的响应值图像D(x,y,σ)。然后,仿照LoG方法,通过对响应值图像D(x,y,σ)进行非最大值抑制(局部极大搜索,正最大和负最大),在位置空间和尺度空间中定位特征点。其中

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

式中,k为相邻尺度空间倍数的常数。

2.2 为什么用DOG来检测特征点

  In addition, the difference-of-Gaussian function provides a close approximation to the scale-normalized Laplacian of Gaussian, σ22G, as studied by Lindeberg (1994). Lindeberg showed that the normalization of the Laplacian with the factor σ2 is required for true scale invariance. In detailed experimental comparisons, Mikolajczyk (2002) found that the maxima and minima of σ22G produce the most stable image features compared to a range of other possible image functions, such as the gradient, Hessian, or Harris corner function.

  Lindeberg证明用σ2标准化的高斯拉普拉斯(∇2G, LOG, Laplacian of Gauss)有着真正的尺度无关的特性,而Mikolajczyk发现,相比于其他一系列函数(比如梯度,Hessian,Harris角点函数等),用σ2标准化的高斯拉普拉斯(σ22G)有着更稳定的图像特征,因此σ22G函数是我们理想的寻找特征点的函数。而在此,我们利用DoG来近似σ22G。

  通过热传导方程也可以帮助我们理解DoG与σ22G之间的近似关系。由热传导方程可知(通常用t=σ2):

对上式进行有限差分运算得:

因此

DoG = G(x, y, kσ) − G(x, y, σ) ≈ (k − 1)σ22G

而常数项(k - 1)并不会影响极值的位置。所以DoG是σ22G的近似。

  对于使用DoG来近似σ22G,有如下优点:

  1. σ22G需要使用两个方向的高斯二阶微分卷积核,而DoG直接使用高斯卷积核,省去了对卷积核的生成的运算量。

  2. DoG保留了各个高斯尺度空间的图像,这样,在生成某一空间尺度的特征时,可以直接尺度空间图像,而无需重新再次生成该尺度的图像。

3 GSS尺度选择

3.1 GSS中尺度值的产生

  由上一节知DoG近似于(k − 1)σ22G,对于常数k,即为相邻高斯尺度空间的两幅图像的尺度倍数,Lowe在文中提到,The approximation error will go to zero as k goes to 1, but in practice we have found that the approximation has almost no impact on the stability of extrema detection or localization for even significant differences in scale, such as k = √2. 文中提到k值大小对于极值的检测没有什么影响。那么k究竟取多大呢?  

  We choose to divide each octave of scale space (i.e., doubling of σ) into an integer number, s, of intervals, so k = 21/s. We must produce s + 3 images in the stack of blurred images for each octave, so that final extrema detection covers a complete octave. Adjacent image scales are subtracted to produce the difference-of-Gaussian images shown on the right. Once a complete octave has been processed, we resample the Gaussian image that has twice the initial value of σ (it will be 2 images from the top of the stack) by taking every second pixel in each row and column. The accuracy of sampling relative to σ is no different than for the start of the previous octave, while computation is greatly reduced.

问题1 为什么用前一个octave中的倒数第三幅图像生成下一octave中的第一幅图像?

  我们通过上图来解释这段话,由 “must produce s + 3 images in the stack of blurred images for each octave” 可知每层octave产生了5幅图像,所以s = 2。 同一octave相邻图像之间尺度为k倍的关系, k = 21/s = 21/2,仔细阅读上一段下划线部分,当完成一层octave的处理后,对2倍σ的高斯图像(即用尺度大小为2σ的高斯函数模糊的图像)进行二分重采样,得到下一个octave的第一幅图像。而这个用尺度大小为2σ的高斯函数模糊的图像总是处于该octave的倒数第三幅(由上往下数,第三幅。原文:it will be 2 images from the top of the stack,程序员都是从0开始数的咯),因为总共一层octave为s+3幅图像,第n层即为knσ0(其中 n = 0,1,...,s,s+1,s+2.  k = 21/s),当n等于s时,knσ0 = 2σ0,第s层即为倒数第三层。

问题2 每层octave为什么生成s+3幅图像?

  在极值比较的过程中,每一组图像的首末两层是无法进行极值比较的,为了满足尺度变化的连续性,生成高斯金字塔每组有s+3层图像。DOG金字塔每组有s+2层图像。见上图,为s = 3的情况,由上一问题可知,GSS中倒数第三幅尺度与下一octave第一幅的尺度相同,由图中红色矩形中的尺度对应为DoG中极值检测的图像,将其各层红色矩形框中的尺度依次排列,即可发现其为以k = 21/s(即k = 21/3)为等比的连续尺度。所以极值检测是在一个连续变化的尺度空间中进行的。如下图:

3.2 高斯核性质及其在SIFT中的应用

  对于二维高斯卷积,有如下性质:

  1. 距离高斯核中心3σ距离外的系数很小,相对于3σ内的系数值可以忽略不计,所以只用(6σ + 1)*(6σ + 1)的面积计算卷积即可。
  2. 线性可分,二维高斯核卷积(计算次数O(n2*M*N))效果等于水平和竖直方向的两个一维高斯核(计算次数O(n*M*N) + O(n*M*N)))累积处理的效果。n*n为滤波器大小,M*N图像大小
  3. 对一幅图像进行多次连续高斯模糊的效果与一次更大的高斯模糊可以产生同样的效果,大的高斯模糊的半径是所用多个高斯模糊半径平方和的平方根。例如,使用半径分别为 6 和 8 的两次高斯模糊变换得到的效果等同于一次半径为 10 (勾股定理)的高斯模糊效果。根据这个关系,使用多个连续较小的高斯模糊处理不会比单个高斯较大处理时间要少。

  其中,性质3有助我们更快速的生成GSS。虽然两个小半径处理时间并不会比单个高斯较大半径处理的时间少,但相对于原图像,我们已经有一个小半径模糊过的图像,即可用另一小半径在现成的图像上进行模糊得到较大半径的模糊效果。例如尺度为σ0的图像已经存在,我们要得到尺度为kσ0的图像,即可只使用尺度为[(kσ0)2-(σ0)2]1/2的核在尺度为σ0的图像上进行模糊,即可得到尺度为kσ0模糊的图像,同理可得到高斯尺度空间各层的图像,使得高斯尺度空间生产得更快。


参考资料:

  1. David G. Lowe Distinctive Image Features from Scale-Invariant Keypoints
  2. 王永明 王贵锦 《图像局部不变性特征与描述》
  3. 高斯模糊 http://zh.wikipedia.org/wiki/%E9%AB%98%E6%96%AF%E6%A8%A1%E7%B3%8A

SIFT中生成DOG尺度空间相关推荐

  1. coco数据集(yoloV5格式)中生成子类数据集

    从coco数据集(yoloV5格式)中生成子类数据集. import os from tqdm import tqdmnames = ['person', 'bicycle', 'car', 'mot ...

  2. vector与结构体联合使用 在磁盘中生成.txt 文件

    一下纯属个人总结.欢迎拍砖!谢谢 我意思到以练促进学习C++编程基础是很有帮助的 这篇文章是我为了熟悉掌握文件流和STL中的vector以及结构体三个只知识点所写的代码: #include <s ...

  3. R语言使用edit函数在Rsudio中生成数据编辑器(在windows中生成编辑器)、在编辑器中输出需要的数据生成最终的dataframe

    R语言使用edit函数在Rsudio中生成数据编辑器(在windows中生成编辑器).在编辑器中输出需要的数据生成最终的dataframe 目录

  4. python在内存中生成Zip文件!

    python在内存中生成Zip文件! - 天真的好蓝啊 - 博客园 python在内存中生成Zip文件! import zipfile import StringIO class MemoryZipF ...

  5. eclipse中生成的html存在中文乱码问题的解决方法

    eclipse中生成的html存在中文乱码问题的解决方法 参考文章: (1)eclipse中生成的html存在中文乱码问题的解决方法 (2)https://www.cnblogs.com/bug-hu ...

  6. oracle中生成大批量数据的方法-下

    方法五:使用PLSQL的数据生成器 首先测试环境建立:dept表 CREATE TABLE dept(deptno NUMBER(6),dname VARCHAR2(20),loc VARCHAR2( ...

  7. java 随机数生成实现_Java中生成随机数的实现方法总结

    搜索热词 在实际开发工作中经常需要用到随机数.如有些系统中创建用户后会给用户一个随机的初始化密码.这个密码由于是随机的,为此往往只有用户自己知道.他们获取了这个随机密码之后,需要马上去系统中更改.这就 ...

  8. java 8位随机数_JAVA中生成指定位数随机数的方法总结

    JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法. 方法一.通过Math类 1 public static String getRandom1(intlen) {2 int rs = ...

  9. 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题

    因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...

  10. 【C 语言】多级指针 ( 在函数中生成 二级指针 | 通过传入的 三级指针 进行间接赋值 )

    文章目录 前言 一.在函数中生成 二级指针 ( 通过传入的 三级指针 进行间接赋值 ) 二.完整代码示例 前言 如果要 通过 函数形参 间接赋值 修改 nnn 级指针, 需要向函数中传入 n+1n + ...

最新文章

  1. 一年六篇顶会的清华大神提出Fastformer:史上最快、效果最好的Transformer
  2. JBoss7官方下载最新版本
  3. OpenCV边缘检测专题
  4. 2014 Super Training #7 F Power of Fibonacci --数学+逆元+快速幂
  5. 天线开路短路检测原理_变频空调通讯电路原理与元件级维修
  6. oracle字段求和_oracle大纲
  7. 禁用win10触摸屏手势_我才发现win10居然有这么多好用的功能
  8. 谷歌 colab_使用Google Colab在Python中将图像和遮罩拆分为多个部分
  9. Python:Python全球生态主站,pip安装方法、集成安装方法、文件安装方法、第三方库自动安装脚本
  10. JQuery 常用积累(五)Datetimepicker和Lodop
  11. 囚徒困境(博弈论的诡计)
  12. 域内,如何限制一台电脑只能指定的域用户登录
  13. Anaconda 3 详细安装教程
  14. Google 浏览器(2011)书签同步
  15. Android 7.1 竖屏转横屏全过程实现-基于高通平台
  16. 数学中有关c语言的知识点总结,七年级数学基本函数的基本知识点归纳
  17. Proteus安装图文教程
  18. Java开发基础知识学习总结之(上)-王者笔记建议收藏
  19. 计算机内存五个区域,总结:计算机内存的五大区域
  20. jquery、css 的选择器(逗号/空格/英文句号/大于号/加号/波浪号)

热门文章

  1. VS2022 EGE 游戏开发之吃豆人1.0
  2. Retrofit购物车
  3. Android里TextView动态设置颜色(setTextColor)不起作用解决方法
  4. VS Code闪现,巨头纷纷入局的Web IDE缘何崛起?
  5. 从边缘走向中心,边缘计算出现三大门派和六大趋势
  6. elementUI switch控件应用记录
  7. 【转】关于Git Credential Manager for Windows
  8. CPU(中央处理器)工作原理
  9. Unity布料系统_Cloth组件(包含动态调用相关)
  10. ArcGIS 空间连接