主要内容

scanContextDescriptor

从点云中提取扫描上下文描述符

描述

例子

描述符= scanContextDescriptor (ptCloud从点云中提取扫描上下文描述符,ptCloud

扫描上下文描述符是点云的二维全局特征描述符,可用于检测循环闭包。该函数计算描述符的方法是:首先将三维点云扫描中的点分箱到同心径向和方位的分箱中,然后选择最大值z-每个bin中的点的高度。

描述符= scanContextDescriptor (ptCloud名称,值使用一个或多个名称-值对参数指定选项。

例子

全部折叠

创建一个Velodyne®包捕获(PCAP)文件读取器。

veloReader = velodyneFileReader(“lidarData_ConstructionRoad.pcap”“HDL32E”);

读取第1、2和100次扫描到工作区。

ptCloud1 = readFrame(veloReader,1);ptCloud2 = readFrame(veloReader,2);ptCloud100 = readFrame(veloReader,100);

从每个点云提取扫描上下文描述符。

description = scanContextDescriptor(ptCloud1);description = scanContextDescriptor(ptCloud2);descriptor100 = scanContextDescriptor(ptCloud100);

计算第1和第2个扫描上下文描述符之间的描述符距离,以及第1和第100个扫描上下文描述符之间的描述符距离。

dist1to2 = scanContextDistance(descriptor1,descriptor2);dist1to100 = scanContextDistance(描述1,描述100);

显示扫描上下文描述符距离。

disp (描述符从帧1到帧2的距离+ num2str (dist1to2))
描述符从帧1到帧2的距离:0.087646
disp (从第1帧到第100帧的描述符距离+ num2str (dist1to100))
描述符从帧1到100的距离:0.32427

输入参数

全部折叠

点云对象,指定为pointCloud对象。

名称-值参数

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

例子:“NumBins”,[60]20将径向容器的数量设置为20.,方位角箱数为60

同心径向和角度容器的数目,指定为由逗号分隔的对组成“NumBins”一个形式为[的向量numRadialBinsnumAzimuthalBins),numRadialBins是一个正整数,指定同心径向箱的数量和numAzimuthalBins指定同心角容器的数量。为了提取更紧凑的描述符,可以减少容器的数量,但这会降低鉴别能力。

描述符中包含的bin的最小点数,指定为逗号分隔的对,由“MinPointsPerBin”一个正整数。不包含最小点数的箱不包含在描述符中。对于这些容器,函数返回.为了减少噪声被包含为bin的机会,增加这个值。

传感器原点,指定为由逗号分隔的对组成“SensorOrigin”这是一个二元向量。元素设置x- - -y-轴坐标点,分别为传感器原点的世界单位。该函数将箱子集中在扫描的原点周围。

对点进行分箱时使用的描述符的径向边界,指定为由逗号分隔的对组成“RadialRange”和一个两元向量,形式为[rmin征求].使用这个名称-值参数来限制描述符覆盖的空间边界。

输出参数

全部折叠

扫描上下文描述符,返回为——- - - - - -N矩阵,而且N分别是描述符中同心径向和角度容器的数量。属性指定NumBins财产。

函数返回的数据类型继承位置输入点云的属性。

数据类型:|

提示

  • 扫描上下文描述符函数假设传感器大致水平安装,并且输入点云位于传感器坐标系中。

  • 属性比较两个扫描上下文描述符之间的距离,以确定循环闭包候选项scanContextDistance函数。

扩展功能

C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。

另请参阅

对象

功能

R2020b中介绍