主要内容

estimateLidarCameraTransform

估计从激光雷达传感器刚性变换相机

自从R2020b

描述

tform= estimateLidarCameraTransform (ptCloudPlanes,imageCorners)估计激光雷达传感器和摄像机之间的转换使用棋盘飞机从激光雷达传感器数据提取和三维图像的角落棋盘从相机中提取数据,分别。

tform= estimateLidarCameraTransform (ptCloudPlanes,imageCorners,intrinsic)使用棋盘飞机从激光雷达传感器,2 d或3 d图像的角落棋盘提取从一个相机,和摄像机内参数估计激光雷达传感器和摄像机之间的转换。

(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);

估计转换

估计转换使用棋盘飞机从云层和3 d棋盘角点的图像。

[tform、错误]= estimateLidarCameraTransform (lidarCheckerboardPlanesimageCorners3d intrinsic.cameraParams);

显示平移、旋转和reprojection错误条形图。

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

图包含一个坐标轴对象。坐标轴对象与标题翻译错误(米),包含帧数包含一个对象类型的酒吧。

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

图包含一个坐标轴对象。旋转坐标轴对象与标题错误(度),包含帧数包含一个对象类型的酒吧。

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

图包含一个坐标轴对象。坐标轴对象与标题Reprojection错误(像素),包含帧数包含一个对象类型的酒吧。

输入参数

全部折叠

分段棋盘飞机,指定为一个pointCloud对象或P1组pointCloud对象。P是数量的点云。每一个pointCloud对象必须包含点代表一个棋盘(矩形)的飞机。

P必须是平等的吗ptCloudPlanesimageCorners参数。这意味着大量的点云的数量和图片用于检测必须相等。

棋盘角从相机中提取数据,指定在二维或三维坐标。

  • 二维坐标,指定为4-by-2-by -P数组中。每一行的通道是形式的(xy],棋盘的角落里提取相应的摄像机图像。像素坐标的值

  • 三维坐标,指定为4-by-3-by -P数组中。每一行的通道是形式的(xyz],棋盘的角落里提取相应的摄像机图像。的值在世界坐标系统。

P代表相机用于检测图像的数量。P必须是平等的吗ptCloudPlanesimageCorners参数。这意味着大量的点云的数量和图片用于检测必须相等。

请注意

imageCorners值是在二维坐标系中,您必须指定摄像机内参数,intrinsic

数据类型:|

相机intrinsic参数,指定为一个cameraIntrinsics对象。

请注意

imageCorners值是在二维坐标系中,您必须指定摄像机内参数,intrinsic。当imageCorners在三维坐标,intrinsic是一个可选的输入。

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

例子:Verbose = true设置函数来显示进度。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:“详细”,真的设置函数来显示进度。

棋盘角在激光雷达坐标系,指定为4-by-3-by -P数组,P是数量的点云。

如果用户指定了棋盘角激光雷达坐标系,然后在内部函数不计算他们。

数据类型:|

最初的刚性变换,指定为一个rigidtform3d对象。

函数假设激光雷达传感器和摄像机之间的旋转角度范围45[-45]在每个轴。其他旋转角的范围,使用这个名称-值对指定一个初始变换改善功能的准确性。

显示功能的进步,指定为一个逻辑0()或逻辑1(真正的)。

数据类型:逻辑

输出参数

全部折叠

激光相机刚性变换,作为一个返回rigidtform3d对象。返回的对象注册从激光雷达点云数据传感器坐标系的相机。

变换矩阵的误差估计,作为结构或返回P有效数字数组。

  • 函数返回一个结构当图像角落在三维坐标。该结构包含这些字段。

    • RotationError——区别正常角度定义的棋盘平面点云(激光雷达)和图像(相机帧)。函数估计的平面图像使用棋盘角坐标。函数返回错误值度,作为一个P有效数字数组。P是数量的点云。

    • TranslationError——之间的差异的棋盘飞机质心坐标点云与影像。在米,函数返回错误值P有效数字数组。P是数量的点云。

    如果你指定摄像机内参数函数使用intrinsic参数,那么结构包含这些额外的字段。

    • ReprojectionError——预期之间的差异(转换)质心坐标的棋盘飞机从云层和图像。函数返回错误值的像素,作为一个P有效数字数组。P是数量的点云。

  • 对于二维图像角落,只返回reprojection误差函数。

版本历史

介绍了R2020b

全部展开