三次元形状の検出には光切断法を用いています。
光切断法とはスリット光投影法とも呼ばれ対象物にスリット状の光を投影して撮影した複数の二次元画像から三次元の座標データを生成するものです。
被写体にスリット光を投影し、被写体を正確に動かして撮影をするために専用の撮影台と基準体とスリットが必要になりますが、小学生の工作レベルで誰にでも製作できると思います。
また光源も白熱電球を使っていますのでレーザーのように取り扱いに気を使う必要がありません。
生成した三次元データはVRML形式(VRML1または2)、DXF形式またはCSV形式で保存できます。
CSV形式は得られた全座標データをカンマで区切って出力したもので、自分で他のフォーマットに変換したいときなどに使うことができます。
三次元形状をPCに取り込む機能を持つ市販品としては以下のようなものがあります。
Tri-Coderでは撮影はデジカメ、ビデオ、銀塩カメラなど既存の物を使い、それらからPCへの取り込み手段が既に有れば、それ以外の材料費としては白熱電球、クリップ付き電球ソケット、厚紙、角材だけですので材料費は合計\1500もあれば3Dスキャナが使用出来ます。
撮影台に凝るとさらに材料が必要になりますが、それでも数千円あれば遊びで使うには十分なものができると思います。
Tri-Coderはトリコーダーと読んで下さい。
名前はあれですが耳のとがった宇宙人が「非論理的だ」とか言う番組の小道具とは無関係です。
本ソフトはシェアウェアとしますが、レジストしなくても全ての機能が使え試用期限もありません。
まず使ってみて気に入ってもらえたらレジストをお願いします。
料金は\1500とします。
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ファイルが読み込めることを確認しています。
サンプル画像として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ソフトに読み込んで使用してください。
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
次に各ポイントの実際の座標を対応する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で述べたようにスキャンを実行するだけです。
Webのリンクは自由にしてもらってかまいませんが、転載はしないで下さい。