2012-06-11

作業メモ:Phantom -> DippMotionで飛翔体の特徴点から位置情報取得して3次元再構築

Phantom でのキャプチャ設定

画像処理

下の方にある Image processing ボタンから(PCCでは上の方にあるパレットのボタン。Image Toolsとある)。gamma が最初1.41になっていることに注意。Set default を押すと 1.0 になる(PCCでは2.2)。

フィルタは、元画像をそのまま見るなら Sharpness を、輪郭を抽出するなら Edge Hipass 3x3 か Edge Laplacian 3x3 がよさそう(いま見てる動画だと、どっちでも同じに見える)。ただ、結局、「人の勘」に頼る場面が出てきたため、シャープネスだけに落ち着いた。もっと鮮明な画像が得られている場合は輪郭抽出だけでいいのかも。

保存

右のほうの Convert から(PCCでは、右のペインでPlayタブ > 下のSave Cineボタン。動画でもこのボタン)。必要な範囲よりやや長めの範囲を切り出す。まずは短く切り出しただけのcine形式で一度保存しておくと、後の作業が楽。

いろいろ試したけど、背景をちゃんと白くしていて照明も安定している(蛍光灯などのチラツキない)自分の場合、brightness と gamma は 0 と 1.0 のままにして、gain だけを飛翔体の輪郭がギリギリ見えるまで上げる、というのがよかった。brightness = 0 & gamma = 1.0 の状態でプリセットを保存しておくと便利。

動画の切り出し

avi にする場合はフォーマット選択ダイアログが出てくるので適当に選ぶ。常識的に考えると、最高画質ということで非圧縮だろうか。プレゼン等で見せるためにはファイルサイズ大きすぎ & 重すぎるので、Cinepak などで適当に圧縮したバージョンも作っておくといいかも。非圧縮AVIを適当なコンバータで変換してもいいし。

静止画の切り出し

ビットマップの静止画を切り出して、GIMPとかIrfanとかでバッチ処理したい場合。連番ファイルにするために、ファイル名に +3 を付ける。たとえば N1_cam1_+3.bmp という名前にすると、 N1_cam1_001.bmp, N1_cam1_002.bmp, ... という連番ファイルが生成される。最初はこっちでやって、ガンマとかアンシャープマスクとかかけてたけど、結局 Phantom 内でのシャープネスだけにしたから今はやってない。

[2012-09-04追記]
と思ったがやっぱり使いそうなので、GIMP でのバッチ処理について別エントリを書いた:
GIMPでDBPを使って複数の(連番)ファイルにunsharp maskをかける

DippMotionPRO での作業メモ

フォルダ関係

いろんなファイルを保存したり読み込むダイアログで、デフォルトが

  • 前回の作業フォルダ
  • C:\Program Files\Ditect\DippMotionProKP
  • C:\Documents and Settings\ユーザ名\Application Data\Ditect\DippMotionProKP

のどれか(あるいはその下のフォルダ)なっていることがある。このせいでリンク切れになって「なんか動画動かないなぁ?」とかよくなる。というかこのへんいじったらさっき画像が全部消滅したよ・・・

そこで、DippMotion を起動したらまずメニューの「オプション > 一時ファイル格納場所指定」から、自分の目の届くところにしておく。

それから、エイリアス(ショートカット)から起動する時の「作業フォルダ」に、いま作業中のフォルダの近くを指定していても、開くダイアログ等で「C:\Program Files\Ditect\DippMotionProKP」に飛ばされることがよくあるので、この場所に作業中フォルダへのショートカットを置いておくとはかどる。同様に、マイドキュメントに飛ばされることもある(いま2D座標入力でそうなった…)、ここにもショートカットを置いてもいいかも。

レンズキャリブレーションについて

全部の撮影で同じ組み合わせのはずなので、一度作ったファイル(カメラに対応した3つの .dxc ファイル)を使い回せばいい。理想的には、キャリブレーションフレーム・被写体を撮影したままの条件で、つまり撮影ごとに毎回ドットパタンを撮影するのがよさそう。

