Home / 机器人经典基础 / Lucas–Kanade:用图像梯度寻找匹配,而不是盲目枚举位移

008|Lucas–Kanade:用图像梯度寻找匹配,而不是盲目枚举位移

系列首页 · 上一篇 · 下一篇

原论文:Bruce D. Lucas、Takeo Kanade,An Iterative Image Registration Technique with an Application to Stereo Vision,IJCAI 1981,674–679。CMU 六页会议原稿。同题还有 DARPA 十页版本,本文采用六页会议版,页码与实验对应均不混用。

先接住前作的问题

RANSAC能够在已有对应里抵抗粗错,却不负责生成图像位移。本篇转到匹配模块本身:不用逐个枚举所有移动方向,能否利用亮度梯度计算下一次修正?这是视觉流水线的模块联系。

五个前置概念

五个前置概念是:图像梯度表示亮度变化;变换模型规定待估参数;线性化只在局部近似;正规矩阵描述信息方向;孔径问题意味着观测无法区分某些运动。

一、问题设定:小图像窗口的位移怎样由亮度变化求出

两张相邻图像里,同一个小窗口移动到了哪里?逐个尝试所有位移十分昂贵。LK利用亮度变化的空间梯度,估计“向哪个方向移动窗口,会让两张图更像”,再反复修正位移。

把“图像相似”变成一个可优化问题

令T为模板图像,I为当前图像,W(x;p)为由参数p描述的图像变换。最简单的平移模型只含两个参数。目标为:

E(p)=∑x∈Ω[I(W(x;p))−T(x)]2.E(p)=\sum_{x\in\Omega}[I(W(x;p))-T(x)]^2.

这里的状态不是机器人全局位姿,而是图像配准参数。求得像素位移后,还需要相机模型、深度或多视图几何才能变成三维运动。光流并不自动等于真实物体速度。

要素 配准中的含义
输入 两幅图像、窗口、变换模型和初值
观测假设 对应位置亮度近似一致
输出 位移或更一般的变换参数
数学目标 减小窗口内光度残差平方和
机器人接口 向视觉前端提供跟踪或匹配信息

平方损失把所有像素看作同一个模型下的观测。窗口跨越运动边界或包含遮挡时,这个假设会失败,不能指望迭代次数增加就自动解决。

二、线性化亮度残差,求解局部梯度正规方程

论文的研究对象是图像配准,包含立体视觉应用;后来的金字塔光流、特征选择和逆组合算法都与它有关,但不应被当成1981年论文一次完成的全部内容。

局部线性化如何给出更新

在当前p附近令参数改变为Δp\Delta p,近似:

I(W(x;p+Δp))≈I(W(x;p))+JxΔp,I(W(x;p+\Delta p))\approx I(W(x;p))+J_x\Delta p,

其中Jx=∇I ∂W/∂pJ_x=\nabla I\,\partial W/\partial p。设rx=I(W(x;p))−T(x)r_x=I(W(x;p))-T(x),则求解:

(∑xJx⊤Jx)Δp=−∑xJx⊤rx.\left(\sum_xJ_x^\top J_x\right)\Delta p=-\sum_xJ_x^\top r_x.

梯度提供误差变化方向,正规矩阵汇总各像素对参数的约束。求解得到的是局部修正,不是对所有可能位移的全局证明。

对于纯平移,Jx=[Ix,Iy]J_x=[I_x,I_y],正规矩阵为两个方向梯度的二阶统计。若窗口只有竖直边缘,只能可靠看出水平方向变化;沿边缘移动几乎不改变亮度,另一个方向缺少信息。这就是孔径问题的一个具体表现。

这不是逆组合算法的伪代码:梯度、雅可比在哪里计算,以及参数如何组合,是不同LK变体的重要区别。实现时不能只因为都写H,就任意交换模板梯度和当前图像梯度。

