相机坐标系、图像坐标系和世界坐标系
在计算机视觉和摄影测量中,相机坐标系、图像坐标系和世界坐标系是三个核心的坐标系系统,它们共同描述了从真实世界到二维图像的映射过程。以下是它们的详细解释及相互关系:
1. 三大坐标系的定义
(1) 世界坐标系(World Coordinate System, ( \mathbf{W} ))
- 作用:描述物体在真实三维空间中的绝对位置。
- 原点:用户自定义(如场景中的某个固定点)。
- 坐标轴:通常为 ( X_w, Y_w, Z_w )(右手系)。
- 特点:
- 所有物体和相机的位姿均基于此坐标系定义。
- 在SLAM、三维重建中用于统一多视角数据。
(2) 相机坐标系(Camera Coordinate System, ( \mathbf{C} ))
- 作用:以相机为中心的三维坐标系。
- 原点:相机的光心(镜头中心)。
- 坐标轴:
- ( Z_c ):沿光轴指向拍摄方向(正前方)。
- ( X_c ):向右,与图像坐标系u轴平行。
- ( Y_c ):向下,与图像坐标系v轴平行。
- 特点:
- 用于描述物体相对于相机的位置。
- 通过外参(( R, t ))与世界坐标系关联。
(3) 图像坐标系(Image Coordinate System, ( \mathbf{I} ))
- 作用:描述点在二维图像中的位置。
- 原点:图像左上角(像素坐标系)或光轴中心(归一化坐标系)。
- 坐标轴:
- ( u ):向右(像素列方向)。
- ( v ):向下(像素行方向)。
- 特点:
- 最终输出为像素坐标(如 ( (u,v) ))。
- 通过内参(( K ))与相机坐标系关联。
2. 坐标系间的转换关系
(1) 世界坐标系 → 相机坐标系
通过**外参(Extrinsic Parameters)**转换:
[
\begin{bmatrix}
X_c \
Y_c \
Z_c \
\end{bmatrix}
= R \cdot \begin{bmatrix}
X_w \
Y_w \
Z_w \
\end{bmatrix} + t
]
- ( R ):3×3旋转矩阵(世界→相机坐标系的旋转)。
- ( t ):3×1平移向量(相机原点在世界坐标系中的位置)。
(2) 相机坐标系 → 图像坐标系
通过**内参(Intrinsic Parameters)**投影:
[
\begin{cases}
u = f_x \cdot \frac{X_c}{Z_c} + c_x \
v = f_y \cdot \frac{Y_c}{Z_c} + c_y \
\end{cases}
]
- ( f_x, f_y ):x/y方向焦距(像素单位)。
- ( c_x, c_y ):主点坐标(光轴与图像平面的交点)。
(3) 完整投影流程(世界→图像)
[
\begin{bmatrix}
u \
v \
1 \
\end{bmatrix}
= K \cdot \begin{bmatrix}
R \mid t
\end{bmatrix} \cdot \begin{bmatrix}
X_w \
Y_w \
Z_w \
1 \
\end{bmatrix}
]
- ( K ):内参矩阵,( [R \mid t] ):外参矩阵。
3. 关键图示
世界坐标系 (X_w, Y_w, Z_w)|| 外参 [R|t]↓
相机坐标系 (X_c, Y_c, Z_c)|| 内参 K↓
图像坐标系 (u, v)
4. 实际应用示例
示例1:物体检测
- 输入:图像中的像素坐标 ( (u,v) )。
- 目标:计算物体在世界坐标系中的位置 ( (X_w, Y_w, Z_w) )。
- 步骤:
- 通过内参反推相机坐标系下的方向(需已知深度 ( Z_c ))。
- 通过外参反推世界坐标。
示例2:增强现实(AR)
- 输入:已知世界坐标系中的虚拟物体坐标。
- 目标:在图像中正确渲染物体。
- 步骤:
- 通过外参将世界坐标转换到相机坐标。
- 通过内参投影到图像坐标。
5. 常见问题
(1) 为什么需要多个坐标系?
- 解耦问题:内参描述相机本身特性,外参描述相机位姿,世界坐标描述全局环境。
- 灵活性:相机移动时只需更新外参,内参保持不变。
(2) 图像坐标系的原点在哪里?
- OpenCV默认:左上角(( u )向右,( v )向下)。
- 数学模型:光轴中心(主点 ( (c_x, c_y) ))。
(3) 如何从2D像素反推3D世界坐标?
- 单目相机需附加约束(如平面假设、多视角三角化)。
- 深度相机可直接获取 ( Z_c )(如RGB-D传感器)。
6. 数学公式总结
转换 | 公式 |
---|---|
世界→相机坐标系 | ( \mathbf{P}_c = R \cdot \mathbf{P}_w + t ) |
相机→归一化坐标系 | ( (x, y) = (X_c/Z_c, Y_c/Z_c) ) |
归一化→像素坐标系 | ( u = f_x \cdot x + c_x ), ( v = f_y \cdot y + c_y ) |
如果需要具体代码实现(如OpenCV中的坐标系转换),可以进一步说明!