ImageJマクロを使う」シリーズでは、ImageJを使って生命科学系の画像解析をするにあたって必要な知識をまとめていきます。
今回は、マクロを使って解析した結果に名前をつけるをできるようにしていきます。
基本的には、ファイルリストを取得して文字列をいじるだけなのですが...
この次にやるfor文の確認にもなるので先に、保存名の設定をしていきます。
「細胞の核を数える」シリーズで描いたフローチャートの「ココ」の部分をやっていきます。
ImageJマクロで画像の名前を取得して開く
「ImageJマクロを使う #5」でフォルダ内のファイルリストの取得ができるようになりました。
ファイルリストが取得できれば、ImageJで画像ファイルを開くことができます。
画像ファイルを開く関数は"open"。
NIHのImageJマクロ関数のページによると、使い方はこのような感じ
"open"関数を使って画像を開いてみましょう。
open関数の引数のpathは、選んだディレクトリのpathとファイルリストの「◯番目」合わせて指定して開いています。
無事に開くことができました。
次に簡単な解析をして、その結果を表示させてみます。
解析結果を保存するマクロを記録する
今回想定した解析はこちら。
※細胞を計数シリーズの最初の戦略のコードです。(このコードではデフォルトで入っている"Watershed"を使っていますが、最終的にはプラグインである"Interactive Watershed"を使った解析にしていきます)
この方法を、マクロを使って記録します。
記録してできたコードはこちら。
記録したコードを編集できるようにしておきます。
編集できるようになったら、記録したコードを「コメントアウト」してわかりやすくしていきます。
一行の場合は「//」を前につけます。
複数行コメントアウトする場合は、「/*」と「*/」で挟みます。
結果を保存する関数は"saveAs"。
saveAs関数の使い方は、
今回は、Summaryウィンドウに表示された結果をcsvの形で保存していきます。
二番目の引数(path)の、最後の部分がファイルの名前になっていることがわかります。
pathの部分をどうにかすれば保存するファイルの名前を変えることができるのです。
解析結果の名前をImageJマクロを使って設定する
解析した結果を、「画像ファイルの名前+count_result」として保存することにしましょう。
戦略としては...
- 現在開いている画像ファイルの名前を取得する
- 拡張子の部分を削除する
- "_count_result"を付けくわける
では、一つずつ見ていきましょう。
今、開いている画像ファイルの名前を取得する関数"getTitle"
開いている画像ファイルの名前を取得する関数は、"getTitle"です。
使い方は...
実際に使ってみましょう。
開いている画像の名前を取得できました。
拡張子の部分を削除する
画像の名前を取得できたので、拡張子の部分を削除していきます。
ファイルの名前の、どこに拡張子が出てくるのか検索する方法として2パターン考えられます。
一つ目は、「ImageJマクロを使う#4」で使った、split関数とreplace関数を使う方法。
もう一つは、indexOf関数とsubstract関数を使う方法です。
今回は、この方法をまとめていきます。
大まかな戦略は、
indexOf関数とは、
substring関数とは、
indexOfとsubstring関数を使って拡張子を取り除くコードを書いていきます。
結果を見てもやっていることはよくわからないですよね。
まず、結果の一行目に出てきた「20」の意味はこちら。
substring関数で実行されていることは、
です。
"_count_result"を付け加える
拡張子を削除した状態の文字列が変数"sub"に入っているので、subに文字列"_count_result"をくっつけたものを新しい変数に入れていきます。
"saveAs"関数の第二引数に入れる
saveAs関数の引数に、新しく作った変数を入れていきます。
saveAsの第二引数は"path"の形にしなければならないので、ファイルを保存するフォルダのパス+保存する名前+拡張子の形にします。
解析結果を名前をつけて保存するマクロを動かしてみる
今回作った簡単な解析マクロ、「画像を開く」→「解析する」→「結果を保存する」を動かしてみましょう。
マクロの全体像はこんな感じです。
結果は...
画像ファイルと同じところに、結果が保存されました。
動画を撮ってマクロがどれくらいのスピードで動くのかお示ししたかったのですが、動画編集スキルがあまりないので動画はもうしばらくお待ちください...
このマクロの問題は、画像や解析結果が開かれっぱなしなのでディスクトップが画面だらけになってしまうところ。
for文でたくさんの画像を解析していったら画面が大変なことになってしまいますね...
次回は、このマクロを使ってfor文を書いてきます。
参考文献
ImageJ macroの覚書 拡張子をのぞいたファイル名の取得