画像処理とは、
電子工学的(主に情報工学的)に画像を処理して、別の画像に変形したり、画像から何らかの情報を取り出すために行われる処理全般を指す。(Wikipediaの画像処理より)
ブロブ(Blob)とは塊のことです。
画像を2値化した後、ラべリングを行い、ラベル付けされた塊の面積、位置、長さなどの特徴量を解析することをブロブ解析と言います。
本記事では、ImageJのサイトにある以下のサンプル画像に対して、画像処理を行い、ブロブ解析し、丸いドット(28個)の位置と面積を調べたいと思います。
ポイントは、右上の薄いドットをどう抽出するかです。
画像は自分のPCに保存してください。
準備
ImageJに、Calculator Plusをインストールします。
方法は、リンク先に移動し、「Calculator_Plus.class」を「pluginsフォルダ」にコピーし、ImageJを再起動します。
まず画像を調べてみます
以下の手順を行ってください。
ImageJで、自分のPCに保存した「Dot_Blot.jpg」を開きます。
メニューの Image
⇒ Adjust
⇒ Threshold
を実行します。上下のスライダーで挟まれた範囲は赤色で、それ以外はグレイで表示されます。
下のスライダーを右にスライドさせて、右上のドットを赤くしようとすると、左側は赤く塗りつぶされてしまいます。
単純な2値化処理では、全てのドットを抽出することはできないようです。
今回の画像処理の例
「Dot_Blot.jpg」の背景は、左と右で背景の輝度が違うようです。
今回は、Meanフィルタを利用した背景除去を行います。こちらを参考にしてください。
画像処理のフローとしては、以下を行います。基本的なフローの一つだと思います。
- 背景除去
- 2値化処理
- ノイズ除去(収縮 + 膨張)
では、以下の手順で行ってください。
「Dot_Blot.jpg」ウィンドウを選択して、
メニューの Image
⇒ Duplicate
⇒ Title
に「Dot_Blot.jpg_Mean」を入力して実行します。
「Dot_Blot.jpg_Mean」ウィンドウを選択して、
メニューの Plugins
⇒ Filters
⇒ Fast Filters
を実行します。
Filter Type
= mean
xRadius
= 31
yRadius
= 31
平滑化の結果
次に、差分を実行します。メニューの Plugins
⇒ Calculator Plus
を実行します。
i1
= Dot_Blot.jpg
i2
= Dot_Blot.jpg_Mean
Operation
= Substruct
k1
= 1.0
k2
= 194.0(「Dot_Blot.jpg」の平均輝度)
差分の結果
メニューの Image
⇒ Adjust
⇒ Threshold
を実行し、下のスライダーを右にスライドさせて、値を 192
にします。
次に2値化の準備をします。
メニューの Process
⇒ Binary
⇒ Options
⇒ Black background
をONにします。
メニューの Process
⇒ Binary
⇒ Convert to Mask
で2値化します。
2値化処理の結果
メニューの Plugins
⇒ Filters
⇒ Fast Filters
を実行します。
Filter Type
= minimum
xRadius
= 5
yRadius
= 5
収縮処理の結果
メニューの Plugins
⇒ Filters
⇒ Fast Filters
を実行します。
Filter Type
= maximum
xRadius
= 5
yRadius
= 5
膨張処理の結果
ブロブ解析
ImageJには、Analize Particles
というブロブ解析用のコマンドがありますので使います。
「Result」ウィンドウを選択して、
メニューの Analize
⇒ Analize Particles
を実行します。
下のように設定して、実行します。
ドットを抽出することができました。位置(X、Y)や大まかな面積(Area)などを調べることができます。
計測する特徴量を変えたい時には、メニューの Analize
⇒ Set Measurements
で設定してください。
今回はブロブ解析の対象が白になっていると思いますが、黒にしたい場合は、メニューの Process
⇒ Binary
⇒ Options
⇒ Black background
をOFFにします。
マクロ
以上の処理をマクロにしてみました。
title = getTitle();
title_mean = title + "_Mean";
title_result = title + "_Result";
// Duplicate
selectWindow(title);
run("Duplicate...", " ");
rename(title_mean);
// Mean
selectWindow(title_mean);
run("Fast Filters", "link filter=mean x=31 y=31 preprocessing=none offset=128");
// Substruct
selectWindow(title_mean);
run("Calculator Plus", "i1=" + title + " i2=" + title_mean + " operation=[Subtract: i2 = (i1-i2) x k1 + k2] k1=1 k2=194 create");
rename(title_result);
// Binarize
selectWindow(title_result);
setThreshold(0, 192);
setOption("BlackBackground", true);
run("Convert to Mask");
// Minimum filter
selectWindow(title_result);
run("Fast Filters", "link filter=minimum x=5 y=5 preprocessing=none offset=128");
// Maximum filter
selectWindow(title_result);
run("Fast Filters", "link filter=maximum x=5 y=5 preprocessing=none offset=128");
// Analyze Particles
selectWindow(title_result);
run("Analyze Particles...", "display clear add");
メニューの Plugins
⇒ New
⇒ Macro
を実行します。上のマクロをコピー&ペーストしてください。
「Dot_Blot.jpg」ウィンドウを選択して、
Macros
⇒ Run Macro
を実行してください。