本日はOpen3Dを用いて、3Dのポリゴンを入力に、3Dの点群に変換してみます。
現在Open3Dには、ポリゴンを点群に変換する方法が2種類実装されていますので、その双方を試して比較も行ってみます。
Open3Dの環境構築に関しては、以前に環境構築の方法を紹介しましたので、以下の記事を参照してください。
目次
PLYファイルの入手
PLYファイルは3D点群データや3Dメッシュを保存するための汎用フォーマットで、広く用いられています。
PLYファイルで保存された3Dメッシュはさまざまなサイトで公開されていますが、今回は以下のサイトで公開されているスタンフォードバニーのPLYファイルを読み込み、実験を行いました。
外部サイト:3D Models
3D点群ダウンサンプリングプログラム
環境
- OS:Windows 10
- Python 3.6.10
- Open3D ver. 0.15.1
ソースコード
コードの解説
ポリゴンから点群への変換(sample_points_uniformly)
ポリゴンから点群への変換を行っています。こちらの方法は、サーフェス上に点を均一にサンプリングする方法のようです。
引数として目標点数を与えることができ、その点数の点群が出力されます。
ポリゴンから点群への変換(sample_points_poisson_disk)
Open3Dにはもう一つポリゴンから点群への方法「ポアソンディスクサンプリング」が実装されていて、該当するコードが上記の箇所になります。
こちらの方法は、サーフェス上の点をより均等に分散できる方法となっています。
実行結果
以下に入力したポリゴンと、各サンプリング結果を示します。いずれの手法も点数を10000点で固定しましたが、「sample_points_poisson_disk」の方がサーフェスに対して綺麗に点が分散しているように見えます。
入力ポリゴン
変換後の点群(sample_points_uniformly)
変換後の点群(sample_points_poisson_disk)
まとめ
本日はOpen3Dを用いて、2種類の方法でポリゴンを点群に変換してみました。
このようにOpen3Dを使うことで、ポリゴンと点群間の変換を容易に実施することができます。点群からポリゴンを生成する方法についても、以下の記事で紹介していますので、もし興味があればご覧ください。