点云处理有时因为数据量太大,我们需要对其进行下采样。
这里的方法是先将点云填入固定大小的三维网格中,然后每个网格中选一个点生成新的点云。
新点云即为下采样后的点云。
这里使用斯坦福兔子作为测试点云。
小兔子pcd下载地址。
原始点云:
采样后点云:
matlab代码如下:
clear all;
close all;
clc; pc = pcread('rabbit.pcd');
pcshow(pc); pc_point = pc.Location;
xlimit = pc.XLimits;
ylimit = pc.YLimits;
zlimit = pc.ZLimits; cellsize = 0.005; %定义网格大小
%设置网格数量
W = floor((xlimit() - xlimit())/cellsize)+;
H = floor((ylimit() - ylimit())/cellsize)+;
D = floor((zlimit() - zlimit())/cellsize)+; %向网格里填数
voxel = cell(W,H,D);
for i =:length(pc_point)
I = floor((pc_point(i,)-xlimit())/cellsize)+;
J = floor((pc_point(i,)-ylimit())/cellsize)+;
K = floor((pc_point(i,)-zlimit())/cellsize)+;
voxel{I,J,K} = [voxel{I,J,K};pc_point(i,:)];
end %以网格中第一个点对原点云进行下采样
pointre =[];
for i=:W
for j=:H
for k=:D
if isempty(voxel{i,j,k})==
pointre=[pointre;voxel{i,j,k}(,:)];
end
end
end
end
pcre = pointCloud(pointre); figure;
pcshow(pcre);