UMATracker Manual

FilterGeneratorの使いかた

FilterGeneratorでは、位置座標を抽出したい物体の場所が白くなる動画フィルタを作成することが目標です。下の画像のように、"フィルタをかけた後の画像"で白い場所は、"元の動画"でアリのいた場所です。この様な画像になるまで、フィルタを変化させていきます。


キャンバス(フィルタ群の作りかた)

キャンバスにフィルタ群を作る。フィルタツールチップ内のフィルタブロックをinputとoutputの間にドラッグアンドドロップすることで、フィルタ群が作れる。

起動時のキャンバスの画面

起動時には、OutputブロックとInputブロックのみが表示される。inputはソフトウェアに読み込ませた動画像のことをさしている。inputブロックはこの動画像を出力するフィルタである。Outputブロックには、フィルタ操作を行ったフィルタ群を入力する。こうすることで、フィルタを付けた変化が"フィルタを掛けた後の画像"に表示される。 起動時の"フィルタを掛けた後の画像"は、キャンバスにInputブロックがOutputブロックに接続されているので、動画ファイルの内容そのもの(無加工)の画像が表示される。

キャンバスには、OutputブロックとInputブロックが必須となる。これらのブロックはフィルタツールチップの"I/O"の中に入っている。

フィルタの作りかた

これは、インプットブロックにBGRToGrayフィルタを繋げた状態である。Inputブロックは、読み込ませた動画像を出力する。Inputブロックに、BGRToGrayフィルタがつながっているので、Inputブロックを入力として受ける。その後、GrayScale画像に変換し、出力している。しかし、出力を受けるブロックがないので、"フィルタを掛けた後の画像"は変化しない。

上のフィルタをOutputブロックに繋げると、"フィルタを掛けた後の画像"に黒白の画像が表示される。これは、BGRToGrayブロックの出力先がOutputブロックになったことで、フィルタがただしくどうさするようになったからである。

フィルタ群例

  1. Inputブロックは入力した画像のこと
  2. Inputブロックは入力した画像/動画像のこと。

  3. Inputブロックからは入力した画像が出力される
  4. Inputブロックからは入力した画像が出力される。それを受けたBGRToGrayブロックは、入力画像を黒白にする処理をかけた画像を出力する。

  5. BGRToGrayブロックから出力された画像がOutputブロックに入力される
  6. GrayScale画像になった結果が出力される。

  7. Outputブロックに入力された画像が"フィルタを掛けた後の画像"に表示される
  8. この例では、GrayScale画像になった入力画像が入力される。つまり、"フィルタを掛けた後の画像"は、入力した動画像がGrayScale画像になっている。 Outputブロックがキャンバスに存在しない場合、"フィルタを掛けた後の画像"には正しい結果が表示されない。


フィルタブロックの削除方法

不要になったフィルタブロックを削除するには、"フィルタツールチップ"または、"キャンバス"にあるゴミ箱にフィルタブロックをドラッグ&ドロップすれば良い。"Inフィルタ"と繋った状況でも複数のフィルタブロックを削除できる。

エラーが起きる場合

  1. Outputブロックと他のブロックが離れている場合。
  2. 他のブロックと繋っていないフィルタブロックがある場合

背景生成(Background Create)

動画から物体抽出を行う際に、背景を元の動画から削除する方法がある。この方法を使えば楽に追跡したい物体を抽出する事ができる場合が存在する。

背景を生成するには、まずMenuの、"Background"から"Create"を選択する。

その後、まず、SetMinボタンを押す。そして、Generateを押すと背景が生成される。 背景生成の為に使用されるフレームはスライドバーに赤く表示される。最初にSetMinボタンを押すと、最後のフレームまで選択される。 以上の操作をした後に再生ボタンを押すと、背景除去後の結果が得られる。

Frame:は、何フレーム毎に背景に使用するかを決定する。Frame:1であれば全ての画像データを背景生成に使う。Frame:10であれば、10フレーム毎の画像から背景を生成する。Frame:の数が大きくなればなるほど、生成にかかる時間は減少する。しかし、十分な量の画像から背景生成を行ったほうが良いので、10程度を指定すればよい。極めて動画の時間が巨大な場合は、Frame:の数を大きくすれば背景の生成が早く終わる。

背景生成を行うと、Outputブロックからは、背景除去後の動画データが出力される。

SetMinとSetMaxの意味。

背景を生成するさいに余分なデータをへらすために、設定を行う。つまり、動画の最初の時刻では人が操作を行っていて、追跡したい物以外が写っている場合がある。このような画像を背景生成に使用してしまうと、背景除去の効果がなくなる場合がある。そのため、余計な物が写ったフレームを排除するため、SetMinFrame,SetMaxを押して、どのフレームを使用するのかを決定する。


フィルタ例

追跡物体に色が無いとは、BGRToGrayブロックでGrayScale変換した場合とカラー画像の状態が殆ど変化しない映像のこと。アリやゼブラフィッシュの動画は色が無いものといえる。

追跡物体に色が有るとは、実験対象にペイントやカラーシールをはった状態の事。

追跡物体に色が有る場合、範囲指定のブロックを追加した後、ColorDistanceブロックを使用する。色を選択した後、BGRToGrayブロックでGrayScale画像に変換する。その後、細かなノイズを消すため、ThresholdブロックとErosionブロックを使う。 このフィルタをダウンロードする

