求由4x4矩阵定义的相机垂直屏幕直线的世界坐标系方程
没问题,这其实是计算机视觉里相机位姿变换的基础问题,我给你一步步拆解思路:
首先要搞清楚你手里的4x4矩阵的定义:它是「相机坐标系到世界坐标系」的变换矩阵(记为$T_{wc}$),还是「世界坐标系到相机坐标系」的变换矩阵(记为$T_{cw}$)?这是后续推导的关键,不同定义的处理逻辑略有区别。
通常来说,4x4刚体变换矩阵的结构是:
[ R | t ] [ 0 0 0 1 ]
其中:
- $R$是3x3旋转矩阵,描述坐标系间的旋转关系
- $t$是3x1平移向量,描述坐标系原点的位置偏移
我们默认采用计算机视觉中最常用的针孔相机坐标系:右手坐标系,相机屏幕位于xy平面,垂直于屏幕的方向就是相机的z轴(光轴)。
在相机坐标系中,这条直线的参数方程非常简单:
- 起点是相机原点:$O_c = (0, 0, 0)$
- 方向向量是光轴方向:$d_c = (0, 0, 1)$
- 参数方程(笛卡尔坐标):$P_c = O_c + s \cdot d_c = (0, 0, s)$,其中$s \in \mathbb{R}$(如果是射线则$s \geq 0$,直线则$s$可取任意实数)
我们分两种矩阵定义情况讨论:
情况1:你的4x4矩阵是$T_{wc}$(相机→世界)
这个矩阵的作用是把相机坐标系下的点/向量转换到世界坐标系:
- 相机原点在世界坐标系的位置:$O_w = T_{wc} \cdot [0, 0, 0, 1]^T$,也就是矩阵里的平移向量$t = (t_x, t_y, t_z)$
- 光轴方向向量在世界坐标系的表示:$d_w = R \cdot [0, 0, 1]^T$,也就是旋转矩阵$R$的第三列(因为旋转矩阵的每一列对应原坐标系轴在目标坐标系的方向)
此时,世界坐标系下的直线参数方程就是:
$$
\begin{cases}
x = t_x + s \cdot R_{13} \
y = t_y + s \cdot R_{23} \
z = t_z + s \cdot R_{33}
\end{cases}
$$
其中$s$是参数,$R_{ij}$表示旋转矩阵第i行第j列的元素。
情况2:你的4x4矩阵是$T_{cw}$(世界→相机)
这时候我们需要先求它的逆矩阵$T_{wc} = T_{cw}^{-1}$,刚体变换矩阵的逆有固定形式:
$$
T_{cw}^{-1} =
\begin{bmatrix}
R^T & -R^T t \
0 & 0 & 0 & 1
\end{bmatrix}
$$
其中$R^T$是旋转矩阵的转置(因为旋转矩阵是正交矩阵,逆等于转置)。
然后重复情况1的步骤:
- 相机原点在世界坐标系的位置:$O_w = -R^T t$
- 光轴方向向量在世界坐标系的表示:$d_w = R^T \cdot [0, 0, 1]T$(也就是$RT$的第三列,等价于$R$的第三行)
对应的参数方程为:
$$
\begin{cases}
x = (-R^T t)x + s \cdot (R^T){13} \
y = (-R^T t)y + s \cdot (R^T){23} \
z = (-R^T t)z + s \cdot (R^T){33}
\end{cases}
$$
假设你的$T_{wc}$矩阵是:
[ 1 0 0 5 ] [ 0 1 0 3 ] [ 0 0 1 2 ] [ 0 0 0 1 ]
这表示相机在世界坐标系的位置是(5,3,2),且没有旋转(光轴和世界坐标系z轴同向)。代入公式后,直线方程就是:
$$
\begin{cases}
x = 5 + s \cdot 0 \
y = 3 + s \cdot 0 \
z = 2 + s \cdot 1
\end{cases}
$$
也就是沿着世界z轴、过点(5,3,2)的直线,完全符合预期。
内容的提问来源于stack exchange,提问作者toto_tata

