2、基础知识:相机模型与成像原理

在Edge AI视觉惯性融合系统中,相机是获取环境结构信息的主要传感器,而IMU则提供高频运动状态。两者融合的前提,是必须对相机如何将三维世界映射到二维图像平面有精确的数学描述。这一描述体系即“相机模型”。如果相机模型建立不准确,后续的去畸变、特征点提取、视觉里程计解算乃至与IMU的松耦合/紧耦合融合都会产生系统性偏差。本节将系统梳理针孔模型、畸变模型、内参与外参的定义与工程含义,为后续章节的标定与融合算法奠定基础。

世界坐标系 (Xw, Yw, Zw) 三维点 P P(Xw, Yw, Zw) 相机坐标系 (Xc, Yc, Zc) 光心Oc为原点 Pc = R·Pw + t 图像物理坐标 (x, y) 焦距 f 投影 x = f·Xc/Zc y = f·Yc/Zc 像素坐标系 (u, v) u = fx·x + cx v = fy·y + cy 单位:像素 外参 R, t 投影 f 内参 fx, fy, cx, cy 畸变模型(镜头光学误差) 径向畸变 x_dist = x(1 + k1·r² + k2·r⁴ + k3·r⁶) y_dist = y(1 + k1·r² + k2·r⁴ + k3·r⁶) k1, k2, k3:径向畸变系数 切向畸变 x_dist = x + [2·p1·x·y + p2·(r² + 2x²)] y_dist = y + [p1·(r² + 2y²) + 2·p2·x·y] p1, p2:切向畸变系数 校正流程 1. 归一化坐标 (x, y) 2. 计算畸变量并补偿 3. 映射到像素坐标 (u, v)

2.1 针孔模型:三维到二维的数学映射

针孔模型(Pinhole Model)是相机成像最基础的理想化描述。它假设光线通过一个无限小的针孔,在后方成像平面上形成倒立的实像。在实际工程中,我们通常将成像平面“虚拟”到针孔前方,以简化数学表达。设三维空间中一点P在世界坐标系下的齐次坐标为Pw = [Xw, Yw, Zw, 1]ᵀ,其到相机坐标系的变换由外参矩阵T = [R | t]决定,其中R为3×3旋转矩阵,t为3×1平移向量。相机坐标系下的坐标为Pc = R·Pw + t = [Xc, Yc, Zc]ᵀ。

根据相似三角形原理,该点在图像物理坐标系下的理想投影位置为:

x = f · Xc / Zc
y = f · Yc / Zc

其中f为焦距(单位与Xc、Yc一致,通常为毫米)。进一步转换到像素坐标系,考虑像素在x和y方向上的物理尺寸dx、dy,以及主点(光轴与成像平面的交点)在像素坐标系中的位置(cx, cy),可得:

u = fx · (Xc / Zc) + cx
v = fy · (Yc / Zc) + cy

其中fx = f/dx,fy = f/dy,单位为像素。将上述过程合并为矩阵形式,即经典的内参矩阵K:

Zc · [u, v, 1]ᵀ = K · [R | t] · [Xw, Yw, Zw, 1]ᵀ
K = [[fx, 0, cx],
     [0, fy, cy],
     [0,  0,  1]]

在Edge AI设备中,由于计算资源有限,通常使用浮点运算直接实现该映射,而避免使用OpenCV等重型库中的高开销函数。理解该模型的本质——即从世界坐标到像素坐标的链式变换——是后续所有视觉算法的基石。

2.2 畸变模型:镜头光学误差的数学补偿

实际镜头并非理想针孔,而是由多组透镜构成,这引入了两类主要畸变:径向畸变(由透镜形状引起,光线在边缘弯曲更严重)和切向畸变(由透镜与成像平面不完全平行引起)。径向畸变用k1、k2、k3三个系数描述,切向畸变用p1、p2两个系数描述。设归一化坐标(即Zc=1平面上的坐标)为(x, y),r² = x² + y²,则畸变后的坐标为:

x_dist = x(1 + k1·r² + k2·r⁴ + k3·r⁶) + 2·p1·x·y + p2·(r² + 2x²)
y_dist = y(1 + k1·r² + k2·r⁴ + k3·r⁶) + p1·(r² + 2y²) + 2·p2·x·y

在Edge AI视觉惯性融合系统中,畸变校正通常在预处理阶段完成。由于IMU频率(通常200-1000Hz)远高于相机帧率(30-60fps),畸变校正后的图像特征点才能与IMU数据在时间戳上精确对齐。若畸变未校正,特征点的像素位置误差在图像边缘可达数十像素,这将直接导致视觉惯性里程计(VIO)的位姿估计漂移。

2.3 内参与外参:标定的核心输出

内参描述相机自身的几何光学属性,包括fx、fy、cx、cy以及畸变系数k1、k2、k3、p1、p2。内参矩阵K将相机坐标系下的三维点映射到像素平面。对于Edge AI设备,内参通常在出厂时标定,但温度变化、镜头松动或振动可能导致内参漂移,因此建议在设备部署后进行现场标定。

