PCL(Point Cloud Library)における、VoxelGridとApproximateVoxelGridの違いをまとめました。
【PCL】VoxelGridとApproximateVoxelGridの違い
点群を扱う際に、計算コストを減らすために、点の数を減らすダウンサンプリングをよく適用します。具体的には、空間をボクセルグリッドで区切り、各グリッド内の点群を近似することで、点の数を減らすのが一般的です。この機能に関して、PCLには、VoxelGridとApproximateVoxelGridという2つの似たクラスが用意されています。この2つは、名前も挙動も似ていて、違いがわかりづらいです。
これを踏まえ、この記事では、PCLにおけるVoxelGridとApproximateVoxelGridの違いをまとめていきます。
違いはズバリ...
- VoxelGrid
- グリッド内の点群をその重心で近似する
- 点の数が大幅に減る
- ApproximateVoxelGrid
- グリッド内の点群を”凝縮する”
- 点の数はほぼ減らない
VoxelGridの実装例
#include <pcl/filters/voxel_grid.h> /* ~(略)~ */ void Downsampling(pcl::PointCloud<pcl::PointXYZ>::Ptr pc_in, pcl::PointCloud<pcl::PointXYZ>::Ptr pc_out, double leafsize) { pcl::VoxelGrid<pcl::PointXYZ> vg; vg.setInputCloud(pc_in); vg.setLeafSize(leafsize, leafsize, leafsize); vg.filter(*pc_out); } /* ~(略)~ */
ApproximateVoxelGridの実装例
#include <pcl/filters/approximate_voxel_grid.h> /* ~(略)~ */ void ApproximateDownsampling(pcl::PointCloud<pcl::PointXYZ>::Ptr pc_in, pcl::PointCloud<pcl::PointXYZ>::Ptr pc_out, double leafsize) { pcl::ApproximateVoxelGrid<pcl::PointXYZ> avg; avg.setInputCloud(pc_in); avg.setLeafSize(leafsize, leafsize, leafsize); avg.filter(*pc_out); } /* ~(略)~ */
まとめ
点の数を減らしたい場合は、基本的に、VoxelGridを使えば問題ありません。ApproximateVoxelGridの用途は、正直よく分かりません。
ダウンサンプリングの関連記事
さいごに
PCLにおけるVoxelGridとApproximateVoxelGridの違いをまとました。参考になれば幸いです。
以上です。
Ad.
コメント