追跡物体に色が無い場合、ColorDistanceブロックの無い状態でフィルタを構成すればよい。 このフィルタをダウンロードする


FilterGeneratorの画面

UMATracker-FilterGeneratorを起動すると下記の画面が現れる。主要な機能について説明する。

FilterGenerator起動画面
  1. フィルタツールチップ
  2. フィルタブロックの一覧が表示されるツールチップ。フィルタブロックは入力画像を変化させるフィルタのことです。 ブロック毎に入力画像に与える効果は変化します。

  3. フィルタブロック
  4. このブロックをドラッグアンドドロップし、キャンバスに配置することでフィルタ群を作成する。

  5. キャンバス
  6. フィルタブロックを配置し、フィルタ群を作成する場所。

  7. 入力した画像
  8. 読み込ませた動画が表示される。FilterGeneratorを起動した直後には、足の模様が表示される。

  9. フィルタを掛けた後の画像
  10. キャンバスに設置したフィルタ群を入力した動画に適応した結果が表示される。


フィルタブロック

フィルタブロックは大別すると3つに分ることができる。入力ブロック、入力/出力ブロック、出力ブロック。これら3つを組合せることでフィルタ群を構成する。

  1. 入力ブロック
  2. またはのかたちのついたブロックを入力ブロックと呼びます。 入力のみを受け付けるフィルタです。出力はありません。 例えば、"Output","Variable"ブロックなどが入力ブロックに当る。

  3. 入力/出力ブロック
  4. のかたちのついたブロックを入力/出力ブロックと呼びます。 入力と出力の両方を供えたブロックです。入力ブロックにフィルタをかけた物を出力します。

  5. 出力ブロック
  6. のかたちのついたブロックを出力ブロックと呼びます。 出力のみを行うブロックです。 I/O -> Input、Mask Image -> "Circle"ブロック、Mask Image->"Rectangle"ブロック等のことです。

フィルタブロックの側に並んだブロックをInフィルタ、側に続くブロックをOutフィルタと呼ぶ。

フィルタブロック例


動画を読み込む

まず、動画ファイルを読み込みます。動画のファイルをFilterGeneratorにドラッグ&ドロップする。

動画ファイルが読み込まれ、"入力した画像"が変化します。


FilterGeneratorがあつかう画像の種類

FilterGeneratorでは3つの画像を扱うことができる。言い替えれば、フィルタブロックにはそれぞれの種類の画像を出力する。

  1. カラー画像
  2. カラー画像は、RGB三色で表現された画像のこと。Inputブロックは、カラー画像を出力するブロック。

  3. GrayScale画像
  4. カラー画像を白いろから黒色までの明暗のみで表現した画像。BGTRoGrayブロックを使うことで、カラー画像からGrayScale画像に変換できる。

  5. 黒白画像
  6. GrayScale画像を黒色と白色のみで表現した画像。 最終的なOutputは黒白画像であることが必須。 位置座標を抽出したい物体の場所が白くなるように調整を行う。

カラー画像から、GrayScale画像に変換。最終的に黒白画像になるようにフィルタを調整する。


フィルタの基本的な構成手順

フィルタを構成するには、BGRToGrayブロックとThresholdブロックを必ず使う。BGRToGrayブロックは、カラー画像からGrayScale画像に変換させる為に必要。そして、Thresholdブロックは、GrayScale画像から黒白画像に変換する際に必須である。フィルタは、黒白画像になるようにしなければならない。

まず、撮影した画像を確認して、動物が写っている範囲を確認します。動物が写っている範囲の中に容器の縁や他の物体が写っているなら必ず範囲指定のブロックを使用します。RectangleSelectionブロックかCircleSelectionブロックを使います。

次に、追跡したい物体に色がついているかどうかを確認します。色がついているなら、ColorDistanceブロックを使います。

色で識別できない場合も、識別出来る場合も、BGRToGrayフィルタを使いGrayScale画像に変換します。

その後、閾値フィルタを使い色の濃さによって物体を抽出します。

最後に、追跡したい物体以外にノイズがかかっている場合、Erosionブロックを使用します。

ノイズについて

動画ファイルには、ノイズが必ず含まれる。ノイズの原因は、観察者の移動などで発生する照度の微妙な変化・実験環境に含まれる微妙なチリ・動物の糞など様々である。これらのノイズを極力(完璧に)消してからトラッキングアルゴリズムを動作させなければ、自動トラッキングに失敗する。

ノイズアリ

ノイズの残った画像。この状態で次の工程に進むとミストラッキングが増え、修正回数も増える。

ノイズナシ

ノイズの無い状態。

Erosionブロックを使ったノイズ削減

最も簡単なノイズ削減方法は、Erosionブロックを使うことである。このフィルタをダウンロード

Thresholdブロックを使用した後の状態。画像の何ヵ所かに白い点が残っている。動物個体以外の点がノイズである。このノイズはErosionブロックを追加すると消せる。

Erosionブロックを使用した後の状態。画像の何ヵ所かにあった白い点が消えている。この状態になるまで、ErosionブロックとThresholdブロックの数値を変化させる。

BlurFilterブロックを使ったノイズ削減

Blurブロックを使えば、小さな白い領域は、黒色に近い色にニジム。一方で、白い大きな領域の中心は白色をたもち続ける。この性質をThresholdブロックと共に利用すると、ノイズが削減できる場合がある。このフィルタをダウンロード