既存のレンズキャリブレーションファイルを使いまわす場合は、Dippを開いた初期画面の右にあるアウトラインペインで、それぞれのカメラを展開してから、「キャリブレーションデータ」を右クリックして「ロード」。なぜかうまくロードできない場合があるが、アプリを再起動してみたり、上記の作業フォルダを変えたりしたら直った。

3Dキャリブレーションについて

キャリブーレションパラメタの計算を行ったら、条件が同じ複数回の撮影に使いまわすために、保存しておく。これはカメラごとなので注意。計算方法について、説明書には漸近法の方が良さそうに書いてあるが、少なくともこれまでに行ったケースでは線形法の方が明らかに良かった。計算は線形法が圧倒的に速い。両方試して、よりよさそうな方を使う。

UPDATE 2014-09-06
Win 7 64 bit だからなのか、いつのまにか DLT の係数がプロジェクト保存しても .dxc ファイルにかかれなくなっている (Dipp Motion Pro 2.24d)。どれか、バイナリに保存してるのだろうか?ともあれ、解決策は2つ。ひとつは、3Dキャリブレーションを実行した後で、「オプション > カメラパラメータ確認」の画面を見ること。でも選択できないので手で書き写すことになる。面倒。もう一つは、作業用フォルダを見ること。3Dキャリブレーション実行直後なら、AnaDataCh1 などの中に TmpDXCamParam.dxc というのができており、ここには従来通り [MATRIX] T1=... などがあるので、これを保全すればよい。
と思ったら普通に保存で表示されるようになった。相変わらず挙動がヘンだ…

2Dデータ入力について

基本操作

左手:
  • 矢印の左右キーでコマ送り/戻し
  • 矢印の上下キーで部位移動

右手:
  • マウス左クリックで点を打つ
  • マウス右クリックでキャンセル・終了
  • マウスホイールで画像の上下移動(拡大中)

カメラを開いてからまずやること

-画面下の「画像フィット」チェックボックスを切り、メニューの「表示 > 拡大」から 4x4 あたりを選択
-メニューの「属性 > 座標入力方向の指定」で、デフォルトが「カラム単位」(縦に進む)になっているのを「部位単位」(横に進む)に変更
残念ながら、こういうインタフェース部分の設定は保存されないので、カメラを開くたびに毎回やる必要がある。なぜかカーソルの設定だけは保存されるようだが…。
-「編集 > 部位数の設定」から、部位数を多めに確保する(下記参照)

重要:保存について

2Dデータ入力画面から保存する場合、デフォルトのフォルダは「一時ファイル格納場所指定」の下のフォルダになっている(名前が同じなので騙される)。自分のプロジェクト下のフォルダに保存されるのは、一度2Dデータ入力画面を閉じてホーム画面に戻り、プロジェクトの保存を行った瞬間。もしプロジェクトの保存を行わずにDippを終了すると一時ファイルの方にしか保存されていない状態になる。このままもし他のプロジェクトを開くと、データは全て吹っ飛ぶ。「ホーム画面に戻ってプロジェクトを保存」は癖にしたほうがよさそう(というか、一時ファイルでなく直接保存すりゃいいのか?→と思ったけど、複数のプロジェクトをい行ったり来たりしてる場合は不便なので、やはり「プロジェクトで保存」が現実的)。

重要:部位の数と命名について

メニューの「属性 > 最大表示セル数」から、「部位方向(ライン)」の数を必ず現在の部位数よりも多くしてから、左下の部位名の欄をダブルクリックして命名する。もし、「部位方向(ライン)」の数が現在の部位数よりも少ない場合は、正しく命名できないだけでなく、5つ上の部位名が上書きされてひどいことになる。謎仕様というかどうみてもバグ。とにかく部位数は早めに増やしておくこと。ただ、あまりに多いとアプリの動作が重くなる。カメラ1, 2, 3, ... で共通の部位名を当然使いたいので、早めに使う点を全部決めて、いずれかのカメラの2D座標入力画面において、「ファイル > 部位名ファイル...」から「保存」で部位名ファイル(拡張子 .bui)を保存する。他の2D入力画面で「ファイル > 部位名ファイル...」から「開く」。このとき、既存の部位名は問答無用で上書きされた気がする。

重要:左下の「追尾」チェックボックスについて

修正追尾での挙動はまだハッキリわからないが、ここにチェックが付いているものを優先的に(?)追尾していくようで、間違うと非常に危険。これから打っていく点のみにチェックが付いていることを常に確認すること。ミスるとセーブした時点からやりおなしになる(ので、少なくとも部位一つ終わるごとにセーブ必須)。

チョウの翅の模様追尾について。サインペンなどで打った点を追尾するのとはわけが違う。まずは何度か再生してみて、どういう方向に飛ぶかをつかむ。慣れると自動追尾ができるかどうかだいたいわかる。全部手動でやると、却ってガタガタになると思われる。面倒なようでも自動追尾を併用したセミオート的なのが結局はよさそう。 ←これはなんともいえない。相関係数下げた場合には自動でも揺らいだり、deviation 載ったり(とりたい点よりも「ずっと左に1ドットずれたまま追尾」とか)することはある。

常時修正追尾で行う。右手はマウス、左手は矢印の左右キー。通常は自動でやって、追尾できない部分はどんどんとばして、とにかく最後までいく。それから必要に応じて、追尾方向を逆(巻き戻し再生)にしたり、手動で打ったりする。あと、テクニックとして、「1ピクセルだけ間違った点に打ったかも」というときは、マーカ自体のせいで見えないので困るが、いちいち削除するのは時間がかかるので、一旦手動に切替えて画面上の適当なところをクリック、で再度自動に変えて正しい点をとり直すと若干早い。

自動での、相関の閾値は取る点の目的と要求される正確さに応じて変えるが、基本的には 0.9 で初めて、進まなくなったら 0.85 とか 0.8 まで下げる。探索範囲については、XY方向へのベクトル的なものを指定する「指定方向」を推奨。ただし、追尾点の移動方向に合わせてときどき微調整が必要。追尾範囲(赤の四角)は小さめにしたほうが高い相関値でもうまく追尾できることが多いようだ。

拡大表示で打ちたいところに打つためには、カーソルの中心を打ちたいピクセルに完全に重ねるのではなく、0.5ピクセル程度(?)左上にずらすように打つ必要がある、ようだ(キャリブレーション時は逆に右下にずらす必要がある…なんなのこれ…)。

ポイント表示モードについて。最初は「全ポイント表示」で打っていく。混んできて見づらくなったら「ポイント表示」も併用。「軌跡表示」も、ガタつきを見つけるのに便利。ある程度打ったら切り替えてチェックするといい。

削除

メニューの「編集 > ポイントの部分削除」から。このソフトウェアにUndo 機能は存在しない(これ…商用ソフトなんだぜ…)ので、削除は慎重に。間違っても上の方の「座標データの全削除」や「部位の削除」をやってはいけない。特に後者は「ポイントの部分削除」と近いので要注意。たぶん誰もが一度はやると思う。けっこう泣ける。メニューのUI作った人に軽く殺意を覚える。というかメニューだけでなく全体に(ry

3D再構築したとき

「すべて」で表示したときに、なぜか2Dとの同期再生ができなかった。2D解析結果を一つ(カメラ1でよさそう)開いて、めんどうだけどメニューから画像と2D座標ファイルを読み込む。それから閉じてまた「すべて」を開くと、なぜか他のカメラも含めてうまく同期再生できてた。謎だ・・・。

カメラ2台以上で追えていない(入力していない)時刻があったら、その時刻は点が消える。変なところに飛んでいたら、キャリブレーションがおかしいかもしれない。あと、そもそも同期撮影した画像でなく、カメラごとに別のケースを使っていたという場合も…(「すべて」表示にすれば変だとすぐわかるはずだが、「3Dのみ」にしてると気づきづらい)。

No comments: