主要内容

estimateLidarCameraTransform

估计从激光雷达传感器到摄像机的刚性转换

描述

tform= estimateLidarCameraTransform (ptCloudPlanesimageCorners3d利用从每个传感器提取的棋盘格校准模式特征估计激光雷达传感器和摄像机之间的转换。

tform错误) = estimateLidarCameraTransform (___返回估计转换矩阵时的不准确性错误使用前面语法中的输入参数。

例子

___) = estimateLidarCameraTransform (___名称,值除了前面语法中的参数组合外,还使用一个或多个名称-值对参数指定选项。例如,“详细”,真的设置显示进度的功能。

例子

全部折叠

使用从激光雷达传感器和摄像机校准参数捕获的数据估计从激光雷达传感器到摄像机的刚性转换。使用以下三个步骤:

  1. 将数据加载到工作区中。

  2. 从图像和点云数据中提取所需的特征。

  3. 利用提取的特征估计刚性变换。

加载数据

加载图像并将云数据指向工作区。

imageDataPath = fullfile (toolboxdir (激光雷达的),“lidardata”...低成本航空的“vlp16”“图片”);imd = imageDatastore (imageDataPath);imageFileNames = imds.Files;ptCloudFilePath = fullfile (toolboxdir (激光雷达的),“lidardata”...低成本航空的“vlp16”“pointCloud”);pcd = fileDatastore (ptCloudFilePath,“ReadFcn”, @pcread);pcFileNames = pcds.Files;

将摄像机校准文件加载到工作区中。

cameraIntrinsicFile = fullfile (imageDataPath,“calibration.mat”);内在=负载(cameraIntrinsicFile);

特征提取

指定棋盘的大小,单位为毫米。

squareSize = 81;

估计图像的棋盘角坐标。

[imageCorners3d, planeDimension imagesUsed] = estimateCheckerboardCorners3d (...imageFileNames、intrinsic.cameraParams squareSize);

根据使用的图像过滤点云。

pcFileNames = pcFileNames (imagesUsed);

使用平面参数检测过滤点云中的棋盘平面planeDimension

[lidarCheckerboardPlanes, framesUsed] = detectRectangularPlanePoints (...pcFileNames planeDimension,“RemoveGround”,真正的);

提取图像、棋盘角和点云,在其中您检测到的特征。

imagFileNames = imageFileNames (imagesUsed);imageFileNames = imageFileNames (framesUsed);pcFileNames = pcFileNames (framesUsed);imageCorners3d = imageCorners3d (:,:, framesUsed);

估计转换

使用来自点云的棋盘平面和来自图像的三维棋盘角点估计变换。

[tform、错误]= estimateLidarCameraTransform (lidarCheckerboardPlanes...imageCorners3d,“CameraIntrinsic”, intrinsic.cameraParams);

将平移、旋转和重投影误差显示为条形图。

图酒吧(errors.TranslationError)包含(的帧数)标题(“翻译错误(米)

图中包含一个坐标轴。标题为Translation Error (meters)的轴包含一个bar类型的对象。

图酒吧(errors.RotationError)包含(的帧数)标题(的旋转误差(度)

图中包含一个坐标轴。标题为旋转错误(度)的轴包含一个类型为bar的对象。

图酒吧(errors.ReprojectionError)包含(的帧数)标题(“Reprojection错误(像素)”

图中包含一个坐标轴。标题为“重投影错误”(像素)的轴包含一个类型为bar的对象。

输入参数

全部折叠

分割的棋盘平面,指定为pointCloud对象或P1组pointCloud对象。P为点云的数量。每一个pointCloud对象必须包含表示棋盘(矩形)平面的点。

P必须是相等的ptCloudPlanesimageCorners3d参数。这意味着用于检测的点云的数量和图像的数量也必须相等。

棋盘角的三维坐标,指定为4 × 3矩阵或4 × 3 × -矩阵P数组中。P表示用于检测的摄像机图像的数量。通道的每一行都包含三维坐标,形式为[xyz,从相应的摄像机图像中提取出一个以米为单位的棋盘角。P必须是相等的ptCloudPlanesimageCorners3d参数。这意味着用于检测的点云的数量和图像的数量也必须相等。

数据类型:|

名称-值对的观点

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“详细”,真的设置显示进度的功能。

激光雷达框架中的棋盘角,指定为逗号分隔对,由“Lidar3DCorners”和一个4-by-3-by -P数组,P为点云的数量。

如果用户在激光雷达框架中指定了棋盘角,则该函数不会在内部计算它们。

数据类型:|

初始刚性变换,指定为逗号分隔对组成“InitialTransform”和一个rigid3d对象。

该功能假设激光雷达传感器和摄像机之间的旋转角度沿每个轴在范围[-45 -45]。对于任何其他旋转角度范围,使用此名称-值对来指定初始转换,以提高函数的精度。

摄像机固有参数,指定为逗号分隔对组成“CameraIntrinsic”和一个cameraIntrinsics对象或cameraParameters对象。

显示函数进度,指定为逗号分隔对组成“详细”和一个逻辑0)或逻辑1真正的).

数据类型:逻辑

输出参数

全部折叠

激光雷达对摄像机进行刚性变换,返回为一个rigid3d对象。所返回的对象将激光雷达传感器的点云数据注册到相机的坐标系中。

转换矩阵估计的不准确性,作为一个结构返回。该结构包含这些字段。

  • RotationError-点云(激光雷达框架)和图像(相机框架)中棋盘格平面定义的法线角度的差异。该函数使用棋盘角坐标估计图像中的平面。函数以度数为单位返回错误值P有效数字数组。P为点云的数量。

  • TranslationError-点云中的棋盘平面质心坐标与图像中的质心坐标的差值。该函数返回以米为单位的错误值,如aP有效数字数组。P为点云的数量。

如果你指定相机的内在参数的功能使用“CameraIntrinsic”名称-值对,然后结构包含这个附加字段。

  • ReprojectionError-点云和图像中棋盘平面投影(变换)质心坐标的差异。函数以像素为单位返回错误值P有效数字数组。P为点云的数量。

数据类型:结构体

介绍了R2020b