三维重建系列之:世界坐标系、相机坐标系和像素坐标系的基本概念和相互转换


一、前言

在现代计算机视觉和机器人导航系统中,理解和应用不同坐标系及其相互转换是至关重要的。本博客文章将深入探讨三种关键的坐标系:世界坐标系、相机坐标系和像素坐标系。我们将详细解释每个坐标系的基本概念,并提供这些坐标系之间转换的详细公式。通过这些知识,我们可以更好地理解和实现复杂的视觉处理任务,如3D重建、物体跟踪和场景理解。


二、基本概念

世界坐标、相机坐标和像素坐标是计算机视觉和图像处理中经常使用的三种坐标系统。它们之间的转换是3D图形和机器视觉领域的基础。下面我将详细解释这三种坐标系统及它们之间的转换公式:

1. 世界坐标系(World Coordinates)

世界坐标系是一个全局的坐标系统,用于定义场景中物体的位置。在这个坐标系中,每个物体的位置都是相对于一个全局原点来描述的。

2. 相机坐标系(Camera Coordinates)

相机坐标系是相对于相机的位置来定义物体的坐标系统。在这个坐标系中,原点通常位于相机的光心,即相机镜头的中心。Z轴通常与相机的观察方向一致,X和Y轴定义相机平面。

3. 像素坐标系(Pixel Coordinates)

像素坐标系是图像上的二维坐标系统,用于定义图像上每个像素的位置。原点通常位于图像的左上角,X轴从左到右延伸,Y轴从上到下延伸。


三、相互转换

1. 从世界坐标系到相机坐标系(World to Camera)

世界坐标 P w = ( X w , Y w , Z w ) P_w = (X_w, Y_w, Z_w) Pw=(Xw,Yw,Zw)转换到相机坐标 P c = ( X c , Y c , Z c ) P_c = (X_c, Y_c, Z_c) Pc=(Xc,Yc,Zc)通常通过以下公式完成:

P c = R ⋅ ( P w − C ) P_c = R \cdot (P_w - C) Pc=R(PwC)

  • R R R是一个 3x3 旋转矩阵,表示相机相对于世界坐标系的旋转。
  • C C C是相机在世界坐标系中的位置, P w − C P_w - C PwC表示将原点平移到相机位置。

通常,这个过程被表示为一个4x4齐次坐标变换矩阵,称为外参数矩阵 M e x t M_{ext} Mext:

M e x t = [ R − R ⋅ C 0 1 ] M_{ext} = \begin{bmatrix} R & -R \cdot C \\ 0 & 1 \end{bmatrix} Mext=[R0RC1]
也可以表示为
M e x t = [ R t 0 1 ] M_{ext} = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} Mext=[R0t1]

具体的计算步骤如下:

  1. 平移变换
    为了将世界坐标点转换到相对于相机的位置,首先需要对世界坐标点进行平移。平移的目的是将相机视为新的原点。这可以通过减去相机在世界坐标系中的位置 C C C来实现:

P t r a n s l a t e d = P w − C P_{translated} = P_w - C Ptranslated=PwC

这个步骤实质上是将整个坐标系向反方向移动,直到相机的位置成为新的坐标原点。

  1. 旋转变换
    接下来,应用旋转矩阵 R R R来调整平移后的坐标点,使其与相机的朝向一致。这一步是必要的,因为相机的朝向可能与世界坐标系的轴不一致。旋转矩阵 R R R考虑了这一差异,并正确地调整点的方向:

P c = R ⋅ P t r a n s l a t e d P_c = R \cdot P_{translated} Pc=RPtranslated

这一步确保了点在相机坐标系中的方向正确表示。

将以上两个步骤整合到一个4x4的齐次坐标变换矩阵中,我们可以使用 M e x t M_{ext} Mext来直接从世界坐标转换到相机坐标:

M e x t = [ R − R ⋅ C 0 1 ] M_{ext} = \begin{bmatrix} R & -R \cdot C \\ 0 & 1 \end{bmatrix} Mext=[R0RC1]

或者,如果直接使用平移向量 t t t(通常定义为 t = − R ⋅ C t = -R \cdot C t=RC),矩阵可以表示为:

M e x t = [ R t 0 1 ] M_{ext} = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} Mext=[R0t1]

在实际应用中,当你有一个世界坐标 P w P_w Pw时,可以通过以下操作直接计算相机坐标:

P c = M e x t ⋅ [ P w 1 ] P_c = M_{ext} \cdot \begin{bmatrix} P_w \\ 1 \end{bmatrix} Pc=Mext[Pw1]

2. 从相机坐标系到世界坐标系(Camera to World)

