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.

Загрузите Velodyne 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 облаков точек в файле Velodyne 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++ с помощью Coder™ MATLAB ®

..
Введенный в R2018b