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 object. The axes object 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 object. The axes object 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 object. The axes object 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 матрица.

Аргументы name-value

Пример: '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