转自本人博客:点云下采样有损压缩
点云下采样是通过一定规则对原点云数据进行再采样,减少点云个数,降低点云稀疏程度,减小点云数据大小。
1. 体素下采样(Voxel Down Sample)
std::shared_ptr<PointCloud> VoxelDownSample (double voxel_size) const;
voxel_size为体素(体积元素)的尺寸大小,体素的尺寸越大,下采样的倍数越大,点云也就越稀疏。
相当于每隔一定的距离采集一个点。
示例:
std::shared_ptr<open3d::geometry::PointCloud> pcd = nullptr;
open3d::io::ReadPointCloud("rabbit.pcd", *pcd);
double voxelSize = 0.05;
pcd = pcd->VoxelDownSample(voxelSize);
2. 均匀下采样(Uniform Down Sample)
std::shared_ptr<PointCloud> UniformDownSample (size_t every_k_points) const;
every_k_points为隔着的点数目,每隔every_k_points个点,保留一个点。
示例:
std::shared_ptr<open3d::geometry::PointCloud> pcd = nullptr;
open3d::io::ReadPointCloud("rabbit.pcd", *pcd);
size_t everyKPoints = 10;
pcd = pcd->UniformDownSample(everyKPoints);
3. 随机下采样(Random Down Sample)
std::shared_ptr<PointCloud> RandomDownSample (double sampling_ratio) const;
sampling_ratio为采样的比率,随机保留点,直至达成指定比率。
示例:
std::shared_ptr<open3d::geometry::PointCloud> pcd = nullptr;
open3d::io::ReadPointCloud("rabbit.pcd", *pcd);
double samplingRatio = 0.2;
pcd = pcd->RandomDownSample(samplingRatio);
4. 最远点下采样(FarthestPoint Down Sample)
std::shared_ptr<PointCloud> FarthestPointDownSample (size_t num_samples) const;
num_samples为采样的点数。
首先随机选择一个点,其次,在剩下点中寻找最远的点,再去再剩下点中找到同时离这两个点最远的点……,以此类推,直到满足采样点个数。
示例:
std::shared_ptr<open3d::geometry::PointCloud> pcd = nullptr;
open3d::io::ReadPointCloud("rabbit.pcd", *pcd);
size_t numSamples = 1000;
pcd = pcd->FarthestPointDownSample(numSamples);