写真から3Dモデルを作製する (6): ノイジーなデータからのメッシュ作成

ノイズの多いポイントクラウドからメッシュを作成してみる。VisualSFMで実際に作成した顔データ、MeshLabにインポートするとこんな感じになる。頂点数は約87000、前回に比べれば規模が小さく、それゆえにノイズの影響を受けやすいモデルと言えるだろう。


で、このままメッシュを作成するとどうなるか見てみる。Poisson Surface Reconstructionで、パラメータを順に[8, 6, 1, 1]としてみた。


どうだろう、鼻が欠けているのが分かるだろうか。若干アオリで撮影したため、鼻の稜線にデータが少なかったのだろう。この後、Blenderなどのモデリングソフトで修正することも出来るが、手間は少ない方が良い。

鼻は置いておいて、他のディテールはこんなもんで良いだろう。小皺まで再現できるような写真では無かった。恐らくだが、小皺まで再現するには、フラットな照明を組み、複数台のカメラをグルッと配置してシンクロシャッター、みたいな環境が必要だと思う。

ディテールが犠牲になるのを覚悟で、元のポイントクラウドを間引いてみよう。これがPoisson-disk Samplingのダイアログだ。MeshLabのメニューから、[Filters] > [Sampling] > [Poisson-disk Sampling]と辿ると出てくる。


Poisson-diskつうのは、ザックリ言えば、ランダムに分布していて、点と点の距離が一定距離以上である、つうことだ。上の例で言えば、鼻の部分はそのままに、他のディテールを潰してしまおう、ということだ。こうすることによって、点の分布が均一になって鼻が復活するだろう。

一番上の"Number of Samples"は残ってほしい点の数。その次"Explicit Radius (abs and %)"は、一番目のパラメータをオーバライドするもので、残ってほしい点の数の代わりに、点の距離を直接入力するものだ。点が分布している空間にランダムにある大きさの円盤(三次元なので本当は球)を投げ、その中に点が入っているかどうかを検査し、たくさん入っていたら排除している、んだろう。そういう意味で"Monte-Carlo Oversampling"つうのは、試行回数だかなんだか、そんなモンでしょう。

で、次の"Base Mesh Subsampling"、これが大事。ポイントクラウドの処理を行うときは、必ずこれをチェックしておく。一つとばして、一番下のドロップダウンボックスで処理対象のレイヤーを選択しておく。これでOKだ。

元のデータは頂点数約87000だったので、"Number of Samples"にそれよりも小さい数、20000とかを入れて試してみる。下がその結果だ。相変わらず鼻は欠けているが、頂点数が約18000となり、他の部位との差が少なくなった。


メッシュ作成の前に、ノルマルの再計算をやっておく必要がある。[Filters] > [Normals, Curvatures and Orientation] > [Compute normals for point sets]とやる。それから、Poisson Surface Reconstructionだ。

このポイントクラウドから同じようにメッシュを作成してみる。ディテールは失われたが、鼻は元に戻った。このメッシュを元に最終的なモデルを作る。レイヤーメニューで処理対象を選択しておくのを忘れずに。