3. 光流定位原理入门

无人机要实现定点悬停,必须知道自己相对地面“动了多少、往哪动”。GPS 在室外能给出绝对位置,但在室内、桥洞、林下等场景往往失效;此时光流传感器通过向下拍摄地面纹理,从连续图像中估计像素运动,再结合高度换算成水平速度,成为定点悬停的核心手段。理解光流,要从“什么是光流”开始,逐步走到光流约束方程。

一、光流定义:像素在图像平面上的运动速度

光流(Optical Flow)是指图像中亮度模式随时间的运动。通俗地说,当相机与场景发生相对运动时,画面里的纹理、边缘、角点会在图像平面上移动,这些像素点的瞬时运动速度就构成光流。它通常是一个二维矢量场:

光流矢量 = (u, v)
u = dx/dt   // 像素在图像 x 方向的运动速度
v = dy/dt   // 像素在图像 y 方向的运动速度

需要强调:光流描述的是“图像上的运动”,不是“真实世界的运动”。同一个真实运动,在不同高度、不同焦距下产生的光流大小不同。对无人机而言,向下看的地面纹理越丰富、高度越低,光流越明显;反之,白墙、纯色地板、水面等弱纹理区域会让光流估计变得困难。

二、运动场与光流场:理想与现实的差别

运动场(Motion Field)是由场景中三维点的真实运动投影到图像平面所形成的二维速度场,它是几何意义上的“真实运动投影”。光流场(Optical Flow Field)则是从图像亮度变化中估计出来的二维速度场,是“看起来的运动”。

两者在多数情况下接近,但并不总是相等。典型差异包括:

  • 无纹理区域:真实运动存在,但图像亮度没有变化,光流无法估计,出现“空洞”。
  • 光照变化:光源移动或反光会让亮度变化被误判为运动,产生虚假光流。
  • 孔径问题:沿直线边缘运动时,只有垂直于边缘的分量可被观测,切向分量不可知。
  • 运动模糊:快速运动导致图像模糊,光流估计精度下降。
对无人机定点悬停来说,我们真正关心的是“相机相对地面的运动”,因此需要尽量让光流场逼近运动场:选择纹理丰富的地面、控制曝光、避免强反光,并配合 IMU 做融合。

三、亮度恒定假设:光流约束方程的基石

要从图像中求运动,必须建立“亮度”和“运动”之间的关系。最核心的假设是亮度恒定假设:同一场景点在运动过程中,其图像亮度保持不变。设图像亮度为 I(x, y, t),其中 x、y 为像素坐标,t 为时间,则:

I(x, y, t) = I(x + dx, y + dy, t + dt)

也就是说,t 时刻位于 (x, y) 的点,经过 dt 时间移动到 (x+dx, y+dy),其亮度值不变。这个假设在短时间、小运动、光照稳定的条件下近似成立,是后续推导光流约束方程的前提。

四、光流约束方程推导:从泰勒展开到 u、v 关系

对亮度恒定等式左边在 (x, y, t) 处做一阶泰勒展开:

I(x+dx, y+dy, t+dt)
≈ I(x, y, t)
+ (∂I/∂x)dx + (∂I/∂y)dy + (∂I/∂t)dt

由亮度恒定假设,展开式与 I(x, y, t) 相等,因此:

(∂I/∂x)dx + (∂I/∂y)dy + (∂I/∂t)dt = 0

两边同除以 dt,并令 u = dx/dt、v = dy/dt,得到经典的光流约束方程:

Ix·u + Iy·v + It = 0

其中:
Ix = ∂I/∂x   // 图像 x 方向梯度
Iy = ∂I/∂y   // 图像 y 方向梯度
It = ∂I/∂t   // 图像时间梯度
u, v         // 待求光流分量

这个方程只有一个等式,却有两个未知数 u 和 v,因此是欠定的。它只能约束光流在梯度方向上的分量,无法唯一确定完整光流,这就是著名的“孔径问题”。要解出 u、v,必须引入额外约束,例如 Lucas-Kanade 的局部窗口一致性假设,或 Horn-Schunck 的全局平滑假设。

光流约束方程的意义在于:它把“图像亮度变化”与“像素运动”用一条线性方程联系起来。后续所有光流算法,本质上都是在这条方程基础上增加约束来求解 u、v。

五、从光流到无人机速度:参数关系与场景案例

无人机定点悬停中,光流传感器通常向下安装,配合超声波或激光测距获得离地高度 h。若相机焦距为 f,像素光流为 (u, v),则相机水平速度近似为:

Vx ≈ (u · h) / f
Vy ≈ (v · h) / f

可以看出:同样的光流,高度越高,对应的真实速度越大;高度越低,速度越小。因此高度估计误差会直接放大速度误差。实际飞控中,光流数据会与 IMU、气压计、测距模块做卡尔曼融合,以抑制噪声和漂移。

概念含义在无人机中的作用
光流图像亮度模式的二维运动速度估计水平运动
运动场真实三维运动在图像上的投影理想参考量
光流场从图像中估计出的运动场实际可测量
亮度恒定假设同一点运动前后亮度不变推导约束方程的前提
光流约束方程Ix·u + Iy·v + It = 0连接亮度与运动
孔径问题一个方程两个未知数需额外约束求解

六、常见误区与复盘

  • 误区一:光流等于真实速度。光流是图像运动,必须结合高度和焦距才能换算成速度。
  • 误区二:有光流就能定点。弱纹理、强反光、纯色地面会导致光流失效,需要纹理辅助或视觉融合。
  • 误区三:忽略时间同步。图像与 IMU、测距数据若不同步,融合后速度估计会抖动。
  • 误区四:只看光流大小不看方向。定点悬停需要同时抑制 x、y 两个方向的漂移,方向错误会导致越修越偏。
调试建议:先在纹理丰富的地面低速测试,观察光流矢量方向是否与手动移动方向一致;再逐步提高高度和速度,检查速度换算是否随高度线性变化。若出现方向相反,优先检查相机安装方向与坐标系定义。
光流定位原理:从地面纹理到光流约束方程 无人机 向下光流相机 + 测距 高度 h 地面纹理(角点、边缘、斑点) 图像平面 I(x, y, t) 亮度模式随运动发生位移 I(x, y, t) = I(x+dx, y+dy, t+dt) 亮度恒定假设 光流矢量 (u, v) u = dx/dt v = dy/dt 二维运动矢量场 光流约束方程 Ix·u + Iy·v + It = 0 速度换算 Vx ≈ u·h / f Vy ≈ v·h / f 孔径问题 1 个方程 2 个未知数 u, v

总结来看,光流定位的入门逻辑链条是:地面纹理在相机中形成亮度模式,相机运动使亮度模式发生位移,亮度恒定假设把位移与亮度变化联系起来,泰勒展开得到光流约束方程,再通过额外约束求解 u、v,最后结合高度和焦距换算成无人机水平速度。理解这条链条,才能在定点悬停调试中判断问题出在纹理、光照、高度还是融合环节。