3. 相机成像模型
相机成像模型是3D视觉定位的数学基础。它将三维世界中的点映射到二维图像平面,同时描述了镜头畸变带来的非线性偏移。理解针孔模型、畸变模型以及内参/外参矩阵,是后续进行手眼标定与空间定位的前提。
3.1 针孔相机模型
针孔相机模型是理想化的线性成像模型。它假设光线通过一个无限小的孔(光心)在成像平面上形成倒立的实像。为简化计算,通常将成像平面对称到光心前方,形成虚拟成像平面,使图像保持正立。
核心几何关系基于相似三角形:
- 世界点 \( P(X, Y, Z) \) 通过光心投影到像点 \( p(x, y) \)。
- 焦距 \( f \) 是光心到成像平面的距离。
- 投影关系:\( x = f \frac{X}{Z} \),\( y = f \frac{Y}{Z} \)。
关键理解:针孔模型是线性模型,不包含镜头畸变。实际相机因镜头制造与装配误差,必须引入畸变模型进行校正。
3.2 畸变模型
实际镜头因制造工艺限制,会引入径向畸变和切向畸变。畸变使实际像点偏离针孔模型预测的位置,必须通过标定获得畸变系数并进行校正。
3.2.1 径向畸变
径向畸变由镜头形状引起,光线在镜头边缘弯曲程度更大。分为两种:
- 桶形畸变:图像边缘向外膨胀,常见于广角镜头。
- 枕形畸变:图像边缘向内收缩,常见于长焦镜头。
数学模型(使用泰勒级数展开):
x_corrected = x * (1 + k1*r² + k2*r⁴ + k3*r⁶)
y_corrected = y * (1 + k1*r² + k2*r⁴ + k3*r⁶)
其中 r² = x² + y²,k1, k2, k3 为径向畸变系数
3.2.2 切向畸变
切向畸变由镜头与成像平面不平行(装配误差)引起。数学模型:
x_corrected = x + [2*p1*x*y + p2*(r² + 2*x²)]
y_corrected = y + [p1*(r² + 2*y²) + 2*p2*x*y]
其中 p1, p2 为切向畸变系数
标定注意事项:径向畸变系数通常取 k1, k2, k3 三项,但 k3 仅在鱼眼或大畸变镜头中使用。切向畸变系数 p1, p2 一般较小,但不能忽略。
3.3 内参矩阵
内参矩阵描述了相机坐标系到像素坐标系的转换关系,包含焦距、主点坐标和像素尺寸等参数。矩阵形式为:
[ fx 0 cx ]
K = [ 0 fy cy ]
[ 0 0 1 ]
| 参数 | 含义 | 单位 |
|---|---|---|
| fx, fy | 焦距在x、y方向上的像素度量(fx = f / dx,fy = f / dy) | 像素 |
| cx, cy | 主点(光轴与成像平面交点)的像素坐标 | 像素 |
| dx, dy | 单个像素在x、y方向的物理尺寸 | mm/像素 |
内参矩阵将相机坐标系下的点 \( P_c(X_c, Y_c, Z_c) \) 投影到像素坐标 \( (u, v) \):
u = fx * (X_c / Z_c) + cx
v = fy * (Y_c / Z_c) + cy
核心作用:内参矩阵是相机自身的固有属性,一旦标定完成,在相机焦距和分辨率不变的情况下保持不变。它是3D-2D映射的关键桥梁。
3.4 外参矩阵
外参矩阵描述了世界坐标系到相机坐标系的刚体变换关系,由旋转矩阵 \( R \) 和平移向量 \( t \) 组成:
[ R t ]
M = [ 0 1 ] (4×4 齐次矩阵)
其中:
- R:3×3 旋转矩阵,表示世界坐标系相对于相机坐标系的旋转。
- t:3×1 平移向量,表示世界坐标系原点在相机坐标系中的位置。
世界点 \( P_w \) 到相机坐标系 \( P_c \) 的转换:
P_c = R * P_w + t
3.5 完整成像流程
从世界点到像素坐标的完整映射分为三步:
- 世界 → 相机:使用外参矩阵 \( [R|t] \) 将世界点变换到相机坐标系。
- 相机 → 归一化平面:除以Z坐标,得到归一化坐标 \( (X_c/Z_c, Y_c/Z_c, 1) \)。
- 归一化 → 像素:使用内参矩阵 \( K \) 投影到像素坐标,并应用畸变校正。
| 步骤 | 变换 | 矩阵/公式 | 说明 |
|---|---|---|---|
| 1 | 世界→相机 | \( P_c = R \cdot P_w + t \) | 外参矩阵,刚体变换(6自由度) |
| 2 | 相机→归一化 | \( (x_n, y_n) = (X_c/Z_c, Y_c/Z_c) \) | 透视投影,去尺度 |
| 3 | 畸变校正 | \( (x_c, y_c) = f_{dist}(x_n, y_n) \) | 径向+切向畸变模型 |
| 4 | 归一化→像素 | \( (u, v) = (fx \cdot x_c + cx, fy \cdot y_c + cy) \) | 内参矩阵,离散化 |
工程实践:在OpenCV中,使用
cv::calibrateCamera() 可同时标定内参、畸变系数和外参。标定板通常使用棋盘格或圆点阵列,采集10-20张不同位姿的图像即可获得稳定结果。