把正规方程走完一次,符号才不容易写反。原创教学窗口只保留三个有效像素,它们的梯度依次为 (1,0),(0,2),(1,1)(1,0),(0,2),(1,1),当前残差为 (−1,−2,−2)(-1,-2,-2)。于是

H=[2115],∑Jx⊤rx=[−3−6],HΔp=[36].H=\begin{bmatrix}2&1\\1&5\end{bmatrix},\qquad \sum J_x^\top r_x=\begin{bmatrix}-3\\-6\end{bmatrix},\qquad H\Delta p=\begin{bmatrix}3\\6\end{bmatrix}.

解得 Δp=(1,1)\Delta p=(1,1),代入三个线性化残差后均为零。这里只证明该线性子问题可解;真实图像应在新位置重新采样,核对实际 E(p+Δp)E(p+\Delta p) 是否下降。残差定义若改成 T−IT-I,更新方程右端符号也必须同步改变。不要仅用“迭代幅度小”判成功:平坦窗口中,幅度小可能只是没有梯度。

更完整的Gauss–Newton解释是:真实损失二阶导还含 ∑rx∇2Ix\sum r_x\nabla^2 I_x,这里忽略这部分而使用 J⊤JJ^\top J。初值接近、残差较小时,这样做较合理;跨越遮挡边界时,再精确地解正规方程也不能修复亮度对应假设。光照整体偏移还可能被错误解释为运动,原文讨论亮度与对比参数正是为了把这类变化显式建模。

正规方程可求解依赖窗口在两个方向都提供梯度信息。执行迭代时先检查这一条件,再用单一边缘的例子区分残差下降与位移可辨识。

三、执行迭代配准,用退化纹理检查可解方向

输入:模板T,图像I,窗口Omega,初始参数p
重复直到收敛或达到预算:
    按W(x;p)采样当前图像窗口
    计算光度残差r和空间梯度
    构造每个像素对变换参数的雅可比J
    累加H = sum(J转置*J),b = sum(J转置*r)
    若H严重退化则拒绝本次估计
    求解H*delta = -b并更新p
输出p、残差和可用于判断可靠性的条件信息

教学例子:有梯度不一定有两个方向的信息

设窗口内所有像素梯度都是[1,0][1,0]。累加后的H形如[[N,0],[0,0]][[N,0],[0,0]],第二方向没有约束。即使横向边缘非常清晰,纵向位移仍不可辨认。增加同类像素只让第一个特征值变大,不能补上缺失方向。

若窗口包含一个清晰角点,既有水平也有垂直梯度,H的两个特征值可能都明显大于零。此时两个方向的平移都有光度信息支持。后来的“好特征”研究正是进一步把可跟踪性变成可计算的选择标准。

再设真实位移为20像素,而当前局部线性化只在附近几像素可靠。直接迭代可能落入错误纹理峰值。图像金字塔能把大位移缩小到粗层上的小位移,再逐层细化,但会引入额外实现选择,且不能保证重复纹理中的唯一匹配。

四、把教学纹理图与原始迭代配准实验分开读

Figs. 5–8:图 5→6 在低频带做了 7 次深度调整;图 7→8 改用高一倍的频带,人工新增 5 个点,再做 5 次调整
原论文结果图/表摘引:Bruce D. Lucas、Takeo Kanade(1981),Figs. 5–8,PDF 第 6 页;核对原文。原版权保留。

读图:图 5→6 在低频带做了 7 次深度调整;图 7→8 改用高一倍的频带,人工新增 5 个点,再做 5 次调整。这不是四张图按同一设置逐步变清晰:频带、点集与迭代次数都必须一并比较。

立体匹配例子包含人工引导;图中局部深度调整展示迭代配准能力,不能当成自动稠密光流的成功率基准。

