総括① ImageJマクロ言語による画像処理―画像の基礎から二値化処理まで―

多くのライフサイエンスの研究領域では顕微鏡で撮像した画像から輝度値や面積など各種統計量の計測や画像に写っている細胞数や粒子数の計数化などの定量化がImageJを用いて行われています。 ImageJマクロシリーズの記事では、このようなライフサイエンスの研究で実際によく使われる画像処理をマクロ言語で自動化することを目標に学習を進めてきました。本稿では総括①としてImageJのマクロ言語を用いた画像解析の学習シリーズ1~5までで学んだ内容をまとめました。

目次

【画像に関する基礎知識】

 画像とはデジタル画像を構成する最小単位であるピクセルとよばれる正方形の集合体です。このピクセルは位置 (座標) と明るさを示す値である輝度の情報をもちます。ImageJで画像を開き、カーソルを画像にもっていくとx=□、y=□、value=□という数値が表示されますが、これはx,y座標と輝度値 (value) を示しています。  画像の座標は図のように左上が原点 (0, 0)になり、右にX軸、下にY軸が伸びます。各ピクセルの位置を示す座標は画像処理を施すための重要な情報になります。


【Macro (マクロ) とは】

マクロとは自動処理用開発言語のひとつです。マクロを使ってその画像に施したい処理を記述することにより、コンピューターが自動的に画像処理を行います。さらに作業記録をスクリプトとして残すことができるため画像に施した処理の内容を保存したり、画像処理の再現性を確認したりするのに非常に役立ちます。
(マクロの言語のまとめについてはこちらを参照👉https://lp-tech.net/articles/q0ii2)

※ImageJによる画像処理の作業記録を残す方法

①図のようにメニューのPlugins→Macros→RecordをクリックするとRecordsという新しいウィンドウが表示される。
②Recordの隣にある言語の種類からMacroを選択する。
③このRecordウィンドウを表示した状態で対象となる画像に処理を手動で施していくと、その処理がこのRecordウィンドウにマクロ言語で記述されていく。
④最後に右上のcreateをクリックすると書かれた内容を新しいファイルとして保存することができる。

【研究で使われる画像解析】

冒頭でも述べたように実際の研究では実験で得た画像から輝度値、面積などの情報を取得したり、細胞や粒子の個数をカウントするなどの解析が行われています。

① 統計解析

輝度とは単位ピクセルあたりの明るさを示す値です。8bit画像では0-255までの256段階の数値で表現されます。画像解析においては面積や粒子数などと並び重要な測定値です。ImageJでは輝度値をはじめとして面積、長さなどの測定が可能です。

② 二値化処理

解析対象の画像に対してある輝度値を基準 (閾値) としその閾値以上の輝度値を示す画素値を1、閾値以下の輝度値を示す画素値を0に変換し、画素値が0と255 (あるいは0と1) の2つの値しかとらないように処理を施す操作のことを二値化といいます。二値化処理を施した結果、画像は白と黒の2色だけで表示され、領域分割ができます。

【ImageJの使い方】

 これまでに学んだ画像処理の概要をまとめました。記載されていない詳細な設定や各ステップでの説明は対応するリンク先の記事を参照してください。

① 背景の設定

メニューのProcess→Binary→Optionsをクリックし、Binary Optionsという画面を表示させる。 対象画像の種類により設定が異なることに注意!

蛍光画像👉Black Backgroundに✓を入れる
組織染色画像(明視野画像)👉Black Backgroundに✓を入れない。

原理と解説はこちら👉https://lp-tech.net/articles/E5dKv

② スケール設定

メニューのAnalyze→Set Scaleをクリックし、画像のスケールバーが何ピクセル分に対応するかを入力する。

③ 測定項目

Analyze→Set Measurements(計測の設定)をクリックし、Area、Mean、Standard deviation、Skewness、Kurtosisなど測定したい統計量にチェックを入れOKをクリックする。

④ 領域指定

ImageJのメニューバーにある楕円や四角の描画ツールを使って領域を指定する。選択した領域が複数あるときはAnalyze→Tools→ROI Managerをクリックし、解析する領域を指定する。

⑤統計量の計測

領域指定後、メニューのAnalyze→Measureをクリックすると指定した測定項目の結果が出力される。(エクセルファイルで保存可)

⑥ 二値化処理

ImageJの二値化処理ではOtsu法をはじめとするさまざまな自動二値化を施すことが可能であり目的に応じて最適なものを選択する。
メニューのImage→Adjust→Thresholdを選択し、自動二値化処理の種類とDark backgroundの✓の有無を決定し、Applyをクリックすると白と黒で二値化処理が施された画像が出力される。
原理と解説はこちら👉 https://lp-tech.net/articles/wIEoF

⑦ 粒子解析

メニューのAnalyze→Analyze Particles…をクリックすると新しい画面が表示される(右図)。上からSize (解析対象となる粒子の大きさ)、真円率、結果の出力方法を入力し、選択する。
(ShowをOutlinesにし、Summarizeに✓を入れておくと結果が見やすい。)

【マクロ言語での記述】

統計解析、二値化および粒子解析を実行するスクリプトをマクロで記述してみましょう。
解析対象となる画像が蛍光画像と明視野画像の2種類のパターン別にスクリプトを書くと以下のようになります。

パターン①蛍光画像

Black Backgroundに✓,Dark Backgroundに✓

open("C:\\Users\\Hiro\\Downloads\\Rat_Hippocampal_Neuron2.zip");
run("Split Channels") ;
selectWindow("C3-Rat_Hippocampal_Neuron2.tif");
run("8-bit");
run("Options...", "iterations=1 count=1 black");//*1
run("8-bit");
getStatistics(area, mean, min, max, std, histogram); //*2
print(“mean=”, mean);
setAutoThreshold("Otsu"); //*3
//run("Threshold...");
setAutoThreshold("Otsu dark"); //*4
//setThreshold(90, 255);
run("Convert to Mask");
run("Analyze Particles...", "size=5-Infinity show=Outlines display summarize"); //*5
パターン①蛍光画像

パターン②明視野画像

Black Backgroundの✓をはずす、,Dark Backgroundの✓をはずす

run("Embryos (42K)");
run("8-bit");
run("Options...", "iterations=1 count=1");//*1
getStatistics(area, mean, min, max, std, histogram); //*2
print(“mean=”, mean);
setAutoThreshold("Otsu"); //*3
//setThreshold(0, 103);
setOption("BlackBackground", false); //*4
run("Convert to Mask");
//setTool("polygon");
makePolygon(3,3,3,1194,867,1188,864,1017,1584,1026,1590,6);
run("Analyze Particles...", "size=100-Infinity show=Outlines display summarize");//*5
パターン②明視野画像
注釈では各行に記載されたスクリプトの意味を示します。
*1;ImageJ背景の設定
*2;統計量取得
*3;自動閾値設定
*4;背景と二値化処理との対応
*5;粒子解析
最後にこれまで書いてきた記事とその概要を以下に示しました。シリーズ6からはより応用的な内容になっていますので1から5を理解しておくと記事が読みやすいと思います。
マクロの文法のまとめは以下のリンク先も参考にしてみてください。
(シリーズ5.ImageJマクロ言語を用いた画像解析~マクロ言語のまとめ~https://lp-tech.net/articles/q0ii2)

シリーズ1.ImageJの基礎~画像とは~

https://lp-tech.net/articles/Myfdc
【概要】
画像の種類とピクセル、bit深度、座標などこれからImageJを用いて画像処理を実行していくために必要な基本的な知識を紹介しました。

シリーズ2.ImageJの基礎~自動処理用開発言語 (マクロ)

https://lp-tech.net/articles/4fqE3
【概要】
マクロとはImageJで使われる自動処理用開発言語です。この言語で画像処理の操作を記述するとマニュアルでやっていた画像処理を自動化することが可能になります。ひとつひとつの画像処理のステップをマクロで記述する方法についはBuilt-in Macro Functionsに掲載されていますが、その多くはrun(“操作の命令文“);という書き方で実行することができます。

シリーズ3.ImageJマクロ言語を用いた画像解析~①輝度の統計量 ~

https://lp-tech.net/articles/X31Q9
【概要】
ImageJでは解析対象となる画像からさまざまな統計量 (面積 (単位はpixels) 、平均値、標準偏差、歪度、尖度、平均値)を取得することができます。特にライフサイエンス領域の研究では画像から、面積や輝度値を解析することが重要になります。

シリーズ3.ImageJマクロ言語を用いた画像解析~②二値化処理-1~

https://lp-tech.net/articles/wIEoF
【概要】
二値化処理は画像を白と黒の2色で表現し、領域を前景と背景の2つに分ける手法です。画像を二値化処理することによって数や面積、形態の測定などの画像解析が可能になります。二値化にはOtsu法やPercentile法に代表される自動二値化と解析者が設定する固定値を閾値とした二値化があります。

シリーズ4.ImageJマクロ言語を用いた画像解析~②二値化処理-2~

https://lp-tech.net/articles/E5dKv
【概要】
解析を正しく行うためにはImageJの背景の設定と二値化の組み合わせが非常に重要です。
◆Black Backgroundに✓を入れる→輝度値0を黒、輝度値255を白で示す
前景を輝度値0(黒)/背景を輝度値255(白)
前景を輝度値255(白)/背景を輝度値0(黒)
◆Black Backgroundに✓を入れない→輝度値0を白、輝度値255を黒で示す
前景を輝度値0(白)/背景を輝度値255(黒)
前景を輝度値255(黒)/背景を輝度値0(白)

シリーズ4.ImageJマクロ言語を用いた画像解析~②二値化処理-3~

https://lp-tech.net/articles/pH29A
【概要】
二値化処理を実装することができれば画像に適切な領域分割を施すことができます。ImageJに含まれるPercentileという自動二値化処理は上位50%を閾値とする設定に固定されていますが、Percentile法による二値化処理をマクロで記述することができれば任意の値に閾値を設定できるようになります。

シリーズ5.ImageJマクロ言語を用いた画像解析~マクロ言語のまとめ~

https://lp-tech.net/articles/q0ii2
【概要】
画像解析をマクロ言語で実装する際に必要なマクロ言語の文法や記述の仕方についてまとめた記事です。
記号や関数の意味が一目でわかるようになっていますので復習に便利です。

シリーズ5.ImageJマクロ言語を用いた画像解析~マクロ言語のまとめ2~

https://lp-tech.net/articles/QmmYb
【概要】
ImageJにはBuilt-in Macro Functionsに掲載されているような多くの種類の関数が含まれていますが、関数はユーザー自身が定義して用いることもできます。関数には返り値がある場合とない場合の書き方の2種類があります。