Tri-Coderの使い方

1.はじめに

Tri-Coderは一般に立体スキャナや3次元デジタイザと呼ばれる現実の物体の画像から三次元の形状ファイルを生成する為のソフトです。

三次元形状の検出には光切断法を用いています。
光切断法とはスリット光投影法とも呼ばれ対象物にスリット状の光を投影して撮影した複数の二次元画像から三次元の座標データを生成するものです。

被写体にスリット光を投影し、被写体を正確に動かして撮影をするために専用の撮影台と基準体とスリットが必要になりますが、小学生の工作レベルで誰にでも製作できると思います。
また光源も白熱電球を使っていますのでレーザーのように取り扱いに気を使う必要がありません。
生成した三次元データはVRML形式(VRML1または2)、DXF形式またはCSV形式で保存できます。
CSV形式は得られた全座標データをカンマで区切って出力したもので、自分で他のフォーマットに変換したいときなどに使うことができます。

三次元形状をPCに取り込む機能を持つ市販品としては以下のようなものがあります。

しかしこの中で最も安価なPICZAのPIX4でも定価\138,000で簡単に個人で買えるような値段ではありません。

Tri-Coderでは撮影はデジカメ、ビデオ、銀塩カメラなど既存の物を使い、それらからPCへの取り込み手段が既に有れば、それ以外の材料費としては白熱電球、クリップ付き電球ソケット、厚紙、角材だけですので材料費は合計\1500もあれば3Dスキャナが使用出来ます。
撮影台に凝るとさらに材料が必要になりますが、それでも数千円あれば遊びで使うには十分なものができると思います。

Tri-Coderはトリコーダーと読んで下さい。
名前はあれですが耳のとがった宇宙人が「非論理的だ」とか言う番組の小道具とは無関係です。

本ソフトはシェアウェアとしますが、レジストしなくても全ての機能が使え試用期限もありません。
まず使ってみて気に入ってもらえたらレジストをお願いします。
料金は\1500とします。

2. 簡単な説明

2.1 動作環境

Windows95、Windows98 SE、Windows2000で動作を確認しています。
ランタイムやDLLは不要です。

1.Win95 OSR2
CPU:Pen 133MHz
RAM: 40MB
30枚の画像SCANに3分

2.Win98SE
CPU:Pen3 500MHz
RAM: 128MB
30枚の画像SCANに30秒

3.Win2000
CPU:Pen3 1GHz
RAM: 256MB
30枚の画像SCANに15秒

4.Win2000
CPU:Pen4 2.26GHz
RAM: 512MB
30枚の画像SCANに7秒

1ではメモリが足りないせいか、ディスクアクセスが多く多少遅くなっていますが、それ以外ではほぼCPUの測度に比例して早くなっているようです。
また、元画像がビデオならばビデオキャプチャ、銀塩写真ならばスキャナ、デジカメならばメモリーカードリーダーなど画像をPCに取り込む手段が必要です。

本ソフトは形状ファイルを出力するまでの機能しか持たないため、形状データを見るためには別途ソフトが必要です。

Windows版I.E. Ver.6.0とCosmo Player Ver.2.1.1 の組み合わせでVRML1及びVRML2ファイルが読み込めることを確認しています。
 注 Cosmo PlayerはWin2000以降はサポートしていないようです。
Windows版Blender 2.20 でDXFファイルとVRML1ファイルが読み込めることを確認しています。
Windows版MetasequoiaLE R2.1 でDXFファイルが読み込めることを確認しています。
Windows版myShade REV.9b 25216 25でDXFファイルが読み込めることを確認しています。
Windows版I.E. Ver.6.0とCortona VRML Client Ver.4.0 release76の組み合わせでVRML2ファイルが読み込めることを確認しています。

2.2 インストール・アンインストール

インストールはtricoder.lzhを適当なフォルダに解凍して下さい。
以下の2つのファイルができるはずです。
レジストリは使っていませんのでアンインストールはインストールしたフォルダごと削除してください。

2.3 簡単な使用方法

詳細な使い方は3.3 Tri-Coder使用方法 で述べますが、まずサンプルを用いて何ができるかを説明します。

