2011/11/19

FUJIFILM 3D計測システムのデータをいじってみました

ご無沙汰してしまいまして申し訳ありません。
今回は、富士フイルムさんにご協力いただき、FUJIFILM 3D計測システムから出力された点群データを処理してみたいと思います。
もちろん作業はフリーソフトウェアのRapidform XOMです!

FUJIFILM 3D計測システムの情報はこちら。
http://www.fujifilm.co.jp/corporate/news/articleffnr_0404.html
カメラの製品サイトが見つかりませんでしたが、富士フイルムさんによると、 最新のシステムは、2枚の写真を同時に撮影して立体視ができる3Dデジタル カメラの最新機種"FinePix Real 3D W3"に手を加えたもので、それで撮影した2枚の画像から、付属のソフトウェアで3D点群データを生成します。デジカメで写真を撮ればいいので、とてもお手軽なスキャンが可能になります。
さぁ、今回の対象物はこちら!これをぐるっと一周11ショットのデータを用意していただきました。


写真から点群データ化するところは富士フイルムさんのソフトウェアで行うので、そのあとからご覧いただきます。まずはデータの読み込みです。Rapidformでは、このシステム専用の拡張子であるCSDをサポートしています。複数のショットがある場合、XOMでは別々に読み込みができませんので、SHIFTキーを押しながらすべて選択してください。
また、オプションのカスタム設定にチェックを入れないと、読み込み時に自動的に点群をメッシュにします。もしデータが重くなるなどの理由で点群のまま読み込みたい場合には、カスタム設定にチェックを入れて、「点群のみ」「法線方向を作成」「テクスチャを含む」にチェックを入れて読み込みましょう。
データを読み込むと、このようなアラートが出てきます。スケールの大きなデータが読み込まれたときに、単位が合っているか確認するものですが、今回はmmで正しいのでそのままOKを押します。
最近はロングレンジデータの処理も増えてきたので、このアラートはよく出てきます。。。
するとこのような形でデータが読み込まれました。もちろん色情報付きで、すでにこれはメッシュになっています。ひとつのデータが70万から80万ポリゴンくらいでした。

もうなんとなくできているようにも見えますが、まだこれはお互いのショットの位置が合っていません。各ショットをそれぞれ単一色で見るとわかりますね。

さて、ではメッシュデータをいじっていきますので、スキャンモードに入りましょう。スキャンデータをダブルクリックするか、ツールバーのボタンを押してください。

最初に行うのは、空中に浮かんでいる小さなノイズ(クラスタ)の除去作業です。
これには、お約束の手法があります。

①塗りつぶし選択(選択⇒モード⇒塗りつぶし選択。もしくは左下のアイコン)で、残したいところを選択する。塗りつぶし選択とは、自分がクリックした場所からつながっているメッシュをすべて選択するものです。
②選択箇所を反転する(選択⇒反転)。つまりいらないところが選択されます。慣れてきたらSHIFT+Iのショートカットを使うと早いです。
③選択箇所を削除する(編集⇒削除。もしくはDeleteキー)。
これで空中のノイズはあっという間に消えます。小さいノイズは見えませんので、ノイズを選択するのではなく、欲しいところを選択して反転しましょう。ほら、このとおり。これをそれぞれのショットに対して行います。

次に、エッジの部分をきれいにします。このシステムで点群化されたデータは、拡大してみるとエッジのところがギザギザしているだけでなく、跳ね上がっていることがわかります。画像から点群を起こしているので、境界の認識が難しいのでしょうね。
こんなときには、境界要素の選択です(選択⇒境界要素)。以前選択に関する投稿にも出てきましたね。
エッジの1列だけだと足りないようなので、選択範囲を拡大します。今回は思い切って10列拡大しました。「こんなに?」という感じですが、たくさんのショットでオーバーラップも多いので大丈夫でしょう。
全体でみるとこんな感じです。
消しちゃいましょう。これもそれぞれのデータに対して行います。
これで下ごしらえは完了。位置合わせをしていきます(ツール⇒スキャンツール⇒位置合わせ)で、はじめは「手動位置合わせ」をします。「参照」というところをクリックすると枠が黄色くなりますので、移動したくないデータをクリックします。次に「移動」をクリックして、移動したいデータをクリックします。すると画面が3つにわかれてくれます。左がプレビュー。右上が参照モデル。右下が移動モデルになります。
右上と右下のビューを使って、共通する3点をクリックしていきましょう。順番が一緒であれば、交互でも片方一度にクリックしてしまっても構いません。色が付きますのでそれで確認します。あとからベストフィットをかけるので、この3点はある程度適当でも構いません。やり直したいときにはCtrl+Zを押すことで、最後にクリックした点が消えます。また、3点じゃなくてもよいです。左のプレビューを見ながら作業しましょう。だいたい合ったなと思ったら、「方法」の横にある☑ボタンを押します。(まだ一番上の「位置合わせ」の横にあるボタンは押したら駄目です!)

ひとつの位置合わせが終わると、自動的に移動にあったモデルが参照に移ります。「移動」ボタンが黄色くなっていることを確認したら、次のモデルをクリックしましょう。そしてまた共通点をクリックします。これを順次繰り返していきます。

全部の位置をあわせたら、オプションを「全体と最適化」に変えて、「移動」を黄色くして、すべてのモデルを選択します。そして「方法」の横の☑ボタンを押し、ベストフィットをかけます。「手動位置合わせ」の時にもベストフィットをかけていますが、これはとなりのモデルとの間だけ計算していました。つまり1周すると最初と最後が合わない場合があります。この「全体と最適化」は、すべてのモデルが一番ベストフィットされるところを計算してくれます。必須の処理ですね。

これが終わったら、一番上の「位置合わせ」の横にある☑を押して、決定します。
完成!
と思ったらまだ早い!テクスチャ(色)で見るとできているようですが、まだ各モデルがバラバラの状態です。
これを合成(ツール⇒スキャンツール⇒メッシュ化/合成)して、完成となります。
良く見たら上のところのデータが抜けてますね。ちょっと削りすぎたかな ^^;

カメラと同じように手軽に3Dスキャニングできるということは、普及させる上ではとても重要ですね。
国産ということもあって市場の注目は高いようです。

一方、フリーソフトウェアでもこのくらいのことはできると言うところをご理解いただければ幸いです。

Rapidform XOMのダウンロードはこちら!
http://www.rapidform.com/ja/products-3/rapidform-xom/