世界坐标系-相机坐标系-像素坐标系

本文详细解析了世界坐标系、相机坐标系、图像物理坐标系和像素坐标系之间的转换过程,包括外参矩阵与内参矩阵的作用,以及相机标定中如何通过数学公式实现坐标间的转换。重点讲解了从世界坐标到像素坐标的完整流程和所需矩阵运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

世界坐标系,相机坐标系,图像物理坐标系,图像像素坐标系

相机标定:从世界坐标系到图像像素坐标系转换过程解析
相机标定(1)内\外参矩阵和畸变矩阵
浅析相机相关坐标系的相互转换(世界坐标系、相机坐标系、图像坐标系、像素坐标系、内参矩阵、外参矩阵、扭转因子)【相机标定&计算机视觉】
首先分清晰几种坐标系的意义:

  1. 世界坐标系 ,顾名思义,就是物体在世界坐标系下的长宽高,三维数据;
  2. 相机坐标系, 以相机镜头(光心)为坐标原点,以光轴为z轴,右手坐标系下,大拇指朝下,指向y轴,食指为z轴,中指为x轴(理论上讲,x轴,y轴需平行于图像中的x,y,此处本人选用的图像以左上角为原点,x轴正向为右方,y轴正向为下方,故做此设置),属于三维数据;
  3. 图像物理坐标系 ,指以光轴和图像平面的交点作为原点,x轴、y轴与相机坐标系的x、y平行,属于二维数据;
  4. 图像像素坐标系,以图像左上角为原点,x轴y轴与图像物理坐标系平行,属于二维数据,单位像素,以上三种单位为长度(cm、m等);

整体成像流程如图:(图像来源于网络,感谢原作者)
图片来源于网络

世界坐标系-相机坐标系,外参矩阵

空间中一点的世界坐标为:[Xw,Yw,Zw]^T
,要转换到相机坐标系,先把加一维用齐次坐标来表示它(这样就方便对它本身进行平移操作)。再左乘一个3x4的外参矩阵,从世界坐标系转换到相机坐标系。得到的相机坐标系坐标为三维数据:
在这里插入图片描述
外参矩阵可以有solvePnP函数得到;

相机坐标系-图像物理坐标系-图像像素坐标系,内参矩阵

  • 相机坐标系到图像物理坐标系:

在这里插入图片描述
由三角形相似可得:
在这里插入图片描述
f为焦距,Xc, Yc,Zc为上一步所得到的相机坐标系下坐标,Zc为相机到物体所在平面的距离,此处不考虑相机畸变了。

  • 图像物理坐标系到图像像素坐标系

在这里插入图片描述
dx和dy表示:x方向和y方向的一个像素分别占多少个(可是小数)长度单位。u0,v0表示图像的中心像素坐标和图像原点像素坐标之间相差的横向和纵向像素数。

  • 转换总公式:

在这里插入图片描述
这里等式右侧前两个矩阵的乘积,其实就是相机的内参矩阵,可以采用matlab进行标注,一般是固定的。
切记等式左侧还有个Zc,故在得到等式右边后,还需要除以Zc,才是像素坐标。

### 不同坐标系之间的关系 #### 像素坐标系与图像坐标系的关系 像素坐标系通常用于描述图像中各像素点的位置,其原点位于图像的左上角,而图像坐标系则以图像传感器(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}") ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值