PCLから書き出したPointCloudデータ(PCD)をMeshLabを使ってメッシュ化し面データとして編集する方法を紹介します。
少し強引な方法ですが参考までに。
■MeshLabとは
以前紹介いたしました
「MeshLab概要」記事で簡単に説明しましたがMeshLabはWindows、Macで使用できるフリーのソフトウェアです。
■PointCloudデータ(PCD)をMeshLabで読み込むには
PCDデータはMeshLabでは通常読み込むことができません。
①少し強引な方法ですがPCDデータをテキストエディタで開きラベル部分のテキストを削除します。
②PCDデータの拡張子を「.pcd」→「.asc」に変更します。
③MeshLabでASCII形式で読み込めます。
PCDデータがASCIIではなくバイナリ形式ですとこの方法は使えません。
PCLでPCDを書き出す際にSTLに書き出せばMeshLabに読み込むことができます。
■読み込んだPointCloudをMeshLabでメッシュ化
<1>ASCIIデータ読み込み
まず上記で変更したASCIIデータを読み込みます。
File/Import Mesh/から読み込み。(Pre-Open OptionはGrid triangulationのチェックを外す)
<2>点群を計算
必ず必要というわけではなさそうですが場合によっては後の処理がうまくいかない場合があるので一応処理しておきます。
Filters/Pointset/Compute nomals for point seets/
設定値はNeighbour numを3に変更してApplyを押します。
<3>サンプリング
これも必ず必要というわけではなさそうですが念のため処理しておきます。
サンプリングして点群数を間引くことができます(ダウンサンプリング)
Filters/Sampling/clustered vertex subsampling/
設定値はCell Sizeを1.000→0.500に変更してApplyを押します。
<4>メッシュを貼ります
点群からメッシュを貼ります。
Filters/Remeshing simpleification and Reconstruction/Surface Reconstruction : Ball Pivoting/
設定値そのままでApplyを押すと計算が始まりしばらく待つとメッシュ化されます。
ただ表示が点表示のままですと変化がありませんので表示をFlast等に変更すると面が貼れていることを確認できます。
<5>スムージングを行います
メッシュ化を行うとよほど綺麗な点群でない限りガタガタになっていると思います。スムージングを行い面を慣らします。
Filters/Smooth ,Fairing and Deformation/Laplacian Smooth/
設定値Smoothing steps の数値が大きいほどなめらかになります。
ここで注意が必要ですがスムージングをかけるということは面がなだらかになっていき本来の形状から離れていくことになります。
<6>その他の機能
MeshLabではそのほかにも点を間引いたり面の編集を行ったりすることができるようです。まずはPCDの点群データをメッシュ(面)データに変換することが目的でしたのでその他の機能については割愛します。
■まとめ
実際に低価格のDepthセンサーから取得した点群データを面データに変換してみて感じたことですがそのまま変換すると面の欠け、穴などが激しく3DCGソフト等で後加工していくのは厳しいように思います。加工が難しいと思われる要因としては以下の通りです。
・面と面がつながっておらず1面づつ修正していく必要がある。
・穴あき部分も他の面が連結されていないため埋めていく作業量が大きい。
・面の法線方向がバラバラなため部分ごとに裏返しの面になっており修正する必要がある。
・ある程度形状が判別できるようにするため面分割が細かくなることで編集負荷も膨大になる。
以上のようにそのままでの加工は難しいです。
どのようにすれば良いのか?
ではどのようにすれば良いかですが基本的にDepthセンサーで取得した情報をなるべくプログラム側で加工を行い
後処理を少なくした方が良いように思います。
ソフトウェアでの編集加工は力技なのに比べプログラム側ではいろいろと処理ができそうだからです。
どのようにしていくのが最善かは現段階では不明ですが現在研究を行っていますので判明次第レポートしたいと思います。
以上、MeshLabによるPCD点群データのメッシュ化でした。
有限会社マグネットインダストリー
西内伸太郎