動画解析の例(液滴の追尾)
ここでは動画解析の事例として上に示した動画,特に油滴の追跡を行います.
まず以上の動画だけでは大きすぎるのでImageJに読みこませた後,不必要な場所を消去しましょう.このような不要な部分の消去は記憶容量の節約のみならず,迅速な解析にもつながります.出来るだけ不要な部分は消すように心掛けましょう.
まず,メニューバーいちばん左の四角形を用いて液滴が動きまわっている部分を選択します.
次にImage>cropを選択し,四角形の外部を消去します
すると,以下で見られるような液滴の運動する部分のみ取り出した動画になります.この周囲を消去した状態のaviファイルをこのページに添付してあります.もしも以降の作業を実際に試してみたい方は,ダウンロードしImageJに読みこませて試してみてください.
さて,この動画で油滴だけを取り出した映像を作りましょう.最も良い方法は,あらかじめ撮影しておいた背景画像(油滴のいない画像)と動画の引き算を行い,油滴のみを取り出すことですが,多くの場合背景画像を取れないこともあります.ここで,油滴は常に動きまわっているので,動画の平均を作成すれば油滴の部分が薄くなって,ほぼ背景画像となりそうです.実際にやってみましょう.
まずImage>Stacks>Z Project..を選びます.
そして,Projection TypeをAverage IntensityにしてOKをしましょう.
すると以下のような画像が得られます.
見事に,液滴の部分が消えた背景画像となっています.
次に,動画と背景画像の引き算をしますが,bmpの仕組みとして,明るい部分のpixelは大きい値を持っているため,黒い液滴は背景に比べ小さな値のpixelを持っています.そこで,追跡対象が背景よりも明るくなるよう,画像の反転を行いましょう.
まずは動画を選択し,Edit>Invertとします.すると以下のような動画が得られます.
更に,先ほど作成した背景画像も反転し以下のような画像を作成します
確かに,追跡対象の油滴が背景に比べ明るくなっています.
では次に,動画と画像の引き算を行います.
画像同士の演算は,Process>Image Calculator .. で行えます.
Image1として動画, OperationをSubstract, Image2として背景画像を選択して,OKをしましょう.ちなみにImageJに割り当てられているメモリの容量が限界に近い場合 Create new windowのチェックは,はずした方がいいかもしれません.
すると以下のような動画が得られます.
油滴のみが浮き上がって見えているのが分かるでしょうか?ほぼこれで追跡可能なところまで来ましたが,少し遊んでみましょう.
液滴の足の部分を以下のように選択し,Image>Stacks>Resliceを選択してみてください.
そして,以上のようにメニューを選択します.
すると以下のような画像が得られます
これは,液滴の足の部分の横一列のpixel達を,各時間ごとに拾い出し上から順番に下までつなぎ合わせたものです.液滴が時間がたつにつれ左へ右へと往復している様子が理解できるでしょうか?このような図は時空間図と呼ばれ,動いている様子を静止図に示す時に有効な方法となっています.また下のスライダを左から右へとずらすと,横一列の横一列のpixel達を拾い出す高さが変わっていきます.少し混乱しやすいので,何回か試して実感してください.reslice(切りなおす)というのが時間と空間を切りなおすという意味がわかると思います.
さて,液滴の追跡に戻りましょう.コンピュータに追跡を依頼するに当たって,コンピュータに追跡対象の輝度を教えてあげなければなりません.そこで次に,画像にたいして敷居値を与えてあげます.
Image>Adjust>Threshold ...を選択して,
スライドバーを適切に選択して,液滴のみが赤く表示されるようにし,Applyを選択します.これにより追跡対象のpixel値が決定され,その範囲にあるpixelの値は黒(0)周囲は白(255)に設定されます.
結果得られる動画を以下に示します.
ここまで来るとあと一息ですが,端っ子の方に小さなドットがちらちらしています.本来はこのようなゴミを消さなくてはならないのですが,これらのゴミの見た目のサイズが液滴の面積(200ピクセル程度)に比べ小さいので,追跡対象のサイズを指定することで何とかなります.それではさっそく追跡してみましょう.
まずAnalyze>Set Measurements ..で測るものを選びます.
ここではArea(面積)とCenter of mass(重心),Display label を選んでおいてOKにしてください.
とうとう追跡を行います.Analyze>Analyze Particlesを選択してください.
液滴の見た目の面積が200程度よりは大きかったので,ゴミも100 pixelは無かろうということで,追跡対象は面積100 pixel以上の全てとしました.またShow: Masksとして追跡対象の動画も吐き出しています.
すると以下のようなウィンドウが現れます,
これが,液滴の追尾したデータです.XMがある時刻でのX方向(横方向)の重心,YMがある時刻でのY方向(横方向)の重心です.Y=0は上で下に行くとYが大きくなることに注意してください.
こちら実は冒頭のピペットの場所も記録されているため本来600枚の画像で600点のデータなはずが4点ほど余計なデータが入っています.こちらは動画と照らし合わせればすぐに取り除くことができます.
念のため追尾後のデータもResults.txtで添付しておきます.ご確認ください.
他にもImageJは既にあるpluginを用いたり,javaでpluginを作成することで様々なことが可能です.色々試しながら徐々に慣れてみてください.