Tech Sketch Bucket of Technical Chips by TIS Inc.

kinectで物体の3Dスキャンを試してみたよ2

Pocket

先日公開された3Dスキャンの記事 では、KScan3dの使い方を紹介しました。今回は Artec Studio 9 + Kinect で3Dスキャンしてみます。


Artec Studio + Kinect

今回紹介するArtec Studioを提供する Artec3D は、以前から専用の非接触ハンディスキャナを用いて物体を3Dスキャンするソリューションを提供していました。その専用スキャナから得られたデータを処理し三次元メッシュモデル化するためのソフトウェアが、今回紹介する Artec Studio です。このArtec StudioがこのたびKinectとも接続できるようになり、一気に利用の裾野が広がりました。
ただし前回紹介したKScan3dとは異なり、ハードウェアに要求されるスペックはかなり高くなります。

動作環境

  最小構成 推奨構成 検証構成
OS Windows Vista x64 もしくは Windows 7 ×64 Windows 7 Professional 64bit
CPU Intel 4コアCPU Intel Core i5 or i7 Intel Core i7 3770 @ 3.5GHz
RAM 8GB 12GB 16GB
VideoCard NVidia Geforce 9xxxxx 以上
Radeon ATI 3xxxx 以上
NVidia GeForce 230以上 NVidia GeForce GTX 680
512MB以上のビデオメモリ 1024MB以上のビデオメモリ 2048MBのビデオメモリ
HDD 300MB以上
その他 インターネット接続(ライセンス認証用)

最小構成で既にメモリ8GBを要求し、QuadCoreCPUとミドルスペック以上のビデオカードが必要という恐るべきソフトウェアです。この構成を満たさないPCにインストールすると、スキャンのフレームレートが劇的に低下し、一部の機能が使えなくなります。
(たとえばMacBookAirにBootCampでインストールしたWindows7に無理やりインストールしたところ、スキャンは1~2FPS程度しか出ず、テクスチャ生成時にRuntimeErrorで落ちました・・・)

インストール

my artec 3d にサインアップし、試用版(もしくは500€で購入した製品版)をダウンロードしインストールします。今回は、Artec Studio 9.0.5.10製品版で検証しています。
なおインストール時、及び再インストール時には下記のポイントに注意してください。

ドライバの選択

今回は "Kinect for XBox 360" を利用するため、ドライバ選択時に "Install Kinect for XBox OpenNI Drivers (OpenNI required)" を選びました。

artec_01.png

再インストール

Artec Studio 9はライセンス認証時に、PCのハードウェア構成などから生成される"フィンガープリント"をArtecのサーバへインターネット経由で送信し、ライセンスキーと対応付けて保存しています。そのため、他のPCに同一ライセンスキーを用いてArtec Studio 9をインストールすることはできません。

ただし製品版の場合、インターネットに接続した状態でコントロールパネルから正しくアンインストールすれば、Artecのサーバから当該PCのフィンガープリントを削除することができ、他のPCでそのライセンスキーを再利用することができます。
(このとき、「アンインストール可能な回数は制限されている」という怖い警告メッセージが表示されます・・・)
PCを新調する際などは十分注意してください。

3Dスキャンしてみる

残念ながら、Artec Studio 9の試用版にはマニュアルがありません(製品版を購入すれば、"my artec 3d"から英語マニュアルのPDFを入手できます)。 Tutorial Video 等を参考にして作業を進める必要があります。

流れとしては、以下のようになります。 前回 紹介したKScan3dより、若干?複雑ですね。

  1. スキャン対象を配置
  2. 対象をさまざまな方向から連続的にスキャン
  3. スキャンした映像フレームを複数のスキャンデータに分割
  4. 各スキャンデータの不要オブジェクトを削除
  5. スキャンデータを手作業で重ねる
  6. 三次元モデル化
  7. モデルの修正
  8. テクスチャ生成
  9. 位置合わせ

スキャン対象を配置

本日の撮影対象は、自転車用の空気入れです。それほど複雑な構造ではなく、またテクスチャ生成の再現度を評価できるプリント文字が表面に印刷されているので、選びました。

bicycle_pump.JPG

この空気入れを360度全方向&上下から撮影できる場所に配置します。

対象をさまざまな方向から連続的にスキャン

プレビューを表示

