3、相机运动模型:2D仿射变换、单应性矩阵、3D旋转与平移、运动分解

运动相机在拍摄过程中,机身始终处于六自由度(6DoF)的随机运动中。EIS(电子防抖)系统的本质,是在没有物理云台辅助的前提下,通过数学模型描述相机的运动轨迹,进而对每一帧画面进行逆向补偿。因此,理解相机运动模型是设计稳像算法的第一道门槛。本章将从2D平面变换出发,逐步过渡到3D空间刚体运动,并最终建立从3D运动到2D像素位移的完整映射链路。

相机运动模型与EIS稳像映射链路 3D 刚体运动 旋转 R ∈ SO(3) 平移 t ∈ R³ · 俯仰 Pitch (绕X轴) · 偏航 Yaw (绕Y轴) · 横滚 Roll (绕Z轴) · 平移: Tx / Ty / Tz 2D 图像变换 · 2D仿射变换 (6DoF) · 单应性矩阵 H (8DoF) [ x' ] [ h1 h2 h3 ] [ x ] [ y' ] = [ h4 h5 h6 ] [ y ] [ 1 ] [ h7 h8 h9 ] [ 1 ] 平面场景 / 纯旋转 → 单应性 EIS 运动补偿 1. 全局运动估计 2. 运动滤波 (平滑) 3. 帧裁剪 + 重采样 · 保留中心区域 · 边缘填充/镜像 输出稳定视频流 投影 补偿 运动分解策略(EIS核心) ① 高频抖动 → 滤波去除(平滑路径) ② 低频扫描 → 保留(摇摄/跟随) ③ 旋转分量 → 单应性补偿(主分量) ④ 平移分量 → 裁剪补偿(次分量) ⑤ 滚动快门畸变 → 逐行修正

3.1 2D仿射变换:平面运动的基础表达

核心原理:仿射变换是描述图像平面内线性变换加平移的最简模型,包含旋转、缩放、剪切和平移,共6个自由度(DoF)。其矩阵形式为:

