2014年10月18日

点群やボリュームデータのポリゴン化について

球面調和関数などをモンテカルロ的な手法で計算した場合、基本点群ですので、可視化する場合点群をポリゴン化したいと思うと思います。以前は普通のマーチングキューブス法を使っていたのですが、その辺りの点群やボリュームデータからのポリゴン生成について調べていたら、Smooth Signed Distance[1]というソフトウェアがありました。昔試した気がする符号付き距離(Signed Distance)を使って等値面をポリゴン化するのだと思います。手法としてはDual Marching Cubes法などを使っているみたいです。おそらく。

[1]にも書いてありますが、CMakeを使えばVisual Studioでも簡単にコンパイルできました。サンプルの点群がPlyファイルで用意されており、コマンドラインで変換してMeshLabで表示したところ、少ない点群でもある程度の再構築ができているようでした。
というわけで、偏りのない球面上の点40000点をPlyファイルとして出力して、それを再構築してみました。点と法線ベクトルもいるみたいですので、球面調和関数の場合、法線ベクトルって簡単に計算できるのでしょうかね。中心からその点へのベクトルでも別にいいのかもしれませんが。

実行結果
ssd_recon.exe 変換前.ply 変換後.ply

変換前の点群
PolyVox_002.png

変換後のポリゴン
PolyVox_003.png PolyVox_004.png

Plyのヘッダ部分は下記のようになって、後は頂点座標と法線ベクトルを出力するだけですので、簡単に変換前のPlyを作成することができます。
  ply
format ascii 1.0
element vertex 40000
property float x
property float y
property float z
property float nx
property float ny
property float nz
end_header
0.127388 0.991853 0.000542 0.127388 0.991853 0.000542
...
今回表面の点だけでしたが、中身が詰まっている場合などはどうなるんでしょうかね。基本Kinect等で取得した表面点群だけなのでしょうか。

その他気になったライブラリとして、PolyVox[2]というzlibライセンスのものがあったので少し試してみることにします。

1. ダウンロードとビルド
[3]のダウンロードからリポジトリをダウンロードできます。ソースをチェックアウトしてもいいかと思います。次に、CMakeを使ってビルドします。便利ですねCMake GUI。

2. 使用するための準備
libraryというフォルダ内に、PolyVoxCoreとPolyVoxUtilというフォルダがあり、そこにヘッダファイルなどが入っているようです。ビルドしたらPolyVoxCore.libとPolyVoxUtil.libが生成されていると思います。おそらくCMakeの設定等でDLL出力もできるのではないかと思いますが、未確認です。
追加のインクルードディレクトリを指定して、PolyVoxCore.libとPolyVoxUtil.libをリンカに追加すれば準備完了です。

3. 球のテスト
ドキュメントのユーザマニュアルのTutorial 1 - Basic useに解説があります。ライブラリのサンプルプログラムにも色々含まれていますので、基本的にはそれを参考にすれば良いかと思います。

中心からの距離に応じて0か255の値に設定し、表面ポリゴンを生成するようです。この際、ボクセルの最大値の半分の値(今回は255の半分で127)を閾値とした表面ができるようです。このサンプルではCubicSurfaceExtractorWithNormalsを使用していてキューブベースの表面となっていますが、MarchingCubesSurfaceExtractorを使うと、マーチングキューブス法で生成されたもう少し滑らかな表面ができるようです。

BasicDemoでは、Qtを使ってレンダリングしていますが、OpenGLのサンプルにはOpenGLだけを使ったサンプルもあったと思います。今回は自分のプログラムに組込んでみます。

実行結果

PolyVox_001.png

点群しかない場合、結局ボリュームデータをどう作るかという問題になってしまいますので、ポリゴン化だけしたいのであれば前者でコマンドラインでというのでいいのかもしれません。

[1] http://mesh.brown.edu/ssd/software.html
[2] http://www.volumesoffun.com/polyvox-about/
[3] https://bitbucket.org/volumesoffun/polyvox/
posted by シンドラー at 02:09 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/407308186
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック