※間違えて、一度記事を削除してしまったようですが、復元しました。
目的
顕微鏡撮影した細胞画像から、細胞膜領域と細胞質領域の範囲を選び、その平均輝度値を求めたい!
使用するアプリケーションは、以下の通りです。
- Fiji (ImageJ)
-画像解析ソフト - anaconda
-Python を動かすところ - cellpose
-Python で書かれた細胞画像の分節化に特化した、deep-leaning に基づくアルゴリズム
上記アプリケーション(プラグインを含む)のインストールや、解析に必要なマクロを記録していきます。
最終回の今回は、cellpose での Segmentation の結果を用いて、細胞膜領域ならびに細胞質領域の平均輝度値の測定をします!
PC の環境
Windows 10
この記事の範囲
cellpose での Segmentation の結果を用いて、細胞膜領域ならびに細胞質領域の平均輝度値の測定を行う。
前準備( Fiji に、プラグインをインストールする)
前回の ImageJ と Cellpose を使って、細胞画像の輝度値を測定する。(4) の前準備に記載した、[imagej_roi_converter] と同様に、解析に必要なプラグインを ImageJ にインストールする必要があります。
それは、MorpholibJ というプラグインです。
このプラグインのインストールに関しては、ImageJ と Cellpose を使って、細胞画像の輝度値を測定する。(1) に記載しているので、そちらを参照ください。
細胞膜領域を選択し、その平均輝度値を求める
注意! 今回は、細胞の面積 (pixel^2) が、およそ10000程度の写真画像を解析することを念頭に、下記 Macro を組んでいます。それより小さい細胞画像を解析する場合は、適宜係数を変更させてください。
- 細胞輪郭を Segmentation した cellpose の結果を Fiji に反映させる。
この方法は、 ImageJ と Cellpose を使って、細胞画像の輝度値を測定する。(4) に記載しています。 - 不要な ROI を左クリックで選択し、ROI Manager > Delete で消去します。このとき、1000 pixel^2 に満たないような小さな ROI は、一つ一つ消去しなくても大丈夫です。(後から一括して消去します)
- 細胞写真画像を active にして、以下の Macro を実行する。(IJ1 Macro で書いています)
実行すると、途中でポップアップウインドウが現れて、パラメータを聞かれます。そこで、細胞膜の厚さ (pixel) を設定します。(デフォルトは、10 pixel)もっと細胞膜領域を太くする場合は、"15" とかそれ以上の数字を入力してください。
Macro が終了すると、細胞膜領域を ROI とした ROI Manager と、細胞写真画像における ROI(細胞膜領域) の平均輝度値の測定結果が出力されます。
rename("Init_Image");
xlength = getWidth();
ylength = getHeight();
newImage("Cell", "8-bit black", xlength, ylength, 1);
run("Colors...", "foreground=white background=black selection=orange");
roiManager("Fill");
run("Colors...", "foreground=black background=black selection=orange");
roiManager("Draw");
Dialog.create("Parameters");
Dialog.addNumber("ErodeNum", 10,0,8,"pixels");
Dialog.show();
ErodeNum = Dialog.getNumber();
Erode = "operation=Erosion element=Disk radius=" + ErodeNum ;
run("Morphological Filters", Erode);
rename("Protoplasm");
imageCalculator("Subtract create", "Cell","Protoplasm");
selectWindow("Result of Cell");
rename("Cell_Membrane");
roiManager("deselect");
setOption("BlackBackground", true);
run("Analyze Particles...", "size=1000- display clear add composite");
selectWindow("Init_Image");
roiManager("Show All");
run("Set Measurements...", "mean redirect=None decimal=3");
roiManager("multi-measure measure_all");
close("\\Others");
以下、少しだけ解説します。
▼ 4 ~ 8 行目
newImage("Cell", "8-bit black", xlength, ylength, 1);
run("Colors...", "foreground=white background=black selection=orange");
roiManager("Fill");
run("Colors...", "foreground=black background=black selection=orange");
roiManager("Draw");
このコードでは、2. で調整した ROI から、細胞輪郭のマスク画像を作成しています。
▼ 9 ~ 13 行目
Dialog.create("Parameters");
Dialog.addNumber("ErodeNum", 10,0,8,"pixels");
Dialog.show();
ErodeNum = Dialog.getNumber();
Erode = "operation=Erosion element=Disk radius=" + ErodeNum ;
このコードでは、細胞膜領域の太さ(厚さ?)を設定しています。
▼ 14 ~ 18 行目
run("Morphological Filters", Erode);
rename("Protoplasm");
imageCalculator("Subtract create", "Cell","Protoplasm");
selectWindow("Result of Cell");
rename("Cell_Membrane");
このコードで、細胞輪郭のマスク画像から、細胞膜領域の太さ分の pixel だけ収縮(Erode)処理をして、細胞膜より内側の領域(Protoplasm 領域)のマスク画像を作成しています。
それから、"細胞輪郭のマスク画像" - "Protoplasm のマスク画像" を計算し、細胞膜領域のマスク画像を作成しています。
▼ 19 ~ 21 行目
roiManager("deselect");
setOption("BlackBackground", true);
run("Analyze Particles...", "size=1000- display clear add composite");
このコードでは、細胞膜領域のマスク画像の内、サイズ 1000 pixel^2 以上のものを、選択し ROI Manager に登録します。
注意! ここで、1000 pixel^2 未満の小さなサイズのマスク画像(おそらく、背景に紛れているチリなど)を除去しています。細胞画像の大きさに応じて、この除去するサイズを変更させてください。
その後のコードでは、作成した ROI Manager から細胞膜領域の平均輝度値を算出しています。
もし、 stack 画像で平均輝度値を測定する場合は、
roiManager("multi-measure measure_all");
を、
roiManager("multi-measure");
とした方が、測定結果が見やすいかもしれません。
細胞質領域を選択し、平均輝度値を求める場合
上記では、細胞輪郭の Segmentation 結果を用いて、細胞膜領域の ROI を作成し、その平均輝度値を求めました。
この方法を使うと、細胞輪郭の Segmentation の結果と、細胞核の Segmentation の結果を使って、
"細胞輪郭のマスク画像" ― "細胞核のマスク画像" = "細胞質のマスク画像"
と計算をすれば、細胞質領域の ROI を作成でき、その平均輝度値を求めることができます。
以上!