主要内容

gatherLabelData

从地面实况收集同步标签数据

描述

labelData= gatherLabelData (gTruthsignalNameslabelTypes返回从多信号地真值数据收集的同步标签数据,gTruth.函数返回指定信号的标签数据signalNames所指定的标签类型labelTypes

例子

labelData时间戳= gatherLabelData(___另外,使用前面语法中的参数返回与收集的标签数据关联的信号时间戳。

使用时间戳writeFrames函数写入关联的信号帧groundTruthMultisignal对象到磁盘。使用这些框架和相关标签作为机器学习或深度学习模型的训练数据。

___= gatherLabelData(___“SampleFactor”,sampleFactor指定用于对标签数据进行子抽样的抽样因子。

例子

全部折叠

为视频信号和激光雷达点云序列信号收集标签数据groundTruthMultisignal对象。将与该标签数据相关的信号帧写入磁盘并可视化这些帧。

将点云序列文件夹路径添加到MATLAB®搜索路径中。视频已经在MATLAB搜索路径上了。

pcSeqDir = fullfile(toolboxdir(“开车”),“drivingdata”...“lidarSequence”);目录(pcSeqDir);

加载一个groundTruthMultisignal对象,该对象包含视频和激光雷达点云序列的标签数据。

数据=负载(“MultisignalGTruth.mat”);gTruth = data.gTruth;

指定从其中收集标签数据的信号。

signalNames = [“video_01_city_c2s_fcw_10s”“lidarSequence”];

视频包含矩形标签,而激光雷达点云序列包含长方体标签。从视频中收集矩形标签,从激光雷达点云序列中收集长方体标签。

labelTypes = [labelType.]矩形labelType。长方体];[labelData,timestamps] = gatherLabelData(gTruth,signalNames,labelTypes);

显示来自两个信号的前八行标签数据。两个信号都包含标签。在视频中标签被绘制为一个矩形包围框。在激光雷达点云序列中标签绘制为长方体包围框。

videoLabelSample = head(labelData{1}) lidarLabelSample = head(labelData{2})
videoLabelSample =表车  _________________ {[ 299 213 42 33]} lidarLabelSample =表的车  ____________________________________________________ {[ 17.7444 6.7386 3.3291 3.6109 3.2214 3.5583 0 0 0]}

将与收集的标签数据相关的信号帧写入临时文件夹位置,每个信号一个文件夹。方法返回的时间戳gatherLabelData函数指示要写入哪些信号帧。

outputFolder = fullfile(tempdir,[“videoFrames”“lidarFrames”]);fileNames = writeFrames(gTruth,signalNames,outputFolder,时间戳);
从以下信号写入2帧:* video_01_city_c2s_fcw_10s * lidarSequence

加载写入的视频信号帧imageDatastore对象。控件加载关联的矩形标签数据boxLabelDatastore对象。

imds = imageDatastore(文件名{1});blds = boxLabelDatastore(labelData{1});

加载写入的激光雷达信号帧fileDatastore对象。方法加载相关的长方体标签数据boxLabelDatastore对象。

fds = fileDatastore(文件名{2},“ReadFcn”, @pcread);clds = boxLabelDatastore(labelData{2});

可视化写入的视频帧使用愿景。放像机对象。可视化写入的激光雷达帧使用pcplayer对象。

videoPlayer = vision.VideoPlayer;ptCloud =预览(fds);ptCloudPlayer = pcplayer(ptCloud.XLimits,ptCloud.YLimits,ptCloud.ZLimits);hasdata (imd)读取视频和激光雷达帧。I = read(imds);ptCloud = read(fds);可视化视频和激光雷达帧。放像机(我);视图(ptCloudPlayer ptCloud);结束

删除点云序列文件夹的路径。

rmpath (pcSeqDir);

输入参数

全部折叠

多信号地真值数据,指定为agroundTruthMultisignal的对象或向量groundTruthMultisignal对象。

每一个groundTruthMultisignal对象gTruth必须包括在signalNames输入。

此外,每个对象必须在每个收集的标签定义中包含至少一个标记的标签。假设gTruth是一个groundTruthMultisignal对象,其中包含单个视频信号的标签数据video_front_camera.对象包含标记的矩形感兴趣区域(ROI)标签标签定义,但不为卡车标签定义。如果使用此语法来收集类型的标签矩形从这个对象,然后gatherLabelData函数返回错误。

labelData = gatherLabelData(gTruth,“video_front_camera”, labelType.Rectangle);

要从中收集标签数据的信号的名称,指定为字符向量、字符串标量、字符向量的单元格数组或字符串向量。信号名称必须是存储在输入多信号地真值数据中的有效信号名称,gTruth

获取信号名称groundTruthMultisignal对象,使用此语法,其中gTruth对象的变量名:

gTruth.DataSource.SignalName

例子:“video_01_city_c2s_fcw_10s”

例子:“video_01_city_c2s_fcw_10s”

例子:{“video_01_city_c2s_fcw_10s”、“lidarSequence”}

例子:[" video_01_city_c2s_fcw_10s”“lidarSequence”)

要从中收集标签数据的标签类型,指定为labelType枚举标量,labelType的单元格数组labelType枚举标量和向量。的gatherLabelData函数为输入指定的每个信号收集标签数据signalNames和每个groundTruthMultisignal由input指定的。gTruth.元素的数量labelTypes必须匹配信号的数量signalNames

为每个信号收集单标签类型的标签数据

若要为每个信号的单个标签类型收集标签数据,请指定labelTypes作为一个labelType枚举标量或向量。在所有groundTruthMultisignal对象gTruth,gatherLabelData函数集labelTypes (n)标签数据来自signalName (n),在那里n标签类型的索引,以及要收集其标签数据的对应信号名。输出中的每个返回表labelData每个信号只包含一种标签类型的单元格数组。

在此代码示例中,gatherLabelData函数收集类型的标签矩形从一个视频信号命名video_front_camera.该函数还收集类型标签长方体来自激光雷达的点云序列信号存储在一个名为lidarData.的gTruth输入包含groundTruthMultisignal要从中收集数据的对象。

labelData = gatherLabelData(gTruth,...“video_front_camera”“lidarData”),...[labelType.Rectangle, labelType.Cuboid];

若要从单独的信号中收集单个标签类型的标签数据,必须为每个信号重复标签类型。在此代码示例中,gatherLabelData函数收集类型的标签矩形video_left_camera而且video_right_camera视频信号。

labelData = gatherLabelData(gTruth,...“video_left_camera”“video_right_camera”),...[labelType.Rectangle, labelType.Rectangle];

为每个信号收集多个标签类型的标签数据

若要为每个信号收集多个标签类型的标签数据,请指定labelTypes的单元格数组labelType枚举标量和向量。在所有groundTruthMultisignal对象gTruth,gatherLabelData函数集labelTypes {n}标签数据来自signalName (n),在那里n要收集标签数据的标签类型和对应的信号名的索引。该函数将这些标签类型的数据分组到每个信号的一个表中groundTruthMultisignal对象。

在此代码示例中,gatherLabelData函数收集类型的标签矩形而且video_front_camera视频信号。该函数还收集类型标签长方体来自激光雷达的点云序列信号存储在一个名为lidarData.的gTruth输入包含groundTruthMultisignal要从中收集数据的对象。

labelData = gatherLabelData(gTruth,...“video_front_camera”...“lidarData”),...{[labelType。矩形labelType。线),...labelType.Cuboid};

有效枚举类型

您可以指定这些枚举类型中的一个或多个。

  • labelType。矩形-矩形ROI标签

  • labelType。长方体-长方体ROI标签(点云)

  • labelType。ProjectedCuboid-投影的长方体ROI标签(图像和视频数据)

  • labelType。行-线ROI标签

  • labelType。PixelLabel-像素ROI标签

  • labelType。多边形-像素ROI标签

  • labelType。场景-场景标签

若要为场景收集标签数据,必须指定labelTypes随着labelType。场景枚举标量。不能指定任何其他标签类型labelType。场景

抽样因子用于对标签数据进行子抽样,指定为正整数。的抽样因子K包括每一个K第Th信号帧。增加采样因子以从高采样率的信号(如视频)中删除冗余帧。

例子:“SampleFactor”,5

输出参数

全部折叠

标签数据,返回为——- - - - - -N表的单元格数组,其中:

  • groundTruthMultisignal对象gTruth

  • labelTypes包含ROIlabelType枚举,N信号的数量是多少signalNames以及元素的个数labelTypes.在这种情况下,labelData {m, n}控件的标签数据的表n的信号signalNames这是在thgroundTruthMultisignal的对象gTruth.表中仅包含标签类型的标签数据n的位置labelTypes

  • labelTypes仅包含labelType。场景枚举,N等于1.在这种情况下,labelData {m}中所有信号的场景标签数据表thgroundTruthMultisignal的对象gTruth

对于给定的标签数据表,资源描述这张桌子大小合适T——- - - - - -l,地点:

  • T信号中存在标签数据的时间戳数。

  • l为该信号收集的标签类型的标签定义的数量。

  • 台(t、l)控件收集的标签数据l标签在t时间戳。

如果其中一个信号在某个时间戳上没有标签数据,则对应的标签数据表不包含该时间戳的行。

对于表中的每个单元格,返回的标签数据的格式取决于标签的类型。

标签类型 每个时间戳标签的存储格式
labelType。矩形

-by-4数值矩阵的形式[x, y, w, h],地点:

  • 是帧中标签的数量。

  • x而且y指定矩形的左上角。

  • w指定矩形的宽度,即矩形沿x设在。

  • h指定矩形的高度,即矩形沿y设在。

labelType。长方体

-by-9数字矩阵的行形式[xctr, yctr, zctr, xlen, ylen, zlen, xrot, yrot, zrot],地点:

  • 是帧中标签的数量。

  • xctryctr,zctr指定长方体的中心。

  • xlenylen,zlen指定长方体沿的长度x设在,y设在,z-轴,在应用旋转之前。

  • xrotyrot,zrot指定长方体沿的旋转角度x设在,y设在,z分别设在。当观察它们对应轴的正向时,这些角是顺时针正的。

图中显示了这些值如何决定长方体的位置。

有中心点、长度和旋转角度标记的长方体

labelType。ProjectedCuboid

这个形式的- × 8向量[x1, y1, w1, h1, x2, y2, w2, h2],地点:

  • 是帧中标签的数量。

  • (x1, y1)指定了xy投影长方体正面左上角位置的坐标

  • w1指定投影长方体正面的宽度。

  • h1指定投影长方体正面的高度。

  • x2, y2指定了xy投影长方体背面的左上角位置的坐标。

  • w2指定投影长方体背面的宽度。

  • h2指定投影长方体背面的高度。

图中显示了这些值如何决定长方体的位置。

标记投影长方体

labelType。行

单元格数组的-by-1向量,其中是帧中标签的数量。每个单元格数组包含一个N-by-2数值矩阵的形式[(x1, y1;x2 y2;...;xN yN)N折线上的点。

labelType。PixelLabel

所有像素标签定义的标签数据存储在单个标签中1PixelLabelData图像或框架。每个元素都包含像素标签图像的文件名。像素标签图像描述了对应图像中包含的标签。标签可以描述为1通道或3通道标签矩阵。使用PixelLabelData对于任何标签应用程序,都必须使用单通道标签矩阵,其中的值为类型uint8.您可以通过编程方式将3通道像素标签数据矩阵转换为单通道标签矩阵,以便与标签器应用程序一起使用。

labelType。多边形

单元格数组的-by-1向量,其中是标签的数量。每个单元格数组包含一个N-by-2数值矩阵的形式[(x1, y1;x2 y2;...;xN yN)N多边形上的点。

labelType。场景 逻辑1真正的)如果应用了场景标签,否则符合逻辑0

标签数据格式

方法收集标签数据的单元格数组gatherLabelData函数。该函数从三个方面收集标签groundTruthMultisignal具有变量名的对象gTruth1gTruth2,gTruth3

  • 为视频信号命名video_front_camera,函数收集类型的标签矩形而且

  • 用于激光雷达点云序列信号存储在一个名为lidarData,函数收集类型的标签长方体

方法的调用gatherLabelData函数。

labelData = gatherLabelData([gTruth1 gTruth2 gTruth3],...“video_front_camera”...“lidarData”),...{[labelType。矩形labelType。线),...labelType.Cuboid};
labelData输出是一个3 × 2的表格单元格数组。单元格数组的每行包含其中一个的标签数据groundTruthMultisignal对象。第一列包含视频信号的标签数据,video_front_camera.第二列包含点云序列信号的标签数据,lidarData.这张图显示了labelData单元阵列。

labelData单元格数组

该图显示了第三个视频信号的标签数据表groundTruthMultisignal对象。的gatherLabelData函数收集数据矩形标签命名和一个标签命名车道.该表包含信号中四个时间戳的标签数据。

labelData单元阵列中视频信号的标签数据表

该图显示了第三个激光雷达信号的标签数据表groundTruthMultisignal对象。的gatherLabelData函数收集数据长方体标签,也叫.的标签出现在两种信号类型中,因为它被标记为矩形视频信号标签和一个长方体激光雷达信号标签。该表包含信号中四个时间戳的标签数据。

labelData单元阵列中点云信号的标签数据表

信号时间戳,返回为——- - - - - -N单元格阵列持续时间向量,地点:

  • groundTruthMultisignal对象gTruth

  • N信号的数量是多少signalNames

  • labelData {m, n}控件的时间戳n的信号signalNames这是在thgroundTruthMultisignal的对象gTruth

如果从多个信号中收集标签数据,则信号时间戳将与指定的第一个信号的时间戳同步signalNames

限制

  • gatherLabelData函数不为子标签或属性收集标签数据。如果标签包含子标签或属性,则在labelData输出时,函数只返回父标签的位置。

版本历史

R2020a中引入