[ x' ]   [ a1  a2  tx ] [ x ]
[ y' ] = [ a3  a4  ty ] [ y ]
[ 1  ]   [ 0   0   1  ] [ 1 ]

其中 a1~a4 描述线性变换(旋转+缩放+剪切),tx/ty 描述平移。在EIS中,仿射变换常用于帧间运动估计的初值计算,因为它计算量小、数值稳定,适合作为特征点匹配后的粗对齐模型。

判断方法:当相机运动以平面旋转(绕光轴)和平面内平移为主,且场景深度变化不大时,仿射模型足够。若视频画面出现明显的透视变化(如拍摄建筑物仰视),仿射模型会产生较大残差,此时应升级为单应性矩阵。

变换类型自由度矩阵形式EIS适用场景
平移2[1 0 tx; 0 1 ty; 0 0 1]纯水平/垂直抖动
欧氏变换3[cosθ -sinθ tx; sinθ cosθ ty; 0 0 1]旋转+平移
相似变换4[s·cosθ -s·sinθ tx; s·sinθ s·cosθ ty; 0 0 1]含缩放(变焦)
仿射变换6[a1 a2 tx; a3 a4 ty; 0 0 1]含剪切/非均匀缩放
经验提醒:在运动相机EIS中,仿射变换通常作为光流估计的初始化模型。由于运动相机视角广、畸变大,直接使用仿射模型容易在画面边缘产生“橡皮筋”效应,建议仅在特征点匹配阶段使用。

3.2 单应性矩阵:平面场景的精确映射

核心原理:单应性矩阵H是一个3×3的非奇异矩阵,描述了两个平面之间的射影映射关系。当场景为平面(如墙面、地面)或相机仅做纯旋转(无平移)时,任意两帧之间的像素对应关系都可以用H精确描述:

[ x' ]   [ h1 h2 h3 ] [ x ]
[ y' ] = [ h4 h5 h6 ] [ y ]
[ 1  ]   [ h7 h8 h9 ] [ 1 ]

H共有8个自由度(通常令h9=1归一化)。在EIS中,H的估计通常采用直接线性变换(DLT)算法,配合RANSAC剔除误匹配点。

操作流程:

  1. 提取特征点(ORB/SIFT)并匹配相邻帧
  2. 使用RANSAC迭代求解H矩阵
  3. 计算重投影误差,剔除离群点
  4. 用内点重新优化H(Levenberg-Marquardt)

案例拆解:假设运动相机在骑行场景中拍摄,路面纹理丰富。相邻帧间存在明显的透视变化(近处路面移动快,远处移动慢)。若使用仿射模型,残差可达5~8像素;改用单应性矩阵后,残差降至0.5像素以内。但需注意:当场景包含不同深度的物体(如路旁树木与远处山体)时,单一H无法同时满足所有像素,此时需要引入3D运动模型。

风险提示:单应性矩阵对特征点分布敏感。若特征点集中在画面某一区域(如天空与地面交界处),H矩阵会偏向该区域的运动,导致其他区域补偿失真。建议在特征点匹配时进行网格化均匀采样。

3.3 3D旋转与平移:刚体运动的完整描述

核心原理:运动相机的真实运动是3D空间中的刚体运动,包含旋转矩阵R(3×3正交阵,行列式为1)和平移向量t(3×1)。旋转矩阵属于特殊正交群SO(3),可用欧拉角、旋转向量或四元数表示。在EIS中,通常使用旋转向量(李代数so(3))进行优化,避免万向锁问题。

运动分解:将相机运动分解为旋转分量和平移分量是EIS的关键步骤。旋转分量导致图像整体平移和透视变化,平移分量则导致视差(不同深度物体移动速度不同)。对于运动相机(焦距短、视角广),旋转是导致画面抖动的主要因素,通常占80%以上的能量。

// 旋转矩阵(绕Z轴旋转θ)
Rz(θ) = [ cosθ  -sinθ  0 ]
        [ sinθ   cosθ  0 ]
        [ 0      0     1 ]

// 平移向量
t = [ tx, ty, tz ]^T

判断方法:通过陀螺仪(IMU)数据可以直接获取旋转角速度,积分后得到旋转矩阵。若没有IMU,则需通过视觉方法估计本质矩阵E(E = [t]×R),再分解出R和t。但单目视觉的平移量存在尺度模糊,需结合IMU或已知场景尺度。

运动分量图像表现EIS处理策略传感器支持
旋转(Roll)画面绕中心旋转反向旋转补偿陀螺仪Z轴
旋转(Pitch/Yaw)画面整体平移+透视单应性变换补偿陀螺仪X/Y轴
平移(Tx/Ty)视差/近景移动快裁剪+局部补偿加速度计(需积分)
平移(Tz)缩放/前向运动缩放补偿加速度计Z轴

3.4 运动分解与EIS补偿策略

核心原理:运动分解是将估计出的3D运动拆分为“有意运动”(用户摇摄、跟随)和“无意抖动”(高频振动)的过程。EIS的目标是保留有意运动,滤除无意抖动。常用的分解方法包括:

  • 频域分解:对旋转角速度做低通滤波,截止频率通常设为2~5Hz。低于截止频率的运动视为有意运动,高于则视为抖动。
  • 路径平滑:在3D轨迹空间(位置+姿态)上应用滑动窗口平均或卡尔曼滤波,生成平滑的虚拟相机路径。
  • 自适应分解:根据运动幅度动态调整滤波强度。例如,剧烈运动时增大平滑力度,平稳拍摄时减小平滑力度以避免“果冻效应”。

实战场景:假设运动相机以30fps录制,陀螺仪采样率为1kHz。某帧检测到绕Y轴旋转角速度为0.8 rad/s(约46°/s),经低通滤波后,有意运动分量为0.2 rad/s,抖动分量为0.6 rad/s。EIS系统将0.6 rad/s的旋转量转换为像素位移(像素位移 = 焦距 × 角速度 × 帧间隔),然后对图像进行反向单应性变换。

案例闭环:某运动相机在骑行场景中,EIS开启后画面边缘出现明显“果冻”扭曲。分析发现:陀螺仪数据与图像帧未同步,导致旋转补偿滞后约8ms。解决步骤:① 使用时间戳对齐陀螺仪与图像帧;② 对陀螺仪数据做三次样条插值,精确到每行曝光时间;③ 采用逐行补偿(Rolling Shutter Correction)。结果:边缘扭曲从15像素降至2像素以内,但代价是计算量增加约30%。

常见误区:

  1. 过度平滑:滤波强度过大导致画面“漂移”或“延迟感”,尤其在快速摇摄时。
  2. 忽略平移分量:近距离拍摄时,平移引起的视差不可忽略,仅补偿旋转会导致边缘模糊。
  3. 单应性滥用:在深度变化大的场景中强行使用全局单应性,会产生“鬼影”。此时应使用网格化局部单应性或光流场补偿。
总结复盘:运动分解的核心是“先估计、后分解、再补偿”。估计阶段优先使用IMU+视觉融合(VIO)提高鲁棒性;分解阶段采用自适应滤波平衡平滑与响应;补偿阶段根据运动类型选择仿射、单应性或网格变换。实际工程中,建议将旋转补偿放在前,平移补偿放在后,并预留5%~10%的裁剪余量以应对边缘伪影。