【图像金字塔】

  图像金字塔是一种以多分辨率来解释图像的结构,通过对原始图像进行多尺度像素采样的方式,生成N个不同分辨率的图像。把具有最高级别分辨率的图像放在底部,以金字塔形状排列,往上是一系列像素(尺寸)逐渐降低的图像,一直到金字塔的顶部只包含一个像素点的图像,这就构成了传统意义上的图像金字塔。

  获得图像金字塔一般包括二个步骤:1. 利用低通滤波器平滑图像 ;2. 对平滑图像进行抽样(采样)。有两种采样方式——上采样(分辨率逐级升高)和下采样(分辨率逐级降低)

【高斯金字塔】

  高斯金字塔式在Sift算子中提出来的概念,首先高斯金字塔并不是一个金字塔,而是有很多组(Octave)金字塔构成,并且每组金字塔都包含若干层(Interval)。

  高斯金字塔构建过程:

  1. 先将原图像扩大一倍之后作为高斯金字塔的第1组第1层,将第1组第1层图像经高斯卷积(其实就是高斯平滑或称高斯滤波)之后作为第1组金字塔的第2层,高斯卷积函数为:

  对于参数σ,在Sift算子中取的是固定值1.6。

  2. 将σ乘以一个比例系数k,等到一个新的平滑因子σ=k*σ,用它来平滑第1组第2层图像,结果图像作为第3层。

  3. 如此这般重复,最后得到L层图像,在同一组中,每一层图像的尺寸都是一样的,只是平滑系数不一样。它们对应的平滑系数分别为:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ。

  4.  将第1组倒数第三层图像作比例因子为2的降采样,得到的图像作为第2组的第1层,然后对第2组的第1层图像做平滑因子为σ的高斯平滑,得到第2组的第2层,就像步骤2中一样,如此得到第2组的L层图像,同组内它们的尺寸是一样的,对应的平滑系数分别为:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ。但是在尺寸方面第2组是第1组图像的一半。

这样反复执行,就可以得到一共O组,每组L层,共计O*L个图像,这些图像一起就构成了高斯金字塔,结构如下:

  在同一组内,不同层图像的尺寸是一样的,后一层图像的高斯平滑因子σ是前一层图像平滑因子的k倍;在不同组内,后一组第一个图像是前一组倒数第三个图像的二分之一采样,图像大小是前一组的一半;

【DOG金字塔】

  差分金字塔,DOG(Difference of Gaussian)金字塔是在高斯金字塔的基础上构建起来的,其实生成高斯金字塔的目的就是为了构建DOG金字塔。

  DOG金字塔的第1组第1层是由高斯金字塔的第1组第2层减第1组第1层得到的。以此类推,逐组逐层生成每一个差分图像,所有差分图像构成差分金字塔。概括为DOG金字塔的第o组第l层图像是有高斯金字塔的第o组第l+1层减第o组第l层得到的。

  DOG金字塔的构建可以用下图描述:

  每一组在层数上,DOG金字塔比高斯金字塔少一层。后续Sift特征点的提取都是在DOG金字塔上进行的。

【尺度空间】

  图像的尺度空间解决的问题是如何对图像在所有尺度下描述的问题。在高斯金字塔中一共生成O组L层不同尺度的图像,这两个量合起来(O,L)就构成了高斯金字塔的尺度空间,也就是说以高斯金字塔的组O作为二维坐标系的一个坐标,不同层L作为另一个坐标,则给定的一组坐标(O,L)就可以唯一确定高斯金字塔中的一幅图像。

  尺度空间的形象表述:

  上图中尺度空间中k前的系数n表示的是第一组图像尺寸是当前组图像尺寸的n倍。

【DoG 角点检测】

  DoG (Difference of Gaussian)是灰度图像增强和角点检测的方法,其做法较简单,证明较复杂,具体讲解如下:Difference of Gaussian(DOG)是高斯函数的差分。我们已经知道可以通过将图像与高斯函数进行卷积得到一幅图像的低通滤波结果,即去噪过程,这里的Gaussian和高斯低通滤波器的高斯一样,是一个函数,即为正态分布函数。

  那么difference of Gaussian 即高斯函数差分是两幅高斯图像的差,

一维表示:

二维表示:

具体到图像处理来讲,就是将两幅图像在不同参数下的高斯滤波结果相减,得到DoG图。

1、处理一幅图像在不同参数下的DoG

A = Process(Im, 0.3, 0.4, x);
B = Process(Im, 0.6, 0.7, x);
C = Process(Im, 0.7, 0.8, x);
a = getExtrema(A, B, C, thresh);

2. 根据DOG求角点

  DOG三维图中的最大值和最小值点是角点

  X标记当前像素点,绿色的圈标记邻接像素点,用这个方式,最多检测26个像素点。X被标记为特征点,如果它是所有邻接像素点的最大值或最小值点。因此在上一步计算出的A,B,C三个DOG图中求图B中是极值的点,并标记(max:1;min:-1)

【参考文献】

https://blog.csdn.net/dcrmg/article/details/52561656

https://blog.csdn.net/abcjennifer/article/details/7639488

最新文章

  1. entity Framework codefirst Migrations
  2. 关于NODE NPM 输入命令后没反应的问题
  3. sql语句 in的教训
  4. socket.io,环境搭建 & Hello world
  5. Merkle Patricia Tree (MPT) 树详解
  6. java9-9 匿名内部类
  7. Java语言中有4种访问修饰符
  8. 【MongoDB】学习MongoDB推荐三本书
  9. Objective-C和Swift实现单例的几种方式
  10. 在Azure China用自定义镜像创建Azure VM Scale Set
  11. MacOS 下安装mysqlclient 的问题及解决办法
  12. Linux整合Apache和SVN
  13. InnoDB锁机制
  14. OSTC 2015
  15. es6 遍历总结
  16. 如何优雅的关闭Golang Channel?
  17. flashfxp软件设置并关联默认编辑器
  18. Vue 计算
  19. Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第一集之安装VMware】
  20. Vakuum开发笔记02 核心与安全问题

热门文章

  1. Hive split 分割函数
  2. 查询sqlserver数据库视图、存储过程等包含特定的字符串
  3. C# 堆和栈的区别?
  4. centos7 qt之程序编译 cant start process “cmake”
  5. SSH连接Linux
  6. Part10-C语言环境初始化-Bss段初始化lesson2
  7. 认识Session
  8. A. Xor-tree
  9. wireshark抓取qq数据包
  10. httpClient-3.1学习笔记