Main Content

Extract Ground Points and Non-Ground Points from Lidar Data

Read lidar data from a PCAP file by using the velodyneFileReader function.

veloReader = velodyneFileReader("lidarData_ConstructionRoad.pcap","HDL32E");

Specify a time interval to extract a set of lidar data frames from the input lidar data.

veloReader.CurrentTime = veloReader.StartTime + seconds(0.5);
StopTime = veloReader.StartTime + seconds(10);

Configure the figure window to display the input lidar data frames and the extracted ground points by using the pcplayer function.

fig = figure(Position=[0 0 800 600]);

xlimits = [-30 30];
ylimits = [-30 30];
zlimits = [-10 20];
hPanel = uipanel(fig,Position=[0 0.5 1 0.5]);
hPlot = axes(hPanel);
player = pcplayer(xlimits,ylimits,zlimits,Parent=hPlot);

hPanel_groundData = uipanel(fig,Position=[0 0 0.5 0.5]);
hPlot_groundData = axes(hPanel_groundData);
player_groundData = pcplayer(xlimits,ylimits,zlimits,Parent=hPlot_groundData);

hPanel_nongroundData = uipanel(fig,Position=[0.5 0 0.5 0.5]);
hPlot_nongroundData = axes(hPanel_nongroundData);
player_nongroundData = pcplayer(xlimits,ylimits,zlimits,Parent=hPlot_nongroundData);

Read the lidar data frames and extract the ground points in the lidar data by using the segmentGroundFromLidarData function. Then, use the indices of the extracted ground points to segment the non-ground points from the frame.

while (hasFrame(veloReader) && veloReader.CurrentTime < StopTime)
    % Read a lidar data frame
    ptCloud = readFrame(veloReader);

    % Extract ground points from lidar data frame
    groundPtsIdx = segmentGroundFromLidarData(ptCloud);
    ptCloudGround = select(ptCloud,groundPtsIdx,OutputSize="full");

    % Extract non-ground points from lidar data frame
    ptCloudNonGround = select(ptCloud,~groundPtsIdx,OutputSize="full");
    
    % Display the input lidar data and the extracted points 
    view(player,ptCloud)
    title(hPlot,"Input Lidar Data")
    view(player_groundData,ptCloudGround)
    title(hPlot_groundData,"Extracted Ground Points")
    view(player_nongroundData,ptCloudNonGround)
    title(hPlot_nongroundData,"Extracted Non-Ground Points")
    colormap(autumn)
    pause(0.01);
end

Figure contains 3 axes objects and other objects of type uipanel. Axes object 1 with title Input Lidar Data, xlabel X, ylabel Y contains an object of type scatter. Axes object 2 with title Extracted Ground Points, xlabel X, ylabel Y contains an object of type scatter. Axes object 3 with title Extracted Non-Ground Points, xlabel X, ylabel Y contains an object of type scatter.

See Also

| |