「【ImageJ】細胞の核を数える」シリーズでは、ImageJのマクロを使って細胞の計数を自動化することを目標にしています。
どんな方法を使って解析するのか?の方針は立てられました。
この記事では、マクロを作る前に具体的にどんな手順にするか?をフローチャートに起こしていきます。(プログラミングでは手順をフローチャートに起こすことでコードをシンプルにできるようです...)
今は小学校からプログラミングの授業があるようなので、羨ましい限り!
実際にフローチャートを書いてみる
フローチャートの書き方がイマイチよくわからなかったので、こちらのサイトを参考にしました。
フローチャートを書くときのルールは色々あるようなのですが、今回書くにあたって気をつけたことは、
- 処理は長四角、判断はひし形で示す
- 開始と終了の形は統一する
- 矢印と矢印は交差しないようにする
- 上から下、左から右へ流れるようにする
です。
まず手始めに、解析の手順をフローチャートに起こしてみたいと思います。
解析手順を箇条書きにすると...
- 画像を読み込む
- 8-bit画像に変換する
- Interactive Watershedでパラメータを設定して分割
- 分割された画像をAnalyze Particles...で計数
- 計数結果をcsvファイルに書き出す
です。2-4のステップをフローチャートにすると下のような感じです。
2-4の解析の手順は、基本的に「処理」のステップしかないので、シンプルですね。
このステップは、マクロを記録したときに大体は完成している部分です。
では2を「解析」と単純化して1-5のステップのフローチャートを書いてみます。
考えなければならないことは...
「画像を読み込む」ステップでは、どのようなフォルダの構成になっているのか?です。
- 解析フォルダの直下に写真が入っているのか?
- 解析フォルダの下にサブフォルダ(条件によって分けている)があって、その中に写真が入っているのか?
場合によって異なるのではないかと想像できます。
「計数結果をcsvファイルに書き出す」ステップでは、どこにファイルを保存するのか?です。
結果を入れるフォルダを作っておくプログラムにできたら便利ですよね!
上のことを考えて作成した最初のフローチャートがこちら
細胞を計数したデータだけではなく、どの領域を選択して計数したか?の結果も残しておきたかったので、ROI(Region of Interest)の結果を保存するフォルダも作るようにしました。(できるかどうかはやってみないとわかりませんが...)
基本的なプログラムの流れはできました。
作ったフローチャートをブラッシュアップする
「解析」以外のところはマクロができていないので、どのように作っていけば良いのか?もう少し詳細に調べてわかったことをフローチャートに書き込んでいきましょう。
どんな関数を使えば良いのか?ImageJの日本語版マニュアルを見てもよくわからなかったので...独自で調べて使えるものをリストアップしていきました。
例えば...
画像があるフォルダを指定するときには「getDirectory」という関数を使うようです。
サブフォルダがあるかどうかの判断は、「if文」を使います。
ディレクトリのアドレスを取得したときに"/"が最後にあるかどうか?でサブフォルダがあるかどうかが判断できるようです。
「解析」〜「計数結果をcsvファイルに書き出す」ステップは、画像の枚数だけ繰り返し処理することになります。
そんなときには「for文」を使っていきます。
プログラミングの「関数と変数」については、こちらの記事にまとめています。
for文やif文については、こちらの記事にまとめています。
割と具体的なところまで、方針が決まったので次は一つ一つ形にしていきたいと思います。
今回、参考にさせていただだいたサイト様はこちら。
ゴロ理の雑記ブログ【初心者】画像解析で楽しよう!大学院生がすすめるImageJでのマクロ(自動化)の組み方
大阪大学 大学院工学研究科 精密科学・応用物理学専攻 山内研究室 #04 ImageJで簡単なマクロを作る
ImageJ macroの覚書 フォルダ内への自動処理
ImageJ macroの覚 拡張子をのぞいたファイル名の取得
Wet研究者がコスパ良く手抜きをするためのimageJマクロ