Artec Studioを起動してプロジェクトを作成した後、 "Scan" ボタンを押します。"Preview" を押すと、(正しくドライバがインストールされていれば)Kinectが撮影しているリアルタイム映像が出ます。
スキャン対象のみがイイカンジに表示されるように、"Depth of field" を調節してください。

artec_02.png

スキャンデータを記録

"Record" を押し、Kinectを上下させながらスキャン対象の周りを360度回り、スキャンデータを記録します。
Artec StudioはKScan3dとは異なり、静止画ではなく連続したフレームとして、撮影しているRGB&深度データを記録し続けます。そのためあまりのんびりしすぎると、大量のスキャンデータでメモリがあふれてスキャンが止まります。かといって急ぎすぎてスキャン対象が撮影領域から外れ、フレーム前後でスキャン対象の特徴点の連続性が判断できなくなると、これまた警告ブザーが鳴ってスキャンが止まります。イイカンジにスキャンできるようになるまで、何度か繰り返してみてください。

artec_03.png

スキャンした結果

360度上下からスキャンし終わると、以下のように複数の物体が重ねあわされたような状態になっていると思います。この「スキャン対象が分裂した状態」は後で修正できますので、この段階では問題ありません。

artec_04.png
artec_05.png

表示されている三次元モデルは、マウスを左クリックしながらグリグリすると回転し、マウスのボタンを左右同時にクリックしながら動かすと移動します。またホイールを前後すれば、拡大・縮小ができます。以降の画面でも、同様の操作で視点を変更することができます。

スキャンした映像フレームを複数のスキャンデータに分割

右側ペインに表示されているスキャンデータ(画像では「ID:3 Title:Scan1」)をダブルクリックすると、そのスキャンデータに内包されている各フレームが表示されます。これらのフレームを、スキャン対象が分裂していない「一つの三次元モデル」として認識できる部分に分割していきます。(不要なフレームは削除してもかまいません。)
今回は最終的に、24個のスキャンデータに分割しました。かなり手間のかかる作業です。。。

artec_06.png

各スキャンデータの不要オブジェクトを削除

この後のスキャンデータ重ね合わせをやりやすくするために、壁などの各スキャンデータの不要オブジェクトを大雑把に削除します。

スキャンデータを一つ表示し、 "Editor" ボタンを押して "Eraser" ツールを選択します。CTRLキーを押しながら不要な部分を塗りつぶすことで、不要なオブジェクト(画像では赤い部分)を削除することができます。
これをすべてのスキャンデータに対して実行します。

artec_07.png

スキャンデータを手作業で重ねる

Alignツールを使って、スキャンデータを手作業で重ね合わせます。これまた手間のかかる作業です。。。

重ね合わせるスキャンデータを表示

全スキャンデータを表示した状態で "Align" ボタンを押すと、スキャンデータの重ね合わせモードになります。左側の図では、ベースとなる「Scan1_1」と、重ね合わせる「Scan1_2」が分裂して表示されています。このズレているスキャンデータを重ね合わせるのですが、今の状態では作業しづらいため、Shift+左右マウスボタンを同時にクリックしながらマウス移動で、右側の図のように「Scan1_2」を離れた場所へ移動させます。

artec_08.png
artec_09.png

対応する箇所を指定して重ね合わせ

各スキャンデータ上でCTRLを押しながら左ダブルクリックすることで、「スキャンデータ上の対応する位置」を指定します。スペースキーを押せばそのペアが確定します。このペアを(同一直線状にない)2~3箇所指定し、エンターキーを押すことで、スキャンデータが重なります。きっちり重ならなかった場合、ペアの指定をやり直してください。

artec_10.png
artec_11.png

これを全てのスキャンデータに対して実施し、全てのスキャンデータを重ね合わせます。

三次元モデル化

次に重ね合わせたスキャンデータを一つの三次元メッシュモデルへ変換します。具体的には

  1. Registration(重ねあわされた複数のスキャンデータを一つに統合)
  2. Fusion(深度データの点群からメッシュモデルへ変換)
  3. 後処理(小さなオブジェクトの削除やメッシュの単純化など)

