インターバル撮影から送粉昆虫の訪花のタイミングを検出するImageJマクロ
近年、比較的安価な機材で長時間のインターバル撮影やビデオ撮影を行なうことが可能になってきた。送粉生態学の分野では自動撮影装置を多数設置して撮影することで、これまで得るのが困難だった莫大なデータを比較的容易に得られるようになった。しかし、そうして得られた莫大な写真を目視で一枚ずつ確認し送粉昆虫の有無を調べていくのは、莫大な時間が必要になる。そこで、ImageJのマクロ機能を利用して、花のインターバル撮影から昆虫の写っている写真を検出する方法を考案し、誰でも利用可能なmacroを制作したのでここに公開する。解析を省力化するmacroの配布と必要なソフトウェアやプラグインの入手と使用方法について紹介する。
Download
Download macros beta ver. (http://www.nurs.or.jp/~str/imagejmacro/macros.zip)
Download macros beta ver. (Google Drive)
Download macros beta ver. mirror1(https://sites.google.com/site/suetsugujp/macros.zip)
この2つは同じものなのでどちらか一方からダウンロードしてください。
参考論文
このマクロを使って論文を書いた場合は以下の論文を引用してください。
Yuta Nakase & Kenji Suetsugu. Technique to detect flower-visiting insects in video monitoring and time-lapse photography data. Plant Species Biology. 2015. early view.
準備するもの
まずは解析したい写真を用意する。写真ごとの撮影条件のばらつきはそのまま計測する数値のノイズの量になって現れるため、なるべく同じ条件で撮影された写真(フラッシュの強度、ISO感度、ピント位置等)、風などによる動きの少ない被写体、変化の少ない背景であることが望ましい。撮影に用いる装置の特性を理解して適切な条件を検討しておくと、解析が容易になるだろう。
画像ファイルはImageJで読み込める形式の画像であれば何でもいいが、時系列に対応する連続番号であることが望ましい。解析するための写真を単一のフォルダに入れる。フォルダ内に画像ファイル以外のファイルが入っているとエラーが出て止まるので、フォルダ内には解析に使う写真だけを入れる。
ソフトウェアの取得とインストール
ImageJ のインストール
ImageJはフリーソフトなので、無料で使うことができる。ImageJ のサイト(http://imagej.nih.gov/ij/)からダウンロードする。Windows用、Mac用、Linux用がある。使用しているパソコンに適したものをダウンロードしてインストールする。
Windowsの場合
Windowsの場合は64bit用と32bit用があるのでパソコンのビット数を確認して、正しい方をダウンロードし、インストールする。インストールされたImageJを開始すると、以下のようなツールバーが表示される。
Edit>Options>Memory & Threads... で使用メモリを確認し、低めに設定されている場合には増やしておく。システムに導入されている量と同じか、少ない値のRAMを入力する。ここの数字は1G(1000MB) 程度あればよい。
プラグインの取得とインストール
次に必要なプラグインのインストールをする。今回作成したマクロを使うには画像の自動整列をTurboregとStackregという既製のプラグインで行う。そのプラグインを事前にインストールする必要がある。Turboreg (http://bigwww.epfl.ch/thevenaz/turboreg/)とStackreg(http://bigwww.epfl.ch/thevenaz/stackreg/)という2つのプラグインをダウンロードして解凍する。解凍して出てきたTurboregとStackregという名称のフォルダをImageJのpluginsというフォルダに入れる。ImageJを起動するとプラグインがインストールされた状態になるので、ImageJを一度終了したのちに再度起動してTurboregとStackregがインストールされたことを確認する。
マクロの取得とインストール
このページ上部の“Download”からmacros.zipをダウンロードして解凍する。macrosというフォルダが出てくるのでそれをImageJのmacrosというフォルダに入れる。
このフォルダにはpollination_measure.txtというファイルとpollination_macrosというフォルダが入っている。pollination_measure.txtは背景の切り抜きなどの調整が不要な写真であればフルオートで計測値を出すところまでやってくれる。pollination_macrosフォルダ内にはmacro_binning_22_ave.txt, macro_binning_33_ave.txt, macro_binning_44_ave.txt, macro_crop.txt, macro_measure.txt, macro_subtraction.txtが入っている。ImageJを起動してPlugins>Macros>Run…でpollination_measure.txtを選択して実行すると選択画面が出るので計測したい画像が入っているフォルダを選択する。自動的に細かいズレを自動修正しながら画像を差分画像に変換し、計測する。あとは計測値を保存してエクセルやRなどで処理してグラフ化すれば、動体が写っている可能性のある画像が分かるので、送粉者が来ている写真の絞り込みができる。
それぞれの処理を1つずつやる場合、あるいは別の用途に一部の機能だけを使用する場合、論文添付のマクロを個別に順番に実行する。それぞれマクロで調整しながら処理する場合は
binning (resize) > align & subtraction > trimming (removing background) > measure
の順で処理することになる。
Resize (macro_benning_XX_ave.txt)
パソコンのスペックが非力な場合は必要に応じて画像の縮小処理を行う。送粉者のサイズにもよるが100万画素もあれば充分なので100万画素程度になるように縮小サイズを選ぶ2x2のビニングで縦横のサイズを半分にするので画素数は1/4になる。3x3だと1/9に、4x4だと1/16になる。人力で画像を送りながら送粉者が写っている画像の拾い出しをする場合でも100万画素程度まで縮小すると画像表示の処理が軽く、パソコンの動作がスムーズになるので有用である。1万枚以内であれば縮小して人力で確認しても良い。
Subtraction (macro_subtraction.txt)
2枚の画像を重ねあわせて位置合わせを行って、差分画像を作る。(画像処理と保存サイズの関係から、差分の絶対値を取得している)。これにより、2枚の写真が同一である部分は暗く、異なっている部分は明るく表示される。風による揺れや多少のズレなどは位置合わせソフトによって自動的に修正される。
Cropping (macro_crop.txt)
差分画像をトリミングして不要な背景をなくす。特に必要ないこともあるが、位置合わせの際に画像の端がズレた場合は白い枠がつくことがあるので、トリミングを行なって枠を除く。Plugins>Macros>Recordで動作記録用のウインドウを出し、ビニング済みのファイルを1つImageJで開き、長方形選択ツールで目的の被写体をやや余裕をもって選択する。記録用のウインドウに出た数字でmacroのmacro_crop.txt内の数字を置き換える。円形ツールや不定形の選択ツールも使用可能。その場合、トリミングは長方形になり、残った選択範囲外のエリアは黒く塗られる。背景の処理が難しくノイズと送粉者の区別が難しい場合、このマクロで背景をできる限り切り取ることでノイズを低減して送粉者を検出しやすくできる。
計測 (macro_measure.txt)
最後にできたCutフォルダを選んでmacro_measure.txtを実行するとグレー値に関するさまざまな値が記録される。File > Save as ... で保存するとエクセルファイルとして保存される。(ファイル形式がおかしい場合はメニューから保存ファイルの設定を修正する)。これで出てきた数値を使ってグラフを書くなどして、動体の有無を判別する。使用した写真により数値の扱い方は様々だが、よく使う簡単な例を以下に示す。
標準偏差 (StdDev)、平均値 (Mean)
標準偏差は明らかに平均値の影響を受けているので、変動係数(標準変数/平均値)を算出して用いる。写真に写っているものが大きく変化すると変動係数が大きくなるので前後の写真と比較して動くものが写っている指標として使うことができる。
尖度 (Kurt)
Kurtosis(尖度(せんど))はヒストグラムの形を表す要素の1つ。ピークの鋭さと裾の重さを表す。小さくとも動体があれば裾が重くなるので尖度が大きくなるため検出力は高い。
最大値 (Max)
1ピクセルでも白があれば上限か下限に張り付くので小さな動体にも敏感に反応するが、ノイズによる影響も大きい。解析に使う画像サイズが極端に小さな場合や対象物にピントが合っておらず不明瞭な場合など、他の検出方法が使えない画像でも動きが検出できる可能性がある。
他の値は撮影した2枚の画像の撮影条件のズレや被写体のブレなどに由来するノイズの大きさの指標などとして使えるだろう。このマクロで出力するのは計測値までであり、計測値を選んでグラフを書いて判断することで動体の検出を行なうというやや面倒な方法をとっている。しかし、このことで、動画の全フレームを画像に変換したものから数十秒、数分に1枚の間隔で撮影されたインターバル撮影の被写体までさまざまなデータに利用できるようになっている。検出すべき動体のサイズ、ノイズとなる背景の動体もデータによって千差万別であるため、最終的な検出まですべて自動化するのは難しい。
動画を扱いたい場合
ImageJ自体は動画も扱えるのでマクロを少々書き直してやるか、それが面倒であれば別のソフトウェアを使って連続した画像ファイルに変換すると、解析可能になる。MacだとiMovieで一気に画像に変換でき、オプションで分割時間を設定できる。Windowsでも同様のフリーソフトはいくつもある。