MATLAB点云处理:点云下采样(random | gridAverage | nonuniformGridSample)
Posted 没事就要敲代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB点云处理:点云下采样(random | gridAverage | nonuniformGridSample)相关的知识,希望对你有一定的参考价值。
文章目录
1 下采样函数 pcdownsample
点云下采样,也称点云降采样,目的是为了减少数据量,提高点云处理效率。
MATLAB 提供了点云下采样函数 pcdownsample,有三种重载方式
ptCloudOut = pcdownsample(ptCloudIn,'random',percentage)
随机下采样,且不替换原始点。百分比为下采样的比例,取值范围 [ 0,1 ]
ptCloudOut = pcdownsample(ptCloudIn,'gridAverage',gridStep)
体素栅格下采样,将体素中心代替体素内的所有点。gridStep 为体素栅格的步长大小
ptCloudOut = pcdownsample(ptCloudIn,'nonuniformGridSample',maxNumPoints)
使用非均匀长方体栅格过滤器下采样点云。必须将体素内最大点数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 |
3 参考链接
以上是关于MATLAB点云处理:点云下采样(random | gridAverage | nonuniformGridSample)的主要内容,如果未能解决你的问题,请参考以下文章
点云处理技术之PCL随机采样一致算法(Random sample consensus,RANSAC)