PointCloud Upsamplingについて


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