跳转至

图像转点云

Image to Point Cloud

输入输出数据

  • 输入数据:
  • 深度图 depth :depth[u, v] 表示像素点 \((u,v)\) 对应的场景中的三维点的 \(z\) 值。
  • 相机内参矩阵 intrinsics
  • 相机外参矩阵/相机位姿 extrinsics(可选)

  • 输出数据:

  • 点云 point cloud:(x, y, z) 表示点在相机或世界坐标系下的三维坐标。

相机内参矩阵

相机内参(intrinsics)是指相机的光学参数,包括焦距、像素大小、主点等。它们决定了图像在相机成像过程中的投影关系和畸变情况。相机内参通常通过标定获取,可以用于校正图像畸变和计算三维空间中的物体位置。

我们可以 利用相机内参矩阵和深度图将点由 屏幕坐标系 转换到 相机坐标系 。具体推导如下。

由上一节,我们知道 相机坐标系 中的点 \(P\) 投影到 胶片坐标系,再转换到 屏幕坐标系 共经历了两次矩阵变换:

\[ \begin{pmatrix}x' \\ y' \\ 1\end{pmatrix}=\frac{1}{z}\begin{pmatrix}f & 0 & 0 \\ 0 & f & 0 \\ 0 & 0 & 1\end{pmatrix}\begin{pmatrix}x \\ y \\ z\end{pmatrix} ,\quad \begin{pmatrix}u \\ v \\ 1\end{pmatrix}=\begin{pmatrix}\alpha & 0 & t_x \\ 0 & \beta & t_y\\ 0 & 0 & 1\end{pmatrix}\begin{pmatrix}x' \\ y' \\ 1\end{pmatrix} \]

合并两次矩阵变换,可以得到相机坐标系与屏幕坐标系的转换关系:

\[ \begin{pmatrix}u \\ v \\ 1\end{pmatrix}=\begin{pmatrix}\alpha & 0 & t_x \\ 0 & \beta & t_y\\ 0 & 0 & 1\end{pmatrix}\frac{1}{z}\begin{pmatrix}f & 0 & 0 \\ 0 & f & 0 \\ 0 & 0 & 1\end{pmatrix}\begin{pmatrix}x \\ y \\ z\end{pmatrix} \quad \Rightarrow \quad \begin{pmatrix}u \\ v \\ 1\end{pmatrix}=\frac{1}{z}\begin{pmatrix}\alpha f& 0 & t_x \\ 0 & \beta f& t_y\\ 0 & 0 & 1\end{pmatrix}\begin{pmatrix}x \\ y \\ z\end{pmatrix} \quad \Rightarrow \quad z \begin{pmatrix}u \\ v \\ 1\end{pmatrix}=\mathbf{K}\begin{pmatrix}x \\ y \\ z\end{pmatrix} \]

上式中的 \(\mathbf{K}\) 即为相机内参矩阵。因此, 在已知深度图时,可以通过下式得到相机坐标系下的点云

\[ \begin{pmatrix}x \\ y \\ z\end{pmatrix}=\mathbf{K^{-1}}\begin{pmatrix}u \\ v \\ 1\end{pmatrix}\cdot z \quad\Rightarrow\quad \textcolor{blue}{ \begin{pmatrix}x \\ y \\ z\end{pmatrix}=\mathbf{K^{-1}}\begin{pmatrix}u \\ v \\ 1\end{pmatrix}\cdot \mathbf{depth}_{u,v}} \]

相机外参矩阵

相机外参(extrinsics)是指相机在世界坐标系下的位置和姿态,通常包括相机的平移向量和旋转矩阵。它们描述了相机拍摄图像时相对于物体的位置和方向关系。相机外参可以通过计算机视觉中的标定方法获取,或者通过传感器的数据融合进行估计。

我们可以 利用相机外参矩阵将点由 相机坐标系 转换到 世界坐标系 。相机的位姿由旋转矩阵 \(\mathbf{R}\) 和 平移向量 \(\mathbf{t}\) 来描述,有

\[ \mathbf{camera\ pose}=\begin{pmatrix}\mathbf{R}|\mathbf{t}\end{pmatrix} \quad\Rightarrow\quad \textcolor{blue}{ \begin{pmatrix}x_w \\ y_w \\ z_w\end{pmatrix}=\mathbf{R}\begin{pmatrix}x \\ y \\ z\end{pmatrix} + \mathbf{t}} \]