将激光雷达点云投影到图像平面涉及几何变换和相机模型的应用。以下是该过程的基本原理:
1. 坐标系转换
激光雷达生成的点云通常位于激光雷达的坐标系中,而图像则在相机坐标系中。为了将点云投影到图像上,首先需要将点云从激光雷达坐标系转换到相机坐标系。
假设激光雷达坐标系中的一个点表示为
[ X lidar , Y lidar , Z lidar ] [X_{\text{lidar}}, Y_{\text{lidar}}, Z_{\text{lidar}}] [Xlidar,Ylidar,Zlidar]
,我们使用一个外参矩阵 (T)(通常是一个4x4的齐次变换矩阵),将其转换到相机坐标系:
[ X cam Y cam Z cam 1 ] = T ⋅ [ X lidar Y lidar Z lidar 1 ] \begin{bmatrix} X_{\text{cam}} \\ Y_{\text{cam}} \\ Z_{\text{cam}} \\ 1 \end{bmatrix} =T \cdot \begin{bmatrix} X_{\text{lidar}} \\ Y_{\text{lidar}} \\ Z_{\text{lidar}} \\ 1 \end{bmatrix} XcamYcamZcam1 =T⋅ XlidarYlidarZlidar1
其中,(T) 包含了旋转和平移的信息。
2. 相机投影模型
在得到相机坐标系下的点云坐标 [ X cam , Y cam , Z cam ] [X_{\text{cam}}, Y_{\text{cam}}, Z_{\text{cam}}] [Xcam,Ycam,Zcam]后,下一步是将这些三维坐标投影到二维图像平面。相机投影通常使用针孔相机模型,其基本公式如下:
[ u v ] = 1 Z cam [ f x 0 c x 0 f y c y ] ⋅ [ X cam Y cam Z cam ] \begin{bmatrix} u \\ v \end{bmatrix} =\frac{1}{Z_{\text{cam}}} \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \end{bmatrix} \cdot \begin{bmatrix} X_{\text{cam}} \\ Y_{\text{cam}} \\ Z_{\text{cam}} \end{bmatrix} [uv]=Zcam1[fx00fycxcy]⋅ XcamYcamZcam
其中:
- (u) 和 (v) 是图像平面上的像素坐标。
- (f_x) 和 (f_y) 是相机的焦距(在像素单位下)。
- (c_x) 和 (c_y) 是图像中心的坐标(主点)。
3. 应用畸变校正(如果有)
相机镜头的畸变会导致投影后的点出现偏差,因此通常会应用畸变校正。常见的畸变包括径向畸变和切向畸变,可以通过预先计算的畸变系数来校正。
4. 点云到图像的映射
通过上述步骤,每个激光雷达点都可以在图像平面上找到一个对应的像素坐标 ((u, v))。这些像素坐标表示激光雷达点在图像中的投影位置。
在相机模型中, ( c_x ) 和 ( c_y ) 通常表示图像平面上的主点(principal point)的坐标。主点是相机光学中心在图像平面上的投影点,它通常接近图像的几何中心,但在实际相机中可能会有一些偏移。
详细解释:
-
主点 ( c_x, c_y ):这是图像平面上光轴与平面的交点的坐标,也称为光学中心。它通常由相机的内参矩阵(Intrinsic Matrix)中的两个参数表示。
-
相机内参矩阵 :在相机标定过程中,我们可以得到一个 3x3 的内参矩阵,它的形式如下:
K = ( f x 0 c x 0 f y c y 0 0 1 ) K = \begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} K= fx000fy0cxcy1其中:
- f_x, f_y 是相机在 x 和 y 方向的焦距,通常与相机的焦距和像素大小相关。
- c_x, c_y 是主点的坐标。