サングラス型の反透過ARグラスを出しているXrealが
ステレオカメラ搭載のAndoroid端末Beam Proを出していたので
簡易的な3Dスキャンに活用できないかと 試しに購入してみました
ステレオカメラを活用して3Dモデル作成するテストの覚書です。
普段はTLで技術情報を眺めているだけで 翻訳片手なので間違いが多いかもしれません
XREAL Beam Proの撮影画像について
撮影画像は 左右のカメラ画像を横並びにしたもので記録されるようで
動画 は片目1920*1080で 3840*1080
静止画は片目3844*2880で 7688*2880になるようです
今回はまずは動画撮影したものから画像を切り出してテストをしています
動画からのフレームの書き出し
ffmpegを使って動画のフレームを一定間隔で抜き出して
横並びの左右片目づつ切り抜きするバッチファイルを作成してみました
rem 動画の場所にフォルダ作成
md %~dp1sbimgL
md %~dp1sbimgR
rem 秒間4枚画像を書き出し
%~dp0ffmpeg\bin\ffmpeg.exe -i %1 -vf crop=1920:1080:0:0 -r 4 -f image2 %~dp1sbimgL\img%%06d.jpg -vf crop=1920:1080:1920:0 -r 4 -f image2 %~dp1sbimgR\img%%06d.jpg
pause
動画のある場所に 左右それぞれのフォルダを作成し
秒間4フレームで切り出して 左右振り分けての画像を保存する処理にしています
動画から切り出したものを青赤ステレオ風で重ねて画像を比較してみました
大体3m先で15pixel程度 10m先の軒先で5pixel程度の平行移動が確認できます
ただ動画なのもあって拡大画像で確認してみるとブロックノイズが気になりますね
COLLMAPでの解析
まず CollmapでSfM (Structure-from-Motion)してみました
SfMとは画像から抽出した特徴点からカメラの移動位置や 特徴点の立体位置を再構築する処理のことです
Colmapは制度が良く高速なのもあって 学術的な解析でもよく使われるようです
Collmapでの解析ではまず File>NewProjectで
プロジェクトのデータベースファイルの作成と画像のあるフォルダの指定をします
Reconstruction>Automatic Reconstruction で開くウインドウで
各種設定をすることでで解析開始です
動画から連続画像を作ったので Data typeをVideo framesに設定して
画像のある親フォルダ下に左右のカメラで画像を振り分けたサブフォルダを作っておいて
Shared intrinsics per sub-folder をチェックすることで 別の一連の画像として解析するようです
今回の再構築した点群データはこんな感じでした
後半で左右のカメラの動きに解析違いが出来てしまっている様子ですが点群だけも全容が分かる程度には構築できています
今回の解析では13th Gen Core i7ノートで9分強 ポータブルゲーミングPCで20分の解析時間と
少なくとも自分のやりたいことはできそうです
左右のカメラの相対位置を拘束する設定がないか 調べる必要がありそうです
Meshroomでのフォトグラメトリ
複数写真から立体を生成するフォトグラメトリソフトの一つに AliceVision Meshroom という
オープンソースのソフトがあります
ステレオカメラに対応した処理があるようなので試してみました
Meshroomのマルチカメラリグの設定
meshroomはrigフォルダ下に番号分けしたフォルダを置くと
フォルダ下の同一番号の画像を同期して撮影された画像として処理してくれるようです
ただ、画像のExif情報のBodySerialNumberが別である必要もあるようです
幸いにも Windowsのプロパティでも複数ファイルExif情報を一括編集できるようです
IDが被っていさえいなければいいので 片目分のデータに適当な値を入れればいいだけのようです
後はデフォルトの設定で処理を実行してみました
枚数や1080p動画から書き出した画像の精度と考えると比較的いい仕上がりなのではないでしょうか
カメラの撮影軌跡について
フォトグラメトリの素材撮影において、より綺麗な結果を得るには
カメラの位置を変えずに回転する撮影(パン)を極力減らして画像同士で重なる部分が8割程度あるようにするとよいようです
今回のテストでは あえて撮影位置をあまり移動せずに左右の首振り中心で撮影も試してみました
上が片目分の平行移動画像
下が両目撮影の首振り画像 の結果。入力枚数を揃えたものです
従来通り平行移動を心掛けた方が結果が良いようですが
左右に平行移動した画像のペアがある分 カメラ1つで首振りするよりはまともな結果になってるかもしれません
雑な検証ですが 個人的には実りの多い検証でした
まだ把握していなかった設定も含め 引き続き色々試していきたいと思います