KLT Tracker

Kanade-Lucas-Tomasi(KLT)跟踪器通过直接对齐小的图像patch,在帧与帧之间跟踪稀疏特征点,而不是每帧都重新检测和重新匹配描述子。它结合了Lucas-Kanade光流解法(Lucas & Kanade, 1981)、Tomasi与Kanade的跟踪表述(1991),以及Shi与Tomasi的特征选择准则(1994),并且——以其金字塔形式(Bouguet)——是许多VIO系统(MSCKF实现、VINS-Mono)的前端,也是cv::calcOpticalFlowPyrLK背后的主力算法。

Lucas-Kanade核心

假设亮度恒定性(brightness constancy):特征周围的patch在帧间移动(u,v)(u, v)时保持其强度不变,

I(x,y,t)=I(x+u,  y+v,  t+1).I(x, y, t) = I(x + u,\; y + v,\; t + 1).

对于小运动,一阶泰勒展开给出光流约束方程

Ixu+Iyv+It=0I_x u + I_y v + I_t = 0

其中Ix,IyI_x, I_y是空间图像梯度,ItI_t是时间差分。一个方程,两个未知量——这就是孔径问题(aperture problem)。Lucas-Kanade增加了空间一致性(spatial coherence):特征周围窗口WW内的所有NN个像素共享同一个(u,v)(u, v)。将这NN个约束堆叠并用最小二乘求解,得到2×22 \times 2的方程组

ATA[uv]=ATb,ATA=[Ix2IxIyIxIyIy2]A^T A \begin{bmatrix} u \\ v \end{bmatrix} = -A^T \mathbf{b}, \qquad A^T A = \begin{bmatrix} \sum I_x^2 & \sum I_x I_y \\ \sum I_x I_y & \sum I_y^2 \end{bmatrix}

其中b\mathbf{b}是时间梯度组成的向量。因为运动并非真正的无穷小量,这个求解过程以高斯-牛顿方式迭代进行:用当前估计对patch进行warp、重新计算残差、求解增量,重复直到更新量低于阈值。

良好的可跟踪特征

矩阵ATAA^T A正是Harris角点检测器中的结构张量(structure tensor),其条件数决定了可跟踪性。设特征值λ1λ2\lambda_1 \ge \lambda_2

Shi与Tomasi的准则选择满足min(λ1,λ2)>τ\min(\lambda_1, \lambda_2) > \tau的特征——“良好的可跟踪特征”从构造上就是KLT求解稳定的点。这正是cv::goodFeaturesToTrack

让它在真实运动中生效

对SLAM的意义

对于帧间对应关系,KLT是描述子匹配的廉价、高精度替代方案:无需计算描述子,无需最近邻搜索,具有亚像素精度,且计算量与被跟踪点的数量成正比——非常适合嵌入式硬件上实时系统的跟踪线程。这正是为什么光流前端在VIO中占主导地位(VINS-Mono在正常运行中跟踪KLT角点,从不计算描述子),也是为什么像SVO这样的半直接方法建立在同样的patch对齐数学基础之上。它的局限同样定义了前端设计:KLT在大基线、光照变化(亮度恒定性被打破)和运动模糊下会退化,也没有办法重新找回丢失的特征——这恰恰是基于描述子的匹配和场景识别所擅长的。KLT的正规方程同样是高斯-牛顿模式最简单的实例,这种模式在SLAM的每个尺度上都会反复出现,直至完整的光度光束法平差。

动手实践

相关条目