サンプル画像としてsample.lzhを用意しています。
これは調整用の画像2枚と被写体を1.8°ずつ回転させて撮影した 枚の画像及びコンフィグファイルからなります。
サンプルデータが大きくなりすぎるのも困るので顔の左半分のみのデータです。
解凍するとサンプル画像samp0001.jpgからsamp0030.jpgおよびsamp1000.jpg,samp1001.jpgとコンフィグファイルtricoder.cfgができます。
samp1000.jpgは回転中心調整用画像、samp1001.jpgは基準体画像、 samp0001.jpgからsamp0030.jpgが実際の被写体の画像です。
実際に使う場合には回転中心画像と基準体画像を元にキャリブレーションを行いますが、サンプル画像を使うだけならならば既にtricoder.cfgにキャリブレーション結果が書かれていますのでキャリブレーションは不要です。
まず右上の「設定」ボタンをクリックして設定画面を出してください。
この設定画面で「LOAD」ボタンをクリックし解凍したフォルダのtricoder.cfgを読み込んでください。
これで回転中心と基準体の画面上の座標、実座標、そして回転角度が読み込まれます。
次に出力したいフォーマットをチェックします。
出力時のポリゴン化もここで設定します。
Error thresholdは画像から変換した三次元データとポリゴン化したときの三次元データの誤差が許容誤差の範囲に収まるようにポリゴン化を行います。
この値を小さくするほどポリゴンは元データに忠実になりますがポリゴン数は多くなってしまいます。
Maxpolygon lengthはポリゴンの1辺の最大の長さを指定します。
通常の使用ではこの値は大きいままでもかまいませんが、ポリゴン出力後に修正する場合等に頂点数を増やしたいときはこの値を小さくすると縦方向のポリゴンの長さがこの値以下に制限されます。
とりあえず両方とも変更しなくてもかまいません。
この設定を保存したい場合は「X」で閉じる前に「SAVE」ボタンでsaveして下さい。
設定が終わったら「X」ボタンで抜けてください。
次にメイン画面の「LOAD」ボタンをクリックしsamp0001.jpgを選択して「OK」で最初の画像のロードしてください。
スキャンを行う範囲をマウスの左ボタンを押しながらドラッグして指定します。
「SCAN」ボタンのクリックでスキャンを開始します。
画像ファイルの下4桁の数字が連続している限り連続した画像とみなし、画像ロードとスキャンを繰り返します。
終了メッセージは出ませんので止まったら「SAVE」ボタンをクリックしてください。
これでサンプル画像と同じフォルダに指定したフォーマットでsamp0001.*という名前でファイルが生成されます。
拡張子は選択したフォーマットにより自動的に付けられます。
 (VRMLなら.wrl、DXFなら.dxf、Rawデータなら.csv)
CSVファイルは全座標データをポリゴン化することなくそのまま出力していますのでファイルサイズはVRMLやDXFに比べて大きくなってしまいます。
CSVファイルのフォーマットについては後で述べます。
SCAN終了の状態のまま、設定画面を呼び出し設定を変えると再度SCANすることなく新しい設定でSAVEすることが出来ます。
作成したVRMLファイルはWWWブラウザとプラグインを組み合わせることで見ることができます。
DXFファイルは他のCGソフトに読み込んで使用してください。

3. 撮影

3.1 撮影機材の作成

自分で撮影して取り込みを行う場合に必要になる撮影台と、基準体の作り方を説明します。

3.1.1 撮影台の作成

撮影用の台は被写体を一定角度で回転させるために必要になります。
一番簡単な方法はtable.png(縦横とも600DPIを想定)をファイルに保存し2枚印刷します、1枚は中の円の部分を切り取り、中心に画鋲や針で穴をあけます。
これを印刷したもう1枚と重ね合わせて中心に画鋲や針を通し中心の円の部分が回転するようにします。
円に書かれた三角と円の周囲に書かれた目盛を合わせることで、一定角度で回転を行います。
長い目盛に合わせることで3.6°毎、長い目盛と短い目盛に合わせることで1.8°毎に回転させることができます。
ここでは印刷した物をそのまま使うように書きましたが、厚紙や木の板に貼り付けるようにした方が丈夫で良いかもしれません。
また、撮影台の大きさの違いはキャリブレーションにより吸収しますので被写体の大きさによって拡大縮小して撮影台を作成してください。
撮影は暗い場所で行った方が良い結果が得られますが、暗い中で目盛を合わせるのは結構面倒なので私は8歯と16歯のギアで1/2に減速し、更に100歯の平ギアとウォームギアを組み合わせて1/100に減速、全体で1/200の減速を行い、クランクを1回転で1.8°回転するような撮影台を作っています。

3.1.2 基準体の作成