外参描述相机坐标系与世界坐标系(或IMU坐标系)之间的刚体变换关系,即旋转矩阵R和平移向量t。在视觉惯性融合中,外参特指相机与IMU之间的相对位姿(即T_ic),这是紧耦合融合算法的关键参数。外参标定误差哪怕只有1°或1mm,都会在融合后的姿态估计中产生不可忽略的累积误差。

参数类型 符号 物理含义 典型值范围 标定方法
焦距x fx 像素坐标系下x方向焦距 300-2000 px 棋盘格标定
焦距y fy 像素坐标系下y方向焦距 300-2000 px 棋盘格标定
主点x cx 光轴与图像平面交点x坐标 图像宽度/2 ± 50 棋盘格标定
主点y cy 光轴与图像平面交点y坐标 图像高度/2 ± 50 棋盘格标定
径向畸变 k1, k2, k3 透镜形状引起的畸变 -0.5 ~ 0.5 多姿态图像优化
切向畸变 p1, p2 透镜与传感器不平行引起的畸变 -0.05 ~ 0.05 多姿态图像优化
旋转外参 R_ic IMU到相机的旋转矩阵 3×3正交矩阵 Kalibr联合标定
平移外参 t_ic IMU到相机的平移向量 ±0.1 m Kalibr联合标定

2.4 案例拆解:Edge AI设备上的相机标定与去畸变实战

假设我们正在开发一款搭载OV5640摄像头(分辨率1280×720)和BMI160 IMU的Edge AI视觉惯性导航模块。设备部署在无人机上,要求VIO位置误差在飞行10分钟后小于2m。初始阶段,我们使用OpenCV的棋盘格标定法获取内参,但发现特征点匹配的精度不足。

初始现象:在图像边缘区域,ORB特征点的重投影误差达到3.5像素,远超预期的0.5像素。进一步分析发现,标定板图像在边缘区域出现明显的桶形畸变,但标定程序输出的k1仅为-0.08,似乎偏小。

分析判断:我们怀疑标定过程中图像数量不足(仅采集了8张),且标定板姿态变化不够丰富,导致畸变参数估计不准确。此外,OV5640的卷帘快门效应在快速移动时也会引入额外的图像变形,这与静态畸变混合在一起。

操作步骤:

  1. 重新采集20张标定板图像,覆盖画面的九个区域(四角、四边中点、中心),并保证标定板倾斜角度在±30°范围内变化。
  2. 使用Kalibr工具进行联合标定,同时估计内参、畸变系数以及相机与IMU的外参。Kalibr采用连续帧的IMU积分与视觉重投影联合优化,能有效分离运动模糊与静态畸变。
  3. 标定后,在设备上实现基于查表法的去畸变映射。由于Edge AI芯片(如RK3588)的NPU不支持复杂的浮点运算,我们预先计算好每个像素对应的去畸变坐标映射表,存储在SRAM中,运行时仅需查表与双线性插值。

结果对比:重新标定后,k1变为-0.23,重投影误差降至0.4像素。在无人机飞行测试中,VIO在10分钟内的位置漂移从3.8m降至1.6m,满足设计要求。

风险与代价:查表法需要约1280×720×2×2字节≈3.7MB的存储空间,对SRAM有限的MCU平台可能过大。此时可考虑降采样映射表(如每4个像素一个表项)并配合线性插值,将存储降至约0.9MB。

经验总结:相机标定不是一次性任务。在Edge AI设备中,温度变化(如无人机从室内到室外温差20°C)会导致镜头支架热胀冷缩,内参漂移可达1-2%。建议在设备启动时执行快速自标定(利用已知场景特征或IMU辅助),或定期更新映射表。

2.5 常见误区与工程要点

  • 误区一:忽略主点偏移。很多工程师将cx、cy直接设为图像中心,这在低精度应用中尚可,但在VIO中会引入系统性偏差。务必通过标定获取真实主点位置。
  • 误区二:畸变系数阶数选择不当。对于广角镜头(视场角>120°),仅用k1、k2可能不足,需引入k3甚至k4、k5。但高阶系数对噪声敏感,需保证标定图像数量充足。
  • 误区三:外参标定与内参标定分离。在视觉惯性融合中,相机内参和相机-IMU外参必须联合标定,否则IMU的角速度积分与视觉特征的运动轨迹无法对齐。
  • 误区四:忽略时间同步对模型的影响。相机模型假设图像是在某一瞬间采集的,但卷帘快门相机逐行曝光,导致图像不同行对应不同时刻的相机位姿。在快速运动下,这等效于引入了额外的“运动畸变”,需要在预处理中补偿。

风险提示:在Edge AI平台上,去畸变操作应放在图像金字塔构建之前。若先构建金字塔再去畸变,会导致不同层级的图像使用不同的畸变参数,破坏尺度一致性,严重影响多尺度特征匹配的精度。