世界坐标系、相机坐标系和图像坐标系
时间: 2024-06-17 10:03:08 浏览: 436
世界坐标系、相机坐标系和图像坐标系是计算机视觉中非常重要的概念。
1. 世界坐标系:是一个三维坐标系,用于描述物体在三维空间中的位置和姿态,通常以一个固定的参考点为原点。在计算机视觉中,世界坐标系常用于描述物体在三维空间中的位置和姿态。
2. 相机坐标系:是一个三维坐标系,用于描述相机在三维空间中的位置和姿态。相机坐标系通常以相机光心(即相机的光学中心)为原点,以相机成像平面的法向量为z轴方向。在计算机视觉中,相机坐标系常用于描述相机的内部参数和外部参数。
3. 图像坐标系:是一个二维坐标系,用于描述图像中像素的位置。图像坐标系通常以图像左上角为原点,x轴向右延伸,y轴向下延伸。在计算机视觉中,图像坐标系常用于描述图像中的特征点或目标物体的位置。
相关问题
世界坐标系 相机坐标系 像素坐标系 图像坐标系
### 不同坐标系之间的关系
在计算机视觉领域,多个坐标系用于描述物体的位置和方向。这些坐标系包括世界坐标系、相机坐标系、图像坐标系以及像素坐标系。
#### 世界坐标系 (World Coordinate System)
这是全局参考框架,在此系统中定义了场景中的所有对象位置。它通常被设定为固定不变的空间参照点[^2]。
#### 相机坐标系 (Camera Coordinate System)
当摄像头捕捉到三维世界的景象时,会创建一个新的局部坐标体系——即摄像机坐标系。该坐标系原点位于摄像机光心处,并且Z轴指向拍摄方向。通过一系列变换可以将任何给定的世界坐标映射至对应的摄像机坐标下[^1]。
#### 图像坐标系 (Image Coordinate System)
一旦光线穿过镜头并投射到传感器平面上,则形成了二维平面内的表示形式—这就是所谓的图像坐标系。此时X' 和 Y' 轴分别平行于成像面的水平线与垂直线;而 z 值则代表距离焦距的距离[^3]。
#### 像素坐标系 (Pixel Coordinate System)
最终,为了能够在显示器上呈现图像数据,还需要进一步把上述得到的结果转化为具体的像素位置。这一步骤涉及到标准化设备单位(NDC)向实际分辨率坐标的转变过程。
### 各种转换方法概述
要实现从一种坐标系到另一种的有效过渡,主要依赖以下几个关键矩阵:
- **Model Matrix**: 将几何体由其原始状态移动旋转缩放等操作后放置入适当位置;
- **View Matrix**: 描述如何调整视角来模拟虚拟摄影装置的动作效果;
- **Projection Matrix**: 定义投影方式从而决定近大远小的关系特性。
具体来说,顶点最初处于本地空间(local space),随后依次经历如下阶段直至成为屏幕上可见的形式:
1. 应用模型变换(model transformation)使物体进入世界坐标(world coordinate)[^2];
2. 使用视图变换(view transformation)将其置于相对于观看者而言恰当的角度方位;
3. 经过投影变换(projection transformation),使得景物呈现出合理的透视感观特征;
4. 执行裁切(clipping)以去除超出视野范围的部分;
5. 实施齐次除法(homogeneous divide)/透视除法(perspective division);
6. 映射(mapping)至规范化后的窗口坐标(normalized device coordinates, NDCs)[-3];
7. 最终完成屏幕映射(screen mapping).
```cpp
// C++ code snippet demonstrating basic transformations using OpenGL matrices.
glm::mat4 model = glm::translate(glm::mat4(1.0f), position); // Model matrix example
glm::mat4 view = glm::lookAt(cameraPos, cameraFront, cameraUp); // View matrix creation
glm::mat4 projection = glm::perspective(glm::radians(fov), aspectRatio, nearPlane, farPlane); // Projection setup
```
像素坐标系图像坐标系相机坐标系世界坐标系
### 不同坐标系之间的关系
#### 像素坐标系与图像坐标系的关系
像素坐标系通常用于描述图像中各像素点的位置,其原点位于图像的左上角,而图像坐标系则以图像传感器(CCD/CMOS)的中心作为原点。两者之间存在固定的偏移量以及尺度差异。
对于从像素坐标到图像坐标的变换可以表示为:
\[ \begin{bmatrix} u \\ v \end{bmatrix}_{\text{image}} = K^{-1}\cdot \begin{bmatrix} x_{pixel} \\ y_{pixel} \end{bmatrix}, \]
这里 \(K\) 是相机内部参数矩阵,包含了焦距和主点位置的信息[^3]。
#### 图像坐标系与相机坐标系的关系
当考虑三维空间内的点投影至二维平面上时,则需引入相机坐标系。该过程涉及到了内外部参数矩阵的应用。外部参数定义了世界坐标系相对于相机坐标系的姿态变化;内部参数决定了如何映射这些3D点成为2D图像上的对应点。
具体来说,如果已知某一点的世界坐标\(P_w=[X,Y,Z]^T\)及其对应的图像坐标\(p_i=(u,v)\),那么通过如下方程可实现两者的关联:
\[ p_i=K[R|t]\cdot P_w,\]
其中,\(R\)代表旋转矩阵,用来表征姿态角度的变化;\(t\)则是平移向量,指示了两个坐标系统的相对位移;\(K\)再次指代上述提到过的内参矩阵[^2]。
#### 相机坐标系与世界坐标系的关系
为了建立更广泛的空间联系,还需要理解相机坐标系与世界坐标系间的转换机制。这主要依赖于外参矩阵——即由旋转和平移组成的组合形式来完成。给定任意一固定参照物,在不同视角下所观察的结果可以通过调整这两个因素来进行预测或重建。
假设有一个点在世界坐标系下的坐标为\([x',y']\),将其转换到相机坐标系下后的坐标记作\([x,y]\)。此过程中仅发生了绕Z轴的角度θ的旋转变换,因此有:
\[ R_z(\theta)=\begin{pmatrix}
cos{\theta}&-sin{\theta}\\
sin{\theta}& cos{\theta}
\end{pmatrix},
\quad
[x\\y]=R_z(-\theta)[x'\\y']. \]
值得注意的是,这里的z轴保持不变,意味着深度信息并未受到影响[^4]。
```python
import numpy as np
def world_to_camera(world_point, rotation_angle):
"""将世界坐标系中的点转换为相机坐标系"""
rz = lambda theta: np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
camera_point = rz(-rotation_angle).dot(world_point[:2])
return np.append(camera_point, world_point[-1])
world_point_example = np.array([10., 5., 8.]) # 示例世界坐标点 (x', y', z')
camera_point_result = world_to_camera(world_point_example, np.pi / 6)
print(f"World Point {world_point_example} -> Camera Point {camera_point_result}")
```
阅读全文
相关推荐