基準体は3段の階段状の形状とします。
断面が正方形の角材を積み重ねて写真のような形状を作ります。

被写体の大きさに応じて最適な基準体の大きさも変わりますが、基準体はなるべく大きく作った方が誤差が小さくなるのでなるべく大きなサイズで作って下さい。
サンプルを撮影したときの基準体は10mmx10mmの角材を重ねて作りました。
材質は何でもかまいませんが加工のしやすさや値段から木材が良いと思います。
手動で座標を入れる限りはあまり関係ありませんが、今度座標の自動取得も考えているのでそのために正面から見える角材は上面だけ黒く塗装した方が良いかもしれません。
この基準体が狂っていると全ての測定結果に悪影響を与えるので、出来るだけ正確に作るようにして下さい。
更に精度を求めるなら金属の角材でも良いのですが、その場合反射でスリット光が見えにくくなる可能性があるため、前面を白で塗装した方が良いかもしれません。
これらの塗装はつや消しで行って下さい。

3.1.3 スリット部の作成

スリット部は図 のように作成します。
まずこの画像をファイルに保存し光が漏れないような厚紙に縦横共に600DPIとして印刷します。
これを以下の手順で組み立てます。

1.実線に沿って部品を切り離して下さい。
2.部品1の部品中央にスリットを開けます。
3.部品1のスリットの上から隙間の間隔を1mm以下にしたアルミ板を接着剤または両面テープで張ります。
 アルミ板の間隔は上下で等しくなるよう注意して下さい。
4.部品2に書かれている指示に従い部品3と4を部品2に接着します。
  このときのりしろは外側に来るよう折り曲げて下さい。
5.手順3で貼ったアルミ板が部品5、6側に来るように部品1を部品2-4に接着します。
6.部品5、6を接着します。

完成すると以下のようになります。

スリットの作成が面倒であれば500ccの缶ビールなど円筒形のものを2つ並べ、間から照明の光がスリット状に漏れるようにしてもかまいません。
片方の缶の上下にビニールテープを巻き缶同士が接触しないようにし2つをテープで固定すればいいでしょう。

写真 参照 IMG

3.2 撮影

3.2.1 照明のセット

照明はスリット光がなるべく細いスリット光になるようにする必要があります。
白熱電球はガラス部分が白色のものと透明のものがありますが、ここでは左の透明の物を使います。

また、電球の中にフィラメント(実際に光る部分)が複数本入っているものや、くの字に曲がっているものがありますが、フィラメントが1本でなるべくまっすぐのものを使用して下さい。
この電球を大きな写真用品店などで売っている照明用クリップ(写真 )にセットし壁や椅子など適当なものに固定します。

セットするときは電球のフィラメントが床に対して垂直になるようにして下さい。
垂直になっていないと、スリット光が広がってしまいますので注意が必要です。
この状態で電球のスイッチを入れ、光源、撮影台、スリット部を適当に配置しスリット光が回転中心を通るようにセットして下さい。

  撮影台とスリット部はなるべく近づけた方がスリット光が細くなり良い結果が出ます。

3.2.2 カメラのセット

撮影台の手前にカメラを置きますが、このときレンズの中心が円の下の垂直線と一致し回転の中心位置を向くように、また10cmなどと書かれた水平線がカメラのフィルム面と平行するようにカメラをセットして下さい。
カメラと被写体の距離は任意です。
もしカメラの撮影出来る最短距離がもっと遠い場合でもこれらの水平線とカメラフィルム面が平行になるようにセットすれば大丈夫です。
ここではフィルム面と書いていますが、もちろんデジカメでも大丈夫です。
以上で準備は終わりです。
なおカメラが撮影中にずれてしまうと正しい結果が出ませんのでずれないよう気を付けて下さい。
カメラ位置を固定する角材を撮影台に貼っておくと良いかもしれません。

3.2.3 回転中心の撮影

先にセットしたスリット光が回転中心からずれていないことを確認し、回転中心を撮影します。
これ以後は同じ条件で撮影しないと正確な取り込みが出来ないため、カメラ位置を動かしたりしないよう注意して下さい。

3.2.4 基準体の撮影

次に基準体を撮影します。
基準体をカメラのフィルム面と平行にセットします。
図 参照 IMG ここでは三段の基準体の一番上の段の垂直面が回転中心つまりZ=0に一致するようセットしています。
基準体をセットした位置情報が後で必要になりますので撮影台に書かれた位置とは別の位置にセットした場合、どこにセットしたかメモしておいて下さい。

