點雲處理有時由於數據量太大,咱們須要對其進行下采樣。測試
這裏的方法是先將點雲填入固定大小的三維網格中,而後每一個網格中選一個點生成新的點雲。spa
新點雲即爲下采樣後的點雲。code
這裏使用斯坦福兔子做爲測試點雲。blog
小兔子pcd下載地址。get
原始點雲:it
採樣後點雲:io
matlab代碼以下:class
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(2) - xlimit(1))/cellsize)+1; H = floor((ylimit(2) - ylimit(1))/cellsize)+1; D = floor((zlimit(2) - zlimit(1))/cellsize)+1; %向網格里填數 voxel = cell(W,H,D); for i =1:length(pc_point) I = floor((pc_point(i,1)-xlimit(1))/cellsize)+1; J = floor((pc_point(i,2)-ylimit(1))/cellsize)+1; K = floor((pc_point(i,3)-zlimit(1))/cellsize)+1; voxel{I,J,K} = [voxel{I,J,K};pc_point(i,:)]; end %以網格中第一個點對原點雲進行下采樣 pointre =[]; for i=1:W for j=1:H for k=1:D if isempty(voxel{i,j,k})==0 pointre=[pointre;voxel{i,j,k}(1,:)]; end end end end pcre = pointCloud(pointre); figure; pcshow(pcre);