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)

Создайте организованное облако точек, содержащее только неназемные точки. Задайте порог 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')

Загрузите 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

Входные параметры

свернуть все

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

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

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

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

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

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

свернуть все

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

Ссылки

[1] Bogoslavskyi, я. “Эффективная Онлайновая Сегментация для Разреженных 3D Лазерных Сканов”. Журнал Фотограмметрии, Дистанционного зондирования и Геоинформатики. Издание 85, Номер 1, 2017, стр 41–52.

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2018b