繁体   English   中英

如何将 rgb 图像像素与相应的点云点匹配

[英]how to match rgb image pixels with corresponding pointcloud points

我有一张彩色图像,由oak-D相机拍摄的对应点云(见下图),我想获取彩色图像中的像素信息和点云中对应的点云值。 我怎样才能得到这些信息? 例如,我在彩色图像中有一个像素值(200,250),如何知道点云中对应的点值? 任何帮助,将不胜感激。 在此处输入图像描述

听起来您想使用计算出的差异 map 将 2D object 投影到 3 个维度。为此,您还需要了解您的相机内在函数。 您应该可以使用 opencv 来解决这个问题。

首先,您需要构建 Q 矩阵(或整流变换矩阵)。 Q矩阵

您将需要提供

  • 左右固有校准矩阵
  • 从第一台摄像机的坐标系到第二台摄像机的平移向量
  • 从第一台摄像机的坐标系到第二台摄像机的旋转矩阵

这是一个编码示例:

import numpy as np
import cv2

Q = np.zeros((4,4))
cv2.stereoRectify(cameraMatrix1=K_left,  # left intrinsic matrix
                  cameraMatrix2=K_right, # right intrinsic matrix
                  distCoeffs1=0,  
                  distCoeffs2=0,  
                  imageSize=imageSize, # pass in the image size 
                  R=R,                 # Rotation matrix from camera 1 to camera 2
                  T=T,                 # Translation matrix from camera 1 to camera 2          
                  R1=None, 
                  R2=None, 
                  P1= None, 
                  P2= None, 
                  Q=Q);

接下来,您需要使用已知视差 map 和 Q 矩阵将图像重新投影到 3D。 该操作如下所示,但 opencv 使这更容易。

重新投影到 3D 的操作

xyz = cv2.reprojectImageTo3D(disparity, Q)

这将为您提供 3D 个点的 Nx3 数组。 该数组具体具有以下形状:(rows, columns, 3),其中 3 对应于点云的 (x,y,z) 坐标。 现在您可以使用像素位置索引到 xyz 并找到它对应的 (x, y, z) 点。

pix_row = 250
pix_col = 526
point_cloud_coordinate = xyz[pix_row, pix_col, :]

有关详细信息,请参阅文档

要将 RGB 图像像素与相应的点云点匹配,您需要使用描述两个坐标系之间转换的外部参数(旋转和平移)对齐 RGB 图像和点云。 这是执行此操作的一般过程:

校准捕获 RGB 图像的相机和捕获点云的 LIDAR/RGB-D 传感器。 此步骤涉及计算相机的内部参数和描述相机相对 position 和方向的外部参数。

利用RGB相机的外参数和内参数将点云中的3D个点投影到RGB相机的图像平面上。 这将为您提供投影点的二维图像坐标。

对于 RGB 图像中的每个像素,找到 2D 图像平面中最近的投影点,并将其与点云中对应的 3D 点相关联。 这可以使用最近邻搜索算法或其他图像处理技术来完成。

将RGB图像中的像素信息和对应的点云值存储在一个数据结构中,以备后用。

有许多可用的开源库和工具可以帮助您实施此过程,例如 PCL(点云库)、OpenCV 等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM