文章目錄
-
- 1 下采樣函數 pcdownsample
- 2 代碼實作
-
- 2.1 随機下采樣(random)
- 2.2 均勻體素下采樣(gridAverage)
- 2.3 非均勻體素下采樣(nonuniformGridSample)
- 2.4 如何選擇下采樣方式
1 下采樣函數 pcdownsample
點雲下采樣,也稱點雲降采樣,目的是為了減少資料量,提高點雲處理效率。
MATLAB 提供了點雲下采樣函數 pcdownsample,有三種重載方式
随機下采樣,且不替換原始點。百分比為下采樣的比例,取值範圍 [ 0,1 ]
體素栅格下采樣,将體素中心代替體素内的所有點。gridStep 為體素栅格的步長大小
使用非均勻長方體栅格過濾器下采樣點雲。必須将體素内最大點數maxNumPoints 不能低于 6
下面将依次進行說明。
2 代碼實作
2.1 随機下采樣(random)
随機下采樣方法,指定為
random
。
random
方法比
gridAverage
下采樣方法更有效,尤其是在點雲配準之前應用時。
代碼:
clc;
clear;
% 加載點雲
ptCloud_in = pcread('bunny.pcd');
% 下采樣
percentage = 0.2;
ptCloud_random= pcdownsample(ptCloud_in,'random',percentage);
% 可視化
figure;
pcshow(ptCloud_in);
title('原始點雲');
xlabel('X(m)');
ylabel('Y(m)');
zlabel('Z(m)');
hold on;
figure;
pcshow(ptCloud_random);
title('下采樣點雲');
xlabel('X(m)');
ylabel('Y(m)');
zlabel('Z(m)');
hold on;
% 儲存下采樣點雲
pcwrite(ptCloud_random,'ptCloud_random.pcd','Encoding','binary'); %儲存為binary形式的PCD點雲
結果展示:
2.2 均勻體素下采樣(gridAverage)
G均勻體素下采樣,指定為
gridAverage
。将體素重心代替體素内的點。它們的顔色和法向量性質是相應的平均值。這種方法比
random
下采樣方法更好地保留了點雲的形狀。
代碼:
clc;
clear;
% 加載點雲
ptCloud_in = pcread('bunny.pcd');
% 下采樣
gridStep = 0.003;
ptCloud_grid = pcdownsample(ptCloud_in,'gridAverage',gridStep);
% 可視化
figure;
pcshow(ptCloud_in);
title('原始點雲');
xlabel('X(m)');
ylabel('Y(m)');
zlabel('Z(m)');
hold on;
figure;
pcshow(ptCloud_grid);
title('下采樣點雲');
xlabel('X(m)');
ylabel('Y(m)');
zlabel('Z(m)');
hold on;
% 儲存下采樣點雲
pcwrite(ptCloud_grid,'ptCloud_grid.pcd','Encoding','binary'); %儲存為binary形式的PCD點雲
結果展示:
2.3 非均勻體素下采樣(nonuniformGridSample)
非均勻體素下采樣,指定為
nonuniformGridSample
,随機保留體素内的一點,而不是用體素重心代替。 且法線将在降采樣之前在原始資料上計算,能夠保留更精确的法線。
使用“pointToPlane”度量時,此方法的最佳用途是将其作為預處理步驟應用于點雲注冊的pcregistericp函數。
代碼:
clc;
clear;
% 加載點雲
ptCloud_in = pcread('bunny.pcd');
% 下采樣
maxNumPoints = 8;
ptCloud_nonuniformgrid = pcdownsample(ptCloud_in,'nonuniformGridSample',maxNumPoints);
% 可視化
figure;
pcshow(ptCloud_in);
title('原始點雲');
xlabel('X(m)');
ylabel('Y(m)');
zlabel('Z(m)');
hold on;
figure;
pcshow(ptCloud_nonuniformgrid);
title('下采樣點雲');
xlabel('X(m)');
ylabel('Y(m)');
zlabel('Z(m)');
hold on;
% 儲存下采樣點雲
pcwrite(ptCloud_nonuniformgrid,'bunny_nonuniformgrid.pcd','Encoding','binary'); %儲存為binary形式的PCD點雲
結果展示:
2.4 如何選擇下采樣方式
可根據下表進行選擇
度量标準 | 動态點雲下采樣法 | 靜态點雲下采樣法 |
---|---|---|
pointToPoint | random、gridAverage | random、gridAverage |
pointToPlane | random、gridAverage | gridAverage、nonuniformGridSample |
相關連結
https://ww2.mathworks.cn/help/vision/ref/pcdownsample.html