主要内容

rightatelidarcameratransform.

从LIDAR传感器到相机估算刚性变换

描述

tform= rightatelidarcameratransform(ptCloudPlanesimageCorners3d的)使用从每个传感器提取的棋盘校准模式特征估计LIDAR传感器和相机之间的转换。

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

例子

[___) = estimateLidarCameraTransform (___名称,值的)除了前面语法中的参数组合外,还使用一个或多个名称-值对参数指定选项。例如,'verbose',真实设置要显示进度的函数。

例子

全部折叠

使用从LIDAR传感器和相机校准参数捕获的数据,从LIDAR传感器到相机的刚性变换。使用这三个步骤:

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

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

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

加载数据

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

imageDataPath = fullfile (toolboxdir ('lidar'),'lidardata'......'LCC''vlp16'“图片”);imd = imageDatastore (imageDataPath);imageFileNames = imds.Files;ptCloudFilePath = fullfile (toolboxdir ('lidar'),'lidardata'......'LCC''vlp16''pointcloud');PCDS = 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(iconeused);

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

[Lidarcheckerboard平面,框架已使用] = DetectritCharularPlanePoints(......pcFileNames planeDimension,'拆卸',真的);

提取检测到功能的图像,棋盘角,和点云。

imagfilenames = imagefilenames(iconeused);imagefilenames = ImageFileNames(框架);pcfilenames = pcfilenames(框架);imagecorners3d = imagecorners3d(:,:,框架);

估计转换

使用从图像点云和3-D棋盘角点使用棋盘平面估算转换。

[tform,错误] = rightatelidarcameratransform(Lidarcheckerboard平面,......imagecorners3d,“CameraIntrinsic”,内在的.Cameraparams);

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

图栏(错误.TranslationError)XLabel(的帧数)标题(“翻译错误(米)的)

图包含轴对象。具有标题转换错误(米)的轴对象包含类型栏的对象。

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

图包含轴对象。具有标题旋转误差(度)的轴对象包含类型栏的对象。

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

图包含轴对象。具有标题重新注入错误(像素)的轴对象包含类型栏的对象。

输入参数

全部折叠

分割的棋盘平面,指定为pointCloud对象或P.-By-1阵列pointCloud对象。P.为点云的数量。每一个pointCloud对象必须包含代表棋盘(矩形)平面的点。

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

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

数据类型:单身的|

名称 - 值参数

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

例子:'verbose',真实设置要显示进度的函数。

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

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

数据类型:单身的|

初始刚性变换,指定为包括的逗号分隔对'InitialTransform'和一个rigid3d.对象。

该功能假设LIDAR传感器之间的旋转角度,并且相机沿着每个轴的范围[-4545]。对于任何其他范围的旋转角度,使用此名称值对指定初始转换以提高功能精度。

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

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

数据类型:逻辑

输出参数

全部折叠

激光器对相机僵硬的变换,作为一个返回rigid3d.对象。所返回的对象将激光雷达传感器的点云数据注册到相机的坐标系中。

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

  • 旋转误导- 点云(LIDAR帧)中的棋盘平面和图像(相机帧)所定义的正常角度之间的差异。该功能使用棋盘角坐标估计图像中的平面。该函数以度为单位返回错误值P.有效数字数组。P.为点云的数量。

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

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

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

数据类型:结构体

介绍了R2020b