原文位置 具体证据 解释边界
第 675 页,第 4.1 节,式(1)–(7) 用空间梯度推导一维位移迭代 解释更新为何利用局部图像结构,不能证明任意初始化都收敛
第 676 页,第 4.2–4.3 节 L2 正规方程及正弦例子的收敛范围 正弦例子中的 ∣h∣<π|h|<\pi 不是所有图像的统一捕获范围
第 676–677 页,第 4.5–4.6 节 多维推广,允许仿射以及亮度、对比变化参数 原文已讨论超出纯平移的模型,但参数可观测性仍受图像影响
第 678 页,第 5.4 节、Fig. 5–6 两个较大区域的粗尺度立体匹配 从初始深度 6 得到 6.05 与 5.86,这些是深度结果而非误差或成功率
第 679 页,Fig. 7–8 与第 5.5 节 更高一 octave 频带下细化五个人工兴趣点 支持分尺度匹配演示,不是具有独立真值统计的完整自动系统

实验先通过人工选取对应点估计摄像参数,并在匹配过程中使用人工引导。五个细尺度点的初始化来自粗尺度估计,最终列出的深度为 5.96、5.98、5.77、5.78、6.09。没有对应的逐点真值误差表,不能据此自行计算准确率。

论文对平滑的讨论有双面性:平滑可能扩大收敛捕获范围,也会消除细节。第 5.5 节明确承认系统仍需相当程度的人工引导,并将自动初始化、兴趣点选择、深度不连续和外观变化列为进一步研究问题。

实验要素 已核对设置
任务 立体图像区域与兴趣点的迭代匹配
输入辅助 人工对应点估计摄像参数、人工兴趣点选择
对照 不同频率层次及匹配前后演示,不是现代算法排行榜
指标 匹配位置与深度结果;没有统一真值误差、重复次数与置信区间表
计算与训练 非学习优化;训练预算不适用,不能编造加速倍数

这些证据支持迭代配准和多尺度处理可用于真实立体图像,同时限定了自动化程度。后来的金字塔跟踪工程若增加前后向检查、特征筛选和鲁棒损失,需要另行评价这些组件。

五、检查大位移、遮挡与亮度模型失配

光照变化会破坏亮度一致性。自动曝光、阴影、反射和运动模糊都可能让同一个物理点的像素值改变。可以引入光度参数或更鲁棒的残差,但这些属于模型扩展,应通过独立实验验证。

窗口大小存在取舍:更大窗口提供更多梯度,可能更稳定;也更容易跨越不同深度和运动边界,违反同一变换假设。不能简单把“大窗口”视为更高精度设置。

优化残差低仍可能匹配错误。重复栅栏、条纹和纹理相似区域可能形成多个低损失解。视觉里程计通常还需要几何一致性、RANSAC或多帧约束,来区分光度相似与真实对应。

六、追问:图像没有移动却整体变亮,LK会怎样把光照误差误读成位移?

图像没有移动却整体变亮,LK会怎样把光照误差误读成位移?

参考答案:构造一维局部亮度斜坡,把对齐残差写成 e(u)=gu+be(u)=g u+b,其中 gg 是每像素亮度梯度,bb 是两帧光照偏移。最小二乘给出 u=−b/gu=-b/g:若 g=2g=2、b=10b=10,会产生虚假的−5像素更新。这里没有真实运动;错误来自模型把全部变化归给位移。这个构造沿OpenCV亮度恒常到局部方程的教法,只用于解释模型失配,不是原论文实验。

七、从可解窗口走向特征筛选与监控

八、自测与参考答案

问题1:边缘很清楚,为什么仍不是一个好跟踪窗口?

参考答案:清楚只说明某个方向梯度大。沿直边方向的位移可能不改变亮度,正规矩阵在该方向缺秩,无法唯一估计二维移动。

问题2:增加迭代次数为什么未必能处理大位移?

参考答案:更新基于局部近似,如果初值已在错误吸引域,更多迭代只会更充分收敛到错误解。需要更好的初始化、多尺度或其他匹配机制。

问题3:得到10像素位移,能否直接说机器人移动了10厘米?

参考答案:不能。像素运动与相机内参、场景深度、旋转及平移共同相关。需要额外几何和尺度信息,光度配准自身不提供固定的米/像素转换。