Image Pyramid

图像金字塔是一幅图像的多分辨率表示:由同一张图片的一系列逐渐缩小(相应地也逐渐模糊)的副本堆叠而成。它是针对以下事实的标准工程解法:场景结构的尺度以及帧间运动的幅度事先都是未知的——算法只需在每一层上都运行一遍,或者由粗层为细层提供初值。

高斯金字塔

基础层 I0I_0 就是输入图像。每一个后续层都通过低通滤波和下采样得到:

I+1(x,y)=(GσI)(2x,2y)I_{\ell+1}(x, y) = \big(G_{\sigma} * I_{\ell}\big)(2x,\, 2y)

即先与一个高斯核卷积,然后在两个方向上每隔一个像素保留一个。模糊操作是必要的,而不是装饰性的:下采样会将采样率减半,因此高于新奈奎斯特极限的频率必须先被去除,否则会混叠成虚假的低频结构。每一次分辨率减半称为一个八度(octave)。整个金字塔的代价很小:几何级数 1+14+116+1 + \tfrac{1}{4} + \tfrac{1}{16} + \cdots 收敛到基础图像内存占用的 43\tfrac{4}{3} 倍。

两个常见的改进:

拉普拉斯金字塔存储的则是相邻高斯层之间的带通差异,L=Iupsample(I+1)L_\ell = I_\ell - \mathrm{upsample}(I_{\ell+1})——这正是 DoG 用于斑点检测所利用的思想,也是图像融合和压缩的经典工具。

金字塔在视觉算法中带来的好处

尺度不变检测。 像 FAST 这样的角点检测器有固定的 7 像素感受野;它无法响应一个宽度为 40 像素的角点。在每一层金字塔上运行相同的检测器,实际上就等于扫描了各种物体尺寸。特征在哪一层被触发会被记录下来——ORB 会相应地缩放关键点坐标和描述子区块,而在 SLAM 中,检测所在的层级定义了该路标之后能被重新检测到的距离范围(即 ORB-SLAM 搜索窗口中的尺度感知匹配)。

由粗到细的运动估计。 Lucas-Kanade 光流仅在亚像素到几个像素的位移范围内有效,因为它对亮度函数做了线性化。在全分辨率下 dd 像素的位移,在第 \ell 层上表现为 d/2d / 2^{\ell} 像素——在某个较粗的层上足够小,能满足线性化假设。金字塔式 LK(Bouguet 的 KLT)在最粗层 LL 估计光流 dL\mathbf{d}_L,然后将其作为初始猜测向下传播

g1=2(g+d),\mathbf{g}_{\ell-1} = 2\,(\mathbf{g}_{\ell} + \mathbf{d}_{\ell}),

在每一个更细的层上进行细化。使用 LL 层时,半径为 ww 的窗口能够捕获大约 (2L+11)w(2^{L+1}-1)\,w 像素量级的运动,而不再仅限于 ww。同样的由粗到细的调度方式也驱动着 LSD-SLAM/DSO 中的直接图像对齐,以及 DTAM 等稠密方法——粗层还能平滑光度代价面,拓宽收敛盆地。

鲁棒性与速度。 粗层能抑制产生局部极小值的噪声和精细纹理;并且先在四分之一或十六分之一分辨率下处理,可以让跟踪器在触及全分辨率像素之前廉价地排除掉不良假设。

实践中的记账细节

在实现基于金字塔的前端时需要注意的细节:

对SLAM的意义

金字塔在几乎每一个 SLAM 前端中都出现两次。第一次是特征尺度:正是多层检测让 ORB-SLAM 能在相机接近或远离物体时持续匹配同一个路标——没有它,一旦表观尺寸发生变化,跟踪就会中断。第二次是运动范围:金字塔式 KLT 和由粗到细的直接对齐,正是让跟踪器能在帧间快速相机运动中存活下来的原因;当一个 SLAM 系统在快速旋转下跟踪丢失时,首先要问的问题就是它用了多少金字塔层,以及最粗的那一层是否仍能看到足够的结构。层数和尺度因子的选择是一个真正的调优旋钮:更多的层能拓展运动和尺度范围,但会消耗更多计算,并在顶层产生更粗糙、更嘈杂的估计。

相关条目