exponenta event banner

segmentGroundFromLidarData

Точки основания сегмента из упорядоченных данных лидара

Описание

пример

groundPtsIdx = segmentGroundFromLidarData(ptCloud) сегменты, организованные 3-D данным лидара, ptCloud, на наземную и некруглую части. Лидарный датчик должен быть установлен горизонтально так, чтобы все точки заземления наблюдались при сканировании лидара ближе всего к датчику.

groundPtsIdx = segmentGroundFromLidarData(ptCloud,Name,Value) задает свойства, используя одну или несколько пар имя-значение. Заключите каждое имя свойства в кавычки. Например, segmentGroundFromLidarData(ptCloud,'ElevationAngleDelta',5)

Примеры

свернуть все

Сегментировать точки основания и точки, не являющиеся точками скругления, из организованного облака точек лидара. Создайте из этих сегментов организованные облака точек и отобразите их.

Загрузка организованного лидара, облака точек.

ld = load('drivingLidarPoints.mat');

Точки основания сегмента из организованного облака точек лидара.

groundPtsIdx = segmentGroundFromLidarData(ld.ptCloud);

Создайте организованное облако точек, содержащее только эти точки основания, с помощью select функция. Отображение этого облака точек.

groundPtCloud = select(ld.ptCloud,groundPtsIdx);
figure
pcshow(groundPtCloud)

Figure contains an axes. The axes contains an object of type scatter.

Создайте организованное облако точек, содержащее только точки, не являющиеся точками скругления. Укажите пороговое значение 0,5 метра.

nonGroundPtCloud = select(ld.ptCloud,~groundPtsIdx,'OutputSize','full');
distThreshold = 0.5;   
[labels,numClusters] = segmentLidarData(nonGroundPtCloud,distThreshold);  

Отображение облачных кластеров, не являющихся круглыми точками.

figure
colormap(hsv(numClusters))
pcshow(nonGroundPtCloud.Location,labels)
title('Point Cloud Clusters')

Figure contains an axes. The axes with title Point Cloud Clusters contains an object of type scatter.

Загрузите Velodine PCAP ® в рабочую область.

velodyneFileReaderObj = velodyneFileReader('lidarData_ConstructionRoad.pcap','HDL32E');

Создайте проигрыватель облака точек с помощью pcplayer. Определите границы осей X, Y и Z в метрах и промаркируйте их оси.

xlimits = [-40 40];
ylimits = [-15 15];
zlimits = [-3 3];
player = pcplayer(xlimits,ylimits,zlimits);

Маркируйте оси pcplayer.

xlabel(player.Axes,'X (m)')
ylabel(player.Axes,'Y (m)')
zlabel(player.Axes,'Z (m)')

Задайте карту цветов для точек маркировки. Триплеты RGB используются для задания зеленого цвета для точек нулевой плоскости и красного цвета для точек препятствий.

colors = [0 1 0; 1 0 0]; 
greenIdx = 1;
redIdx = 2;

Выполните итерацию через первые 200 точечных облаков в файле Velodine PCAP, используя readFrame для считывания данных. Сегментируйте точки заземления от каждого облака точек. Все точки заземления окрашиваются в зеленый цвет, а не в красный. Постройте график результирующего облака точек лидара.

colormap(player.Axes,colors)
title(player.Axes,'Segmented Ground Plane of Lidar Point Cloud');
     for i = 1 : 200
         % Read current frame.
         ptCloud = velodyneFileReaderObj.readFrame(i);
         
         % Create label array.
         colorLabels = zeros(size(ptCloud.Location,1),size(ptCloud.Location,2)); 
 
         % Find the ground points.
         groundPtsIdx = segmentGroundFromLidarData(ptCloud);
 
         % Map color ground points to green.
         colorLabels(groundPtsIdx (:)) = greenIdx;
         
         % Map color nonground points to red.
         colorLabels(~groundPtsIdx (:)) = redIdx;
 
         % Plot the results.
         view(player,ptCloud.Location,colorLabels)
    end

Figure Point Cloud Player contains an axes. The axes with title Segmented Ground Plane of Lidar Point Cloud contains an object of type scatter.

Входные аргументы

свернуть все

Облако точек, указанное как pointCloud объект. ptCloud - организованное облако точек, хранящее координаты [x, y, z] точек в матрице M-by-N-by-3.

Аргументы пары «имя-значение»

Пример: 'ElevationAngleDelta',5

Порог разности углов места для определения точек земли, определяемый как неотрицательный скаляр. Функция вычисляет разность углов возвышения между одной помеченной точкой земли и ее 4-соединенными соседями. Точка окрестности помечается как земля, если разница ниже порогового значения. Типовые значения для ElevationAngleDelta находятся в диапазоне [5,15] градусов. Увеличьте это значение, чтобы охватить больше точек из неровных поверхностей грунта.

Начальный порог угла возвышения для идентификации точки земли в линии сканирования, ближайшей к лидарному датчику, определяемый как неотрицательный скаляр. Функция помечает точку как землю, когда угол возвышения опускается ниже этого значения. Типовые значения для InitialElevationAngle находятся в диапазоне от 15 до 30 градусов.

Выходные аргументы

свернуть все

Индекс точек основания, возвращаемый в виде логической матрицы M-by-N. Элементы с true значение, 1, указать точки заземления. Элементы с false значение, 0, укажите некруглые точки.

Ссылки

[1] Богославский, И. «Эффективная сегментация в режиме онлайн для разреженных 3D лазерных сканирований». Журнал фотограмметрии, дистанционного зондирования и геоинформационных наук. Том 85, номер 1, 2017, стр. 41-52.

Расширенные возможности

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

..
Представлен в R2018b