本文目录
本文内容原是写毕业论文相关工作时整理的内容,但发现后面并不需要在这里进行详细公式说明,又不忍直接删掉,就让它们换个形式保存在这里吧。
⚠️ 注意:本文写于 2022 年,内容较为基础。
光流法基本假设
本文介绍的经典亮度梯度方法通常从两个近似假设出发;这不是所有光流算法都必须采用的完整定义:
-
相邻帧的亮度恒定不变,即物体在视频中运动时,相邻帧的亮度不发生明显变化;
-
时间连续或微小运动,即相邻帧之间物体的位置变化并不剧烈。
基于这两个假设,我们可以得到图像的约束方程为:
\[I(x,y,t)=I(x+\delta x,y+\delta y,t+\delta t) \tag{1}\]其中 $I(x,y,t)$ 是 $t$ 时刻图像在 $(x,y)$ 像素位置的亮度。在经过 $\delta t$ 时间后,像素在新一帧中的位置相对原位置移动了 $(\delta x,\delta y)$。
将公式 (1) 右端在 $(x,y,t)$ 处进行泰勒展开,得到:
\[I(x+\delta x,y+\delta y,t+\delta t) = I(x,y,t)+\frac{\partial I}{\partial x}\delta x + \frac{\partial I}{\partial y}\delta y + \frac{\partial I}{\partial t}\delta t + \epsilon \tag{2}\]其中 $\epsilon$ 表示泰勒公式的高阶无穷小项,可以近似为 0。
将公式 (1) 和 (2) 联立,得到:
\[\frac{\partial I}{\partial x}\delta x + \frac{\partial I}{\partial y}\delta y + \frac{\partial I}{\partial t}\delta t = 0\]两边同除以 $\delta t$ 得到:
\[\frac{\partial I}{\partial x}\frac{\delta x}{\delta t} + \frac{\partial I}{\partial y}\frac{\delta y}{\delta t} + \frac{\partial I}{\partial t} = 0 \tag{3}\]其中 $\frac{\delta x}{\delta t}$ 和 $\frac{\delta y}{\delta t}$ 分别表示图像平面上沿 $x$、$y$ 方向的速度分量,记为 $u,v$。再令 $I_x=\frac{\partial I}{\partial x}$,$I_y=\frac{\partial I}{\partial y}$,$I_t=\frac{\partial I}{\partial t}$ 分别表示亮度对 $x,y,t$ 的偏导数。
这时,公式 (3) 可以写成:
\[I_x u + I_y v + I_t = 0\]其中 $I_x, I_y, I_t$ 都可以从图像数据中获得,$(u, v)$ 为未知的光流矢量。
在上述结果中,一个标量约束通常不足以唯一确定两个速度分量,这叫欠定,而不是说方程必然无解。例如 $I_x=1,I_y=0$ 时只能确定 $u=-I_t$,$v$ 仍可取任意值;如果空间梯度全为零而 $I_t\ne0$,局部线性模型才会出现不相容。为估计完整光流,需要引入邻域约束或正则化。
稀疏与稠密描述的是在哪些位置输出运动估计,不是约束方程本身的唯一分类。下面分别以常见的稀疏 LK 跟踪和稠密 Farnebäck 实现说明。
稀疏光流法
稀疏光流法指的是先从图像中选取一些关键点(一般选择角点),在之后的识别和追踪中,只关注这些关键点的像素运动,从而大大减小了计算量。
Lucas–Kanade(LK)的局部最小二乘估计常用于稀疏特征跟踪;也可以在许多甚至全部像素的邻域运行,因此 LK 本身不等于“只能产生稀疏光流”。它额外采用局部运动近似:
- 空间一致性,场景中同一物体的相邻像素点具有相似的运动,且在投影到二维图像平面上的距离也比较近。
据此,我们假设在一个大小为 $m\times m$ $(n = m^2)$ 的窗口内,图像的光流是一个恒定值,那么可以得到如下方程组:
\[\begin{aligned} I_{x_1}u + I_{y_1}v & = -I_{t_1} \\ I_{x_2}u + I_{y_2}v & = -I_{t_2} \\ & \cdots \\ & \cdots \\ I_{x_n}u + I_{y_n}v & = -I_{t_n} \end{aligned} \tag{4}\]上述方程组的矩阵形式为:
\[\left[ \begin{array}{cc} I_{x_1} & I_{y_1} \\ I_{x_2} & I_{y_2} \\ \cdot & \cdot \\ \cdot & \cdot \\ I_{x_n} & I_{y_n} \end{array} \right] \left[ \begin{array}{c} u \\ v \end{array} \right] = \left[ \begin{array}{c} -I_{t_1} \\ -I_{t_2} \\ \cdot \\ \cdot \\ -I_{t_n} \end{array} \right]\]记为 $\mathbf{A}\mathbf{v} = \mathbf{b}$
使用最小二乘法得到:
\[\mathbf{A}^{\mathsf{T}}\mathbf{A}\mathbf{v} = \mathbf{A}^{\mathsf{T}}\mathbf{b}\]当 $\mathbf{A}^{\mathsf{T}}\mathbf{A}$ 非奇异时,解得速度矢量为:
\[\mathbf{v} = (\mathbf{A}^{\mathsf{T}}\mathbf{A})^{-1}\mathbf{A}^{\mathsf{T}}\mathbf{b} \tag{5}\]该速度矢量就被视为光流。
若窗口内纹理只沿一个方向变化,或几乎没有灰度梯度,$\mathbf{A}^{\mathsf{T}}\mathbf{A}$ 会奇异或病态,这就是孔径问题在 LK 方程中的体现。此时不能直接使用公式 (5) 的逆矩阵;工程实现通常根据两个特征值筛选适合跟踪的点,或使用伪逆、正则化等数值处理。
稀疏光流只在选定点上估计运动;如果系统不持续检测并补充新特征,确实可能漏掉新进入画面的物体。本文对应的原项目没有直接采用 LK 作为运动检测算法,而是另行使用两帧间的运动幅度指标来影响视频参数配置;这是面向特定任务的启发式,并不是 LK 算法的简化,也不等同于标准光流估计。
稠密光流法
稠密光流在图像的大部分或全部像素位置估计运动,因此能给出完整的运动场,但“更稠密”并不等于估计一定更准确。它通常比只跟踪少量特征点需要更多计算,结果质量仍取决于亮度恒常、遮挡、纹理、正则化和参数设置。
稠密光流法的代表之一是 Gunnar Farnebäck 提出的 Farnebäck 算法。它同样依赖局部运动平滑等假设,但采用多项式展开估计位移场。
Farnebäck 算法将输入图像灰度化,并对图像进行二次多项式建模。对于每一个像素位置 $\mathbf{x} = (x\ y)^{\mathsf{T}}$,其灰度值是一个关于 $\mathbf{x}$ 的函数 $f(\mathbf{x})$。在以待求像素点为中心的局部坐标系中,对局部邻域进行二次多项式展开,可以近似为:
\[\begin{aligned} f(\mathbf{x}) & = f(x, y) \\ & \approx r_1 + r_2 x + r_3 y + r_4 x^2 + r_5 y^2 + r_6 xy \\ & = \begin{pmatrix}x & y\end{pmatrix} \begin{pmatrix} r_4 & r_6/2 \\ r_6/2 & r_5 \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} + (r_2\ r_3) \begin{pmatrix} x \\ y \end{pmatrix} + r_1 \\ & = \mathbf{x}^{\mathsf{T}}\mathbf{A}\mathbf{x} + \mathbf{b}^{\mathsf{T}}\mathbf{x} + c \end{aligned} \tag{6}\]其中二次项的三个矩阵维度依次为 $1\times2$、$2\times2$、$2\times1$,结果是标量。展开后两个非对角项合成 $r_6xy$,所以它与上一行的 $r_4x^2+r_5y^2+r_6xy$ 一致。
$r_1,\ldots,r_6$ 是该像素邻域的局部模型参数,可以用加权最小二乘法估计;位置权重通常在中心最大,并随离中心的距离增加而减小。
设第一帧的理想二次信号为 $f_1(\mathbf{x})=\mathbf{x}^{\mathsf{T}}\mathbf{A}_1\mathbf{x} + \mathbf{b}_1^{\mathsf{T}}\mathbf{x}+c_1$,且第二帧由保持亮度的平移 $\mathbf{d}$ 得到。下面的代数恒等式对这个理想模型不要求位移微小;真实图像的局部拟合有效范围有限,所以实际算法仍需要迭代与金字塔:
\[\begin{aligned} f_2(\mathbf{x}) & = f_1(\mathbf{x} - \mathbf{d}) \\ & = (\mathbf{x} - \mathbf{d})^{\mathsf{T}}\mathbf{A}_1(\mathbf{x}-\mathbf{d}) + \mathbf{b}_1^{\mathsf{T}}(\mathbf{x}-\mathbf{d}) + c_1 \\ & = \mathbf{x}^{\mathsf{T}}\mathbf{A}_1\mathbf{x}+(\mathbf{b}_1-2\mathbf{A}_1\mathbf{d})^{\mathsf{T}}\mathbf{x}+\mathbf{d}^{\mathsf{T}}\mathbf{A}_1\mathbf{d} - \mathbf{b}_1^{\mathsf{T}}\mathbf{d} + c_1 \\ & = \mathbf{x}^{\mathsf{T}}\mathbf{A}_2\mathbf{x}+\mathbf{b}_2^{\mathsf{T}}\mathbf{x}+c_2 \end{aligned} \tag{7}\]其中满足
\[\begin{aligned} \mathbf{A}_2 & = \mathbf{A}_1 \\ \mathbf{b}_2 & = \mathbf{b}_1 - 2\mathbf{A}_1\mathbf{d} \\ c_2 & = \mathbf{d}^{\mathsf{T}}\mathbf{A}_1\mathbf{d}-\mathbf{b}_1^{\mathsf{T}}\mathbf{d} + c_1 \end{aligned} \tag{8}\]如果 $\mathbf{A}_1$ 非奇异,则可以得到 $\mathbf{d}=-\frac{1}{2}\mathbf{A}_1^{-1}(\mathbf{b}_2-\mathbf{b}_1)$
虽然我们可以从数学推导中得到 $\mathbf{A}_2=\mathbf{A}_1$,但在实际中该式未必满足。使用局部多项式对理论值进行逼近,然后通过平均值来近似,设第一帧图像对应的系数为 $\mathbf{A}_1(\mathbf{x}),\mathbf{b}_1(\mathbf{x}),c_1(\mathbf{x})$,第二帧图像同理,则
\[\begin{aligned} \mathbf{A}(\mathbf{x}) & = \frac{\mathbf{A}_1(\mathbf{x})+\mathbf{A}_2(\mathbf{x})}{2} \\ \Delta\mathbf{b}(\mathbf{x}) & = -\frac{1}{2}(\mathbf{b}_2(\mathbf{x}) - \mathbf{b}_1(\mathbf{x})) \end{aligned} \tag{9}\]因此
\[\mathbf{A}(\mathbf{x})\mathbf{d}(\mathbf{x}) = \Delta\mathbf{b}(\mathbf{x}) \tag{10}\]理论上可以逐点求解公式 (10),但原论文指出这种结果噪声过大。Farnebäck 因而进一步假设位移场在局部缓慢变化,在像素 $\mathbf{x}$ 的邻域 $I$ 内汇总多个约束,并寻找最符合这些约束的 $\mathbf{d}(\mathbf{x})$:
\[\sum_{\Delta \mathbf{x}\in I} \omega(\Delta \mathbf{x}) \left\| \mathbf{A}(\mathbf{x} + \Delta \mathbf{x})\mathbf{d}(\mathbf{x}) - \Delta \mathbf{b}(\mathbf{x} + \Delta \mathbf{x}) \right\|^{2} \tag{11}\]其中 $\omega(\Delta \mathbf{x})$ 是像素点对应的权重函数,使用最小二乘法可以求得
\[\mathbf{d}(\mathbf{x}) = \left(\sum \omega\mathbf{A}^{\mathsf{T}}\mathbf{A}\right)^{-1} \sum \omega \mathbf{A}^{\mathsf{T}}\Delta \mathbf{b} \tag{12}\]公式 (12) 同样假设括号中的法方程矩阵可逆;若整个邻域都受到孔径问题影响,位移就没有唯一解。邻域大小也并非越小越好:较大的邻域能提高稳健性,却可能把运动边界两侧混在一起;较小的邻域保留更多局部变化,但更容易受噪声和孔径问题影响。完整的 Farnebäck 方法还会结合迭代和多尺度金字塔来处理较大位移。
参考资料
- Lucas, B. D. and Kanade, T., An Iterative Image Registration Technique with an Application to Stereo Vision
- Farnebäck, G., Two-Frame Motion Estimation Based on Polynomial Expansion
觉得有帮助?
分享给同样关注系统性能的人。