3.2.5 被写体の撮影

続いて基準体を外し、被写体を撮影台の円盤部に載せます。
被写体は撮影中にずれないように粘土などで固定します。
これを一定角度回転させる毎に撮影します。
画像のファイル名は4文字のファイル名、4桁の数字、拡張子(.JPGまたは.BMP)
にしてください。
これ以外のファイル名フォーマットでは正常に動作しません。
数字が4桁に満たないときは前に"0"をつけて常に4桁にしてください。
また数字の連続を見て連続して取り込みを行うので数字は連番としてください。
数字の連続が切れた時点で終了とみなすので一連の画像の連番の後は少なくとも1つは 数字が存在しないようにしてください。
例えば10枚組の画像が2つ有るときは1組目はTEST0001.JPG〜TEST0010.JPG、2組目はTEST0012.JPG〜TEST0021.JPGなどというファイル名としTEST0011.JPG、TEST0022.JPGは存在してはいけません。

3.2.6 撮影時の注意

回りが明るい状態ですと後の処理でスリット光の検出で間違いの原因となることがありますので、周囲は暗くして下さい。
カメラの露出を自動にしておくと、スリット光の当たり方により露出が変わり、スリット光の太さが異なって撮影される場合がありますので、もしカメラが露出固定で取れるならば露出固定で取った方が良い結果が得られます。
露出固定の方法は使用するカメラのマニュアルで確認して下さい。

3.3 Tri-Coder使用法

撮影が終わったら、回転中心及び基準体を撮影した画像から基準となる点の座標を調べます。
下図は基準体の部分を抜きだしたものですが、この1-5の座標を設定画面の画面座標に入力して下さい。

同様に回転中心も調べて設定画面の中心座標に入力して下さい。
座標はTri-Coderに画像をロードするとWindow上部にマウスカーソルの座標が出ますのでそれで調べるか、または他のグラフィックソフトに読み込んで調べて下さい。
得られた座標を設定画面中の対応するBOXに入力して下さい。
画面の座標は図のような左上原点のX-Y座標です。

次に各ポイントの実際の座標を対応するBOXに入力して下さい。
実座標は図のようにZ軸はカメラのレンズ中心から奥、X軸は左から右方向、Y軸は下から上方向になります。

実座標は図のようにX軸Z軸は回転の中心を(0,0)、Y軸はカメラのレンズ中心を0とした 座標で入力します。
先に説明したとおりに作った撮影台と基準体を、説明通りセットした場合実座標は以下の計算で求められます。
カメラを撮影台においたときのレンズ中心位置が撮影台から例えばCY mmだったとすると 先に説明した撮影台のサイズですと実座標は
  基準体 実座標(Y,Z)
  1 (30-CY,0)
  2 (20-CY,0)
  3 (20-CY,-10)
  4 (10-CY,-10)
  5 (10-CY,-20)

 回転中心実Y座標
   (-CY)
となります。
これらの設定が終わったら、設定をSAVEしておけば別の条件でスキャンするとき、LOADするだけでよく再度入力する必要がありません。
後は2.3で述べたようにスキャンを実行するだけです。

3.4 CSVファイルのフォーマット

CSVファイルは以下のようなフォーマットになっています
X座標,Y座標,Z座標,1SCAN内のカウンタ,SCANナンバー
これが得られた座標の数だけ繰り返されます。
SCANナンバーは1から元画像の枚数までの連番です。
1SCAN内のカウンタは上のSCANナンバー内で1から始まる連番になっています。

4.既知のバグ

正面を向けるチェックボックスが正常に機能していません。
SCAN時には正しくトレース出来ているように見えても、形状ファイルに出力するとゴミが着くことがあります。

5.最新版

最新版はURLに置いてあります。
 www.imasy.or.jp/~imae/kagaku/tricoder.lzh
サンプルの画像ファイル及び形状ファイルは以下のURLに置いてあります。
 www.imasy.or.jp/~imae/kagaku/sample.htm

6.開発環境

Borland C++Builder4 Leaning Edition

7.著作権・免責事項

本ソフトウェアを使用したことによりいかなる損害が生じても、作者は一切の責任を負いません。
本ソフトはフリーウェアとします。

Webのリンクは自由にしてもらってかまいませんが、転載はしないで下さい。

8.連絡先

何かありましたらまでメールでお願いします。

TOPへ戻る