当有一个点在相机坐标系中 P c = ( X c , Y c , Z c ) P_c = (X_c, Y_c, Z_c) Pc=(Xc,Yc,Zc)并希望将其转换回世界坐标系 P w P_w Pw,需要使用外参矩阵的逆变换:

P w = R T ⋅ P c + C P_w = R^T \cdot P_c + C Pw=RTPc+C

  • R T R^T RT是旋转矩阵 R R R的转置,它将点从相机坐标系旋转回到世界坐标系。
  • C C C是相机在世界坐标系中的位置,表示平移向量。

外参矩阵的逆可以表示为:

M e x t − 1 = [ R T − R T ⋅ C 0 1 ] M_{ext}^{-1} = \begin{bmatrix} R^T & -R^T \cdot C \\ 0 & 1 \end{bmatrix} Mext1=[RT0RTC1]

这样,可以使用 M e x t − 1 M_{ext}^{-1} Mext1来将相机坐标转换为世界坐标。具体步骤如下:

  1. 构造齐次坐标:首先,将相机坐标点 P c P_c Pc表示为齐次坐标形式,即 [ X c Y c Z c 1 ] \begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrix} XcYcZc1

  2. 应用外参矩阵的逆:然后,使用外参矩阵的逆 M e x t − 1 M_{ext}^{-1} Mext1来进行坐标转换。外参矩阵的逆 M e x t − 1 M_{ext}^{-1} Mext1定义为:

M e x t − 1 = [ R T − R T ⋅ C 0 1 ] M_{ext}^{-1} = \begin{bmatrix} R^T & -R^T \cdot C \\ 0 & 1 \end{bmatrix} Mext1=[RT0RTC1]

其中, R T R^T RT是旋转矩阵 R R R的转置, C C C是相机在世界坐标系中的位置,表示为平移向量。这里的 − R T ⋅ C -R^T \cdot C RTC是将平移向量调整为相对于相机的位置。

  1. 计算世界坐标:应用外参矩阵的逆,将相机坐标转换为世界坐标:

P w = M e x t − 1 ⋅ [ X c Y c Z c 1 ] P_w = M_{ext}^{-1} \cdot \begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrix} Pw=Mext1 XcYcZc1

这将输出 P w P_w Pw的齐次坐标形式,通常为 [ X w Y w Z w 1 ] \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} XwYwZw1

3. 从相机坐标系到像素坐标系(Camera to Pixel)

相机坐标 P c = ( X c , Y c , Z c ) P_c = (X_c, Y_c, Z_c) Pc=(Xc,Yc,Zc)转换到像素坐标 p = ( u , v ) p = (u, v) p=(u,v)的公式涉及内参矩阵:

p = K ⋅ [ X c / Z c Y c / Z c 1 ] p = K \cdot \begin{bmatrix} X_c / Z_c \\ Y_c / Z_c \\ 1 \end{bmatrix} p=K Xc/ZcYc/Zc1

  • K K K是内参数矩阵:

K = [ f x s c x 0 f y c y 0 0 1 ] K = \begin{bmatrix} f_x & s & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K= fx00sfy0cxcy1

  • f x , f y f_x, f_y fx,fy是相机的焦距(以像素为单位)。
  • c x , c y c_x, c_y cx,cy是图像的主点坐标。
  • s s s是像素的偏斜系数,通常设为0。

4. 从像素坐标系到相机坐标系(Pixel to Camera)

逆向从像素坐标 p = ( u , v ) p = (u, v) p=(u,v)转换回相机坐标 P c = ( X c , Y c , Z c ) P_c = (X_c, Y_c, Z_c) Pc=(Xc,Yc,Zc)需要内参矩阵的逆:

[ X c Y c Z c ] = Z c ⋅ K − 1 ⋅ [ u v 1 ] \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix} = Z_c \cdot K^{-1} \cdot \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} XcYcZc =ZcK1 uv1

这里,当偏斜系数 s s s为 0 时,内参数矩阵 K K K及其逆矩阵 K − 1 K^{-1} K1分别为:

K = [ f x 0 c x 0 f y c y 0 0 1 ] K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K= fx000fy0cxcy1

K − 1 = [ 1 f x 0 − c x f x 0 1 f y − c y f y 0 0 1 ] K^{-1} = \begin{bmatrix} \frac{1}{f_x} & 0 & -\frac{c_x}{f_x} \\ 0 & \frac{1}{f_y} & -\frac{c_y}{f_y} \\ 0 & 0 & 1 \end{bmatrix} K1= fx1000fy10fxcxfycy1

K − 1 K^{-1} K1应用于像素坐标转换公式中,我们得到:

[ X c Y c Z c ] = Z c ⋅ [ 1 f x 0 − c x f x 0 1 f y − c y f y 0 0 1 ] ⋅ [ u v 1 ] \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix} = Z_c \cdot \begin{bmatrix} \frac{1}{f_x} & 0 & -\frac{c_x}{f_x} \\ 0 & \frac{1}{f_y} & -\frac{c_y}{f_y} \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} XcYcZc =Zc fx1000fy10fxcxfycy1 uv1

  • Z c Z_c Zc是相机坐标系中的深度值,必须另外确定或假设。

这个转换公式可以用来从图像坐标重构三维空间中的点位置,尤其是在结合深度信息时。

5. 从世界坐标系到像素坐标系(World to Pixel)

要直接从世界坐标 P w P_w Pw转换到像素坐标 p p p,需要联合使用外参矩阵 M e x t M_{ext} Mext和内参矩阵 K K K。整个过程可以表示为:

  1. 首先使用外参矩阵将世界坐标转换为相机坐标:

    P c = M e x t ⋅ [ P w 1 ] P_c = M_{ext} \cdot \begin{bmatrix} P_w \\ 1 \end{bmatrix} Pc=Mext[Pw1]

  2. 然后,使用内参矩阵将相机坐标转换为像素坐标:

    p = K ⋅ [ X c / Z c Y c / Z c 1 ] p = K \cdot \begin{bmatrix} X_c / Z_c \\ Y_c / Z_c \\ 1 \end{bmatrix} p=K Xc/ZcYc/Zc1

这样,通过这两步,可以直接将世界坐标系中的点转换到图像的像素坐标系。上面的公式合在一起就是
p = K ⋅ M e x t ⋅ [ P w 1 ] p = K \cdot M_{ext} \cdot \begin{bmatrix} P_w \\ 1 \end{bmatrix} p=KMext[Pw1]

  • M e x t M_{ext} Mext是外参矩阵,将世界坐标转换为相机坐标。
  • K K K是内参矩阵,将相机坐标转换为像素坐标。

6. 从像素坐标系到世界坐标系(Pixel to World)

在计算机视觉中,将像素坐标转换回世界坐标涉及内参矩阵 K K K、外参矩阵 M e x t M_{ext} Mext和深度信息 Z c Z_c Zc的综合应用。这些步骤确保了从二维图像空间到三维物理空间的准确映射。下面详细解释整个转换过程,包括相机外参矩阵的角色:

  1. 像素坐标到归一化相机坐标
    • 使用内参矩阵 K K K的逆将像素坐标 ( u , v ) (u, v) (u,v)转换为归一化的相机坐标 ( X c , Y c , 1 ) (X_c, Y_c, 1) (Xc,Yc,1)。这一步可以表示为:

[ X c Y c 1 ] = K − 1 ⋅ [ u v 1 ] \begin{bmatrix} X_c \\ Y_c \\ 1 \end{bmatrix} = K^{-1} \cdot \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} XcYc1 =K1 uv1

这一步解除了摄像机的内在畸变,包括焦距和主点坐标的调整。

  1. 考虑深度信息 Z c Z_c Zc
    • 将归一化坐标乘以深度 Z c Z_c Zc,以获得三维空间中的相机坐标:

[ X c Y c Z c ] = Z c ⋅ [ X c Y c 1 ] \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix} = Z_c \cdot \begin{bmatrix} X_c \\ Y_c \\ 1 \end{bmatrix} XcYcZc =Zc XcYc1

  1. 完整的像素到世界坐标的转换公式
    • 综合以上步骤,完整的转换公式可以表示为:

P w = R T ⋅ ( Z c ⋅ K − 1 ⋅ [ u v 1 ] − t ) P_w = R^T \cdot (Z_c \cdot K^{-1} \cdot \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} - t) Pw=RT(ZcK1 uv1 t)

这里 R T R^T RT − t -t t反映了相机从世界坐标系到相机坐标系的逆变换。这一步确保了任何从图像中得到的点都可以被精确地映射回它在物理世界中的位置。

通过以上描述,我们可以看到世界坐标、相机坐标和像素坐标这间的的完整转换路径。这些转换在计算机视觉系统中是基础且至关重要的。对于不同的应用场景,可能需要适当调整这些公式中的参数,以适应具体的相机配置和场景几何。


四、总结

坐标系及其转换在计算机视觉领域占据核心地位。理解如何从一个坐标系转换到另一个坐标系,不仅是理论上的需要,也是实际应用中不可或缺的技能。本文提供的深入分析和详细的转换公式,使得读者能够更好地应对涉及复杂视觉信息处理的挑战。通过精确地处理这些转换,我们可以增强机器对环境的感知能力,进一步推动自动化和智能化技术的发展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值