という手順になります。
"Tools" ボタンを押し、"Manual"(各処理を個別に実行)か "Auto"(各処理を連続して自動実行)を選択して、変換処理を行います。CPU/GPUの能力とメモリ量によりますが、かなり時間がかかります。
(メモリが足りないと、ログウィンドウにエラーメッセージを出してさくっと失敗します。。。)

artec_12.png

この処理によってKinectが撮影した画像フレームと直接関係しない「三次元メッシュモデル」が生成されるため、表面のテクスチャ情報は失われます。

モデルの修正

360度キッチリデータがスキャンできており、かつ重ね合わせが完璧に行われていれば、この段階で三次元メッシュモデルは完璧に生成されているはずです。が、なかなかそうもいきませんので、三次元メッシュモデルの修正を行います。

不要なポリゴンの削除

"Editor" の "Eraser" ツールを用い、不要なポリゴンを削除します。

artec_13.png
artec_14.png

穴埋めとRemesh

"Edges" ボタンを押し、モデルの穴を選択して埋めます。その後 "Tools" ボタンを押し、手動で "Remesh" します。

artec_15.png
artec_16.png

このような手順を何度か繰り返し、三次元メッシュモデルを修正します。

テクスチャ生成

スキャンした各フレームのRGBデータを元に、三次元メッシュモデルのテクスチャを生成します。実際に実行させてみると、下図のように、表面に印刷されていたプリント文字がそれなりに再現されていることがわかります。
このテクスチャ生成機能はKScan3dには実装されていないため、Artec Studio 9を選択する強力な理由ともなり得ます。

artec_17.png
artec_18.png

テクスチャ生成時には、テクスチャ画像のサイズや生成方法などいくつかのオプションが選択できます。ただしテクスチャサイズを大きくしすぎると、三次元メッシュモデルが巨大になりすぎ、ビデオメモリサイズが小さな他の環境で表示できなくなりますので注意してください。

位置合わせ

最後に、 "Editor" の "Transformation" ツールを用い、三次元メッシュモデルを原点位置に移動させます。

artec_19.png
artec_20.png

できたっ

以上で、自転車の空気入れを「テクスチャ付きの三次元メッシュモデル」にすることができました。画面ハードコピーを取りながらですが、だいたい6時間程度かかりました。

artec_21.png
artec_22.png

artec_23.png
artec_24.png

製品版を購入していれば、作成した三次元メッシュモデルをポピュラーな3Dモデル形式(.ply, .obj, .wrl, .stl, .asc, .aop, .ptx)で出力することができます。OpenGLやWebGLに読み込ませれば、ARやVR表示することもできるでしょう。

向いてなさそうなこと

Artec Studio 9もKinectを利用しているため、KScan3dと同様の弱点があります。

光沢のある部分は再現しづらい

今回だと、空気入れの裏側部分の光っていた部分は穴が開いた状態になってしまったため、ツールで埋めることになりました。周囲のRGBデータからテクスチャは補完されるため、最終的にはそれほど違和感がなく仕上がりましたが、穴の部分に何らかのディテールがあったとしても失われてしまっているでしょう。

入り組んだ部分や細い部分は再現しきれない

今回だと、空気入れのチューブ部分は、かなりがんばりましたが一本のチューブとして再現できませんでした。

細かいテクスチャは再現できない

空気入れ本体部分は、「ナニカ赤い字が書いてあるなぁ」ぐらいはわかりますが字を読むのは困難です。また圧力ゲージ部分のテクスチャは、まったく再現できませんでした。

まとめ

ということで、Artec Studio 9とKinectを用いて3Dスキャンを行ってみました。専用の三次元スキャナも無しに、テクスチャも含めてここまで再現できるとは、正直驚きです。

またこの「Kinect(や専用スキャナ)で3Dスキャン」する技術は「RGBデータ+深度データ」を利用しているるため「3Dスキャンした物体の大きさ」を精度よく計測することができます(今回は紹介しませんでしたが、 "Measures" ボタンを押すと計測ツールが利用できます)。 Autodesk 123D catch のような「複数のカメラ画像から三次元モデルを再構成する」ツールもありますが、物体の大きさ情報は失われてしまいます。「物体のサイズ」が重要な場合、今回紹介したようなツールの方が適しているでしょう。

ユーザ生成コンテンツをARやVRに持ち込む強力な手段として、活用できるのではないでしょうか。

エンジニア採用中!私たちと一緒に働いてみませんか?