世界像素坐标系转换
时间: 2025-07-19 18:14:13 浏览: 4
世界坐标到像素坐标系的转换是一个多步骤的过程,涉及多个坐标系之间的变换。以下是详细的转换方法:
1. **从世界坐标系到相机坐标系**
世界坐标系通常定义在真实世界中的某个固定点,例如机器人所在的工作环境。相机坐标系则是以相机本身为基准的坐标系,通常原点位于相机的光心,z轴与光轴方向一致。将世界坐标转换为相机坐标,需要使用相机的外参(extrinsic parameters),即旋转矩阵 $ R $ 和平移向量 $ t $。对于一个世界坐标点 $ P_w = [X_w, Y_w, Z_w]^T $,其在相机坐标系下的表示为:
$$
P_c = R \cdot P_w + t
$$
其中,$ R $ 是一个 $ 3 \times 3 $ 的旋转矩阵,$ t $ 是一个 $ 3 \times 1 $ 的平移向量 [^2]。
2. **从相机坐标系到图像物理坐标系**
图像物理坐标系是位于相机成像平面上的二维坐标系,原点通常在成像平面的中心。相机坐标系中的点 $ P_c = [X_c, Y_c, Z_c]^T $ 可以通过透视投影变换到图像物理坐标系中的点 $ P = [x, y]^T $,公式如下:
$$
x = f \cdot \frac{X_c}{Z_c}, \quad y = f \cdot \frac{Y_c}{Z_c}
$$
其中,$ f $ 是相机的焦距(单位为毫米) [^2]。
3. **从图像物理坐标系到像素平面坐标系**
像素平面坐标系是最终图像上的二维坐标系,原点通常位于图像左上角,单位是像素。为了将图像物理坐标转换为像素坐标,需要考虑相机的内参(intrinsic parameters),包括像素在x和y方向上的尺寸 $ dx $ 和 $ dy $,以及图像中心点在像素坐标系中的位置 $ (u_0, v_0) $。公式如下:
$$
u = \frac{x}{dx} + u_0, \quad v = \frac{y}{dy} + v_0
$$
或者等价地,可以使用相机内参矩阵 $ K $ 来表示:
$$
\begin{bmatrix}
u \\
v \\
1
\end{bmatrix}
= K \cdot \begin{bmatrix}
X_c \\
Y_c \\
Z_c
\end{bmatrix}
$$
其中 $ K $ 是一个 $ 3 \times 3 $ 的矩阵,形式为:
$$
K = \begin{bmatrix}
f_x & 0 & u_0 \\
0 & f_y & v_0 \\
0 & 0 & 1
\end{bmatrix}
$$
这里 $ f_x = \frac{f}{dx} $、$ f_y = \frac{f}{dy} $ 分别表示在x和y方向上的焦距(以像素为单位) [^2]。
### 代码示例
以下是一个Python代码示例,展示如何将世界坐标转换为像素坐标:
```python
import numpy as np
# 定义相机外参(旋转矩阵和平移向量)
R = np.array([[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
t = np.array([0, 0, 0])
# 定义相机内参矩阵
f_x = 500 # x方向焦距(像素)
f_y = 500 # y方向焦距(像素)
u_0 = 320 # 图像中心x坐标(像素)
v_0 = 240 # 图像中心y坐标(像素)
K = np.array([[f_x, 0, u_0],
[0, f_y, v_0],
[0, 0, 1]])
# 定义世界坐标点
P_w = np.array([1, 1, 5, 1]) # 齐次坐标
# 转换为相机坐标
T = np.hstack((R, t.reshape(-1, 1)))
P_c = T @ P_w[:4] # 使用齐次坐标进行变换
# 转换为图像物理坐标
x = P_c[0] / P_c[2]
y = P_c[1] / P_c[2]
# 转换为像素坐标
u = f_x * x + u_0
v = f_y * y + v_0
print(f"像素坐标: ({u}, {v})")
```
### 总结
整个转换过程可以总结为:
- 使用相机的外参将世界坐标转换为相机坐标。
- 使用相机的内参将相机坐标转换为像素坐标 。
通过上述步骤,可以实现从世界坐标到像素坐标的完整转换。
阅读全文
相关推荐

















