Image Pyramid
图像金字塔是一幅图像的多分辨率表示:由同一张图片的一系列逐渐缩小(相应地也逐渐模糊)的副本堆叠而成。它是针对以下事实的标准工程解法:场景结构的尺度以及帧间运动的幅度事先都是未知的——算法只需在每一层上都运行一遍,或者由粗层为细层提供初值。
高斯金字塔
基础层 就是输入图像。每一个后续层都通过低通滤波和下采样得到:
即先与一个高斯核卷积,然后在两个方向上每隔一个像素保留一个。模糊操作是必要的,而不是装饰性的:下采样会将采样率减半,因此高于新奈奎斯特极限的频率必须先被去除,否则会混叠成虚假的低频结构。每一次分辨率减半称为一个八度(octave)。整个金字塔的代价很小:几何级数 收敛到基础图像内存占用的 倍。
两个常见的改进:
- 更精细的尺度采样。 SIFT 在每个八度内填充 个中间尺度,以系数 进行模糊,从而使高斯差分响应可以在密集的一组尺度上进行比较,并在 中定位极值点。
- 非 2 的幂次因子。 ORB 检测器通常使用更温和的尺度因子(ORB-SLAM 在 8 层中使用 1.2),使得一个路标在一定的观测距离范围内保持可匹配,而不会在各层之间出现大的跳跃。
拉普拉斯金字塔存储的则是相邻高斯层之间的带通差异,——这正是 DoG 用于斑点检测所利用的思想,也是图像融合和压缩的经典工具。
金字塔在视觉算法中带来的好处
尺度不变检测。 像 FAST 这样的角点检测器有固定的 7 像素感受野;它无法响应一个宽度为 40 像素的角点。在每一层金字塔上运行相同的检测器,实际上就等于扫描了各种物体尺寸。特征在哪一层被触发会被记录下来——ORB 会相应地缩放关键点坐标和描述子区块,而在 SLAM 中,检测所在的层级定义了该路标之后能被重新检测到的距离范围(即 ORB-SLAM 搜索窗口中的尺度感知匹配)。
由粗到细的运动估计。 Lucas-Kanade 光流仅在亚像素到几个像素的位移范围内有效,因为它对亮度函数做了线性化。在全分辨率下 像素的位移,在第 层上表现为 像素——在某个较粗的层上足够小,能满足线性化假设。金字塔式 LK(Bouguet 的 KLT)在最粗层 估计光流 ,然后将其作为初始猜测向下传播
在每一个更细的层上进行细化。使用 层时,半径为 的窗口能够捕获大约 像素量级的运动,而不再仅限于 。同样的由粗到细的调度方式也驱动着 LSD-SLAM/DSO 中的直接图像对齐,以及 DTAM 等稠密方法——粗层还能平滑光度代价面,拓宽收敛盆地。
鲁棒性与速度。 粗层能抑制产生局部极小值的噪声和精细纹理;并且先在四分之一或十六分之一分辨率下处理,可以让跟踪器在触及全分辨率像素之前廉价地排除掉不良假设。
实践中的记账细节
在实现基于金字塔的前端时需要注意的细节:
- 坐标约定:对于尺度因子 ,第 层上位于 的关键点,在基础层对应 ——这个映射中的差一层(off-by-one-level)错误,是导致重投影误差出现微妙错误的经典来源。
- 每层特征预算:检测器会将其特征配额分配到各层(细层多一些,粗层少一些),使地图中包含在多个距离都可用的路标。
- 描述子尺度:描述子区块必须从检测所在的层采样(或相应地缩放),否则跨尺度匹配会悄无声息地退化。
- 先模糊再下采样的顺序:为节省时间而跳过低通滤波会引入混叠,这同时损害检测的可重复性和光度对齐的效果。
对SLAM的意义
金字塔在几乎每一个 SLAM 前端中都出现两次。第一次是特征尺度:正是多层检测让 ORB-SLAM 能在相机接近或远离物体时持续匹配同一个路标——没有它,一旦表观尺寸发生变化,跟踪就会中断。第二次是运动范围:金字塔式 KLT 和由粗到细的直接对齐,正是让跟踪器能在帧间快速相机运动中存活下来的原因;当一个 SLAM 系统在快速旋转下跟踪丢失时,首先要问的问题就是它用了多少金字塔层,以及最粗的那一层是否仍能看到足够的结构。层数和尺度因子的选择是一个真正的调优旋钮:更多的层能拓展运动和尺度范围,但会消耗更多计算,并在顶层产生更粗糙、更嘈杂的估计。