PointCloudのUpsampling方法についてまとめました。
Upsampling
今回はmesh_samplingによりUpsamplingを行います。
Mesh Samplingは点群に対してPolygon Meshを施し、各Polygonの内部を補完する処理を行っています。
環境
- OS Ubuntu16.04
- PCL1.8
目標
今回はオリジナルのPCDデータに対してDownsamplingしたデータをUpsamplingでどの程度復元可能か確認することを目標とします。
PCDファイルはtable_scene_lms400.pcdを使用しました。
ダウンサンプリングにより、点群数は460400 pointsから41049 pointsに削減されました。
pcl_voxel_grid table_scene_lms400.pcd table_scene_lms400_downsample.pcd -leaf 0.01 0.01 0.01
Raw Data | Downsample |
---|---|
![]() |
![]() |
PolygonMeshを生成
Mesh Samplingを行うためにはplyファイルを作成する必要があります。
まず、Upsamplingを行いたいデータのPolygonMeshを生成します.
PolygonMeshについてはVM LABさんの記事を参考にしてみて下さい。
vtkファイルをplyファイルに変換
PolygonMeshはvtkファイルにて保存されるので、plyファイルに変換します。
vtkファイル名はmap.vtkとしています。
pcl_vtk2ply table_scene_lms400.vtk table_scene_lms400.ply
Mesh Samplingを実行
plyファイルを用いてMesh Samplingを行います。
pcl_mesh_sampling table_scene_lms400.ply table_scene_lms400_meshsample.pcd
Mesh Samplingのパラメータはサンプル数を指定する-n_samples、ダウンサンプルのサイズを指定する-leaf_sizeがあります。
必要に応じてパラメータ調整を行って下さい。
今回はダウンサンプルする前の点群数である460400 pointsにしました。
$ pcl_mesh_sampling -h
Convert a CAD model to a point cloud using uniform sampling. For more information, use: pcl_mesh_sampling -h
Syntax is: pcl_mesh_sampling input.{ply,obj} output.pcd <options>
where options are:
-n_samples X = number of samples (default: 100000)
-leaf_size X = the XYZ leaf size for the VoxelGrid -- for data reduction (default: 0.010000 m)
Result
Downsamplingにより間引きされた空間をUpsamplingにより補完することができました。
より良いUpsamplingをするためには、点密度やPolygonのサイズなどパラメータ調整、ノイズフィルタリングをする必要がありそうです。
Polygon Mesh | Mesh Sampling |
---|---|
![]() |
![]() |