Edited at

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

raw.png
downsample.png


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

polygonmesh.png
upsample.png