图像金字塔简介

图像金字塔

图像金字塔的概念

一般而言,我们处理的图像通常是恒定大小(分辨率)的图像。但是在某些特殊的场景下,需要处理同一图像的不同分辨率的图像。例如,在图像中搜索某些内容时(例如面部),由于不确定待搜索的内容在图像中的区域大小,因此需要创建一个具有不同分辨率的图像集,并在该图像集的所有图像中执行搜索操作。

这些具有不同分辨率的图像集称为“图像金字塔”。之所以称其为“图像金字塔”,是因为当这些图像按照分辨率由低到高堆叠在一起时,底部的最大图像和顶部的最小图像看起来就像是一座金字塔。

因此,图像金字塔是图像的集合,这些图像集合由单个原始图像通过连续的降采样——直到达到某个期望的暂停点为止——产生。

图像金字塔的分类

应用中经常用到的图像金字塔主要有两种:

  • 高斯金字塔
  • 拉普拉斯金字塔

高斯金字塔一般用于图像的降采样,而拉普拉斯金字塔则用于通过图像金字塔中的低分辨率图像重构高分率图像的图像上采样。

高斯金字塔

高斯金字塔中的低分辨率图像是通过删除高分辨率图像中的行和列而产生,具体如下所示:

  • 令高斯金字塔中第$i$层的图像为$G_i$
  • 使用一个高斯核对$G_i$执行卷积操作得到$G_i^{\prime}$
  • 然后删除$G_i^{\prime}$中的偶数行和偶数列,得到$G_{i+1}$

根据如上的步骤,可以知道,第$i+1$级图像的分辨率是第$i$级图像的分辨率的$\frac{1}{4}$。

pyrDown

在OpenCV中,可以使用cv2.pyrDown()生成图像的上一层级图像。

1
2
higher_resolution = cv2.imread('img.jpg')
lower_resolution = cv2.pyrDown(higher_resolution)

下图是一个4级的高斯金字塔的例子。

pyrUp

我们还可以使用cv2.pyrUp()将图像转换为每个方向两倍大小的图像,该函数

  • 首先将图像的大小在各个维度上扩展2倍
  • 然后对新增的行用0进行填充
  • 最后再使用高斯滤波器执行卷积计算来获取“丢失”的像素的值
1
higher_resolution_2 = cv2.pyrUp(lower_resolution)

从如上的步骤不难发现,cv2.pyrUp()并不是cv2.pyrDown()的逆运算,因为cv2.pyrDown()是一个丢失信息的操作,一旦分辨率降低,就会存在信息丢失。

因此,在示例代码中,higher_resolution_2higher_resolution是不同的。

pyrDown中的图像执行pyrUp()效果如下所示:

拉普拉斯金字塔

为了从图像金字塔中的低分辨率图像恢复高分辨率的图像,需要使用下采样过程中丢弃的信息。而这些数据则构成了拉普拉斯金字塔。

令$L_i$为高斯金字塔的第$i$级图像$G_i$下采样得到第$i+1$级图像$G_{i+1}$时丢失的信息,则:

$$L_i=G_i - cv2.pyrUp(G_{i+1})$$

$\{L_i | i \in 1…n\}$则构成拉普拉斯金字塔。

拉普拉斯金字塔由高斯金字塔而形成,并没有其它的额外功能,并且拉普拉斯金字塔图像和图像的边缘图像很像。在拉普拉斯金字塔中的图像的大多数元素为零。一个4级拉普拉斯金字塔的图像如下所示(已调整图像的曝光度以增强图像内容):

尺度空间和图像金字塔卷积核的选择

在现实世界中,客观物体在不同尺度时有着不同的结构。这意味着,如果从不同的尺度去观察同一个物体,会得出不一样的结果。例如,从不同的距离观察同一个图像时,随着距离的不断缩小,能够观察到的图像的结构也有所不同。

观察一棵树的尺度和观察一片树叶的尺度也是不同的:观察一棵树的适当尺度应该是,而观察一片叶子可能需要更细粒度的尺度才能得出较好的结果。

当计算机系统要对一个未知的场景进行分析时,并不能提前预知用什么样的尺度来描述图像信息中的interesting structures是最合适的。因此,唯一可行的方案就是将多个不同尺度的描述都考虑进来,以便捕获未知的尺度变化。

尺度空间理论和生物视觉之间也有着十分密切的联系。哺乳动物的视网膜以及视觉皮层第一阶段所记录的接受场的分布,与许多尺度空间操作都高度近似。

高斯金字塔的描述,在生成高斯金字塔时,会采用高斯核(filter)对图像进行处理,那么为什么非要采用高斯核呢?

实际上,并非任何低通滤波器(low-pass filter)都可用于生成尺度空间。可用于生成尺度空间的filter必须满足如下的条件:

由该平滑filter生成的粗尺度图像(高层图像)不会引入不存在于细尺度图像(低层图像)中的杂散结构。

如上的条件的言外之意就是:给定粗尺度图像中的任何一个区域,细尺度图像上总能找到相应的区域。对这两个区域而言,粗尺度图像区域不能有新的结构。

受制于尺度空间公理,高斯卷积核是实现尺度变换的唯一线性核。因此,在图像金字塔中,需要采用高斯卷积核对图像进行处理。

尺度空间公理需要满足如下的条件:

  • 线性
  • 平移不变性
  • 半群特性
  • 旋转不变性
  • 尺度不变性
  • 正定性
  • 正规性(积分为1)
  • 不会引入新的极点
  • 不会增强极点
  • 存在无穷小的算子(可微性)

图像金字塔的应用

图像金字塔的一种应用是图像融合。例如,在图像拼接中会将两个图像堆叠,但是由于图像之间的不连续性,这种对原始图像的直接拼接的效果并不好。例如,我们对如下图所示的两幅图像:

的直接拼接效果和采用图像金字塔拼接效果分别为(左图为直接拼接):

由此可以看出,使用“图像金字塔”融合图像则可以让拼接之后的图像看起来天衣无缝。

可以按照如下的步骤使用“图像金字塔”来拼接如上的图像(玩转多尺度图像融合):

  1. 加载图像
  2. 计算图像的高斯金字塔(在此示例中,级数为6)
  3. 从高斯金字塔中计算拉普拉斯金字塔
  4. 在每个拉普拉斯金字塔中加入苹果的左半部分和橙子的右半部分
  5. 最后,从联合图像金字塔中重建原始图像

除了如上的多分辨率图像融合算法会用到图像金字塔之外,图像金字塔还可用于如下的场景:

  • sift算法
  • 在from coarse to fine由粗到精的搜索策略中都可以用金字塔
  • optical flow光流法
  • slam当中的姿态估计
  • ……
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2024 wangwei
  • 本站访问人数: | 本站浏览次数:

请我喝杯咖啡吧~