**
点云数据降采样 pcdownsample()
**
pcdownsample降采样减少点云数据量:
一、语法:
ptCloudOut = pcdownsample(ptCloudIn, 'random', percentage)
ptCloudOut = pcdownsample(ptCloudIn, 'gridAverage', gridStep)
ptCloudOut = pcdownsample(ptCloudIn, 'nonuniformGridSample', maxNumPoints)
二、描述:
ptCloudOut = pcdownsample(ptCloudIn,'random',percentage)
//random 随机下采样方式;percentage 百分比
//返回一个带有随机采样且没有替换的下采样点云。百分比输入指定返回到输出的输入部分。
ptCloudOut = pcdownsample(ptCloudIn,'gridAverage',gridStep)
//gridAverage平均网格;gridStep网格步长
//使用box grid过滤器返回下采样点云。gridStep输入指定3d框的大小。
ptCloudOut = pcdownsample(ptCloudIn,'nonuniformGridSample',maxNumPoints)
//nonuniformGridSample非均匀网格取样;maxNumPoints最大点数
//使用非均匀盒网格过滤器返回下采样点云。您必须将网格框中的最大点数maxNumPoints设 置为至少6。
三、例子:
一、下采样点云使用网格过滤:
//读取一份点云:
ptCloud = pcread('teapot.ply');
//设置3-D分辨率为(0.1 x 0.1 x 0.1):
gridStep = 0.1;
ptCloudA = pcdownsample(ptCloud,'gridAverage',gridStep);
//可视化下采样数据:
figure;
pcshow(ptCloudA);
//将点云与使用固定步长下采样的数据进行比较:
stepSize = floor(ptCloud.Count/ptCloudA.Count);
indices = 1 : stepSize : ptCloud.Count;
ptCloudB = select(ptCloud, indices);
figure;
pcshow(ptCloudB);
二、从点云中删除冗余点:
//创建一个点云,所有点共享相同的坐标:
ptCloud = pointCloud(ones(100,3));
//将3-D分辨率设置为一个小值:
gridStep = 0.01;
//输出现在只包含一个惟一点:
ptCloudOut = pcdownsample(ptCloud,'gridAverage',gridStep)
- 三、输入参数
1、随机采样方法(random):
指定为字符串“Random”。这种方法比“gridAverage”下采样方法更有效,尤其是在点云注册之前。
百分比 – 投入的百分比(percentage(积极的标量)):
输入的百分比,在[0,1]范围内指定为正标量。百分比输入指定函数返回的输入部分。
2、平均网格下采样方法(gridAverage):
指定为字符串“gridAverage”。同一个框中的点被合并到输出中的一个点。它们的颜色和正常属性也相应平均。该方法保留了点云的形状。
该函数为整个点云计算轴向对齐的边界框。边界框被划分为由gridStep指定大小的网格框。每个网格框中的点通过对它们的位置、颜色和法线进行平均合并。
网格步长-网格过滤器的三维框的大小(gridStep(数值)):
用于网格过滤器的三维框的大小,指定为数值。当没有足够的资源构建大型细粒度网格时,增加gridStep的大小。
3、非均匀网格抽样法(nonuniformGridSample):
非均匀网格抽样方法,指定为字符串“非均匀网格抽样”。该方法的最佳用途是,在使用“pointToPlane”度量时,将其作为点云注册的pcregrigid函数的预处理步骤。当您使用“非均变网格采样”算法时,法线是在向下采样之前对原始数据进行计算的。下采样输出保持了更准确的法线。
网格框中的最大点数(maxNumPoints)(整数):
网格框中的最大点数,指定为大于6的整数。该方法从每个框中随机选择一个点。如果输入点云中没有提供normal,则此方法将自动填充ptCloudOut输出中的normal属性。
- 四、输出参数
ptCloudOut -过滤点云
pointCloud对象