【記事の目標】
前回の記事シリーズ3からマクロ言語を用いた画像処理の実例を紹介しています。
(第一回目→シリーズ3.ImageJマクロ言語を用いた画像解析~①輝度の統計量 ~)
今回は第二回目として二値化処理について勉強します。
(第一回目→シリーズ3.ImageJマクロ言語を用いた画像解析~①輝度の統計量 ~)
今回は第二回目として二値化処理について勉強します。
画像を触ったことがない人を対象として、適切な画像解析を施すまでのImageJのマクロ言語を用いた学習過程を示す。
【二値化処理とは?】
グレースケール画像に対してある輝度値を基準 (閾値) としその閾値以上の輝度値を示す画素値を1、閾値以下の輝度値を示す画素値を0に変換し、画素値が0と255 (あるいは0と1) の2つの値しかとらないように処理を施す操作のことを二値化といいます
二値化処理を施した結果、画像は白と黒の2色だけで表示されます。
二値化処理を施した結果、画像は白と黒の2色だけで表示されます。
【二値化処理を施す目的】
画像の中に写っている様々なものを自分が注目している領域 (前景) とその他の背景に区別するために二値化処理を施します。単純には、領域を2つに分けることによって前景の数や面積、形態の測定などの画像処理が達成できます。
【簡単な二値化処理】
簡単な二値化処理には以下のようなものがあります。
*Percentile法
画像の中の2値化したい領域において、輝度値を昇順または降順に並べた場合の上位または下位x%を閾値として指定する手法です。例えば50パーセンタイルと指定すると、輝度値のヒストグラムで画素値が0をとるピクセルの数と1をとるピクセルの数がちょうど1:1になる輝度値tが閾値として設定されます。
*Percentile法
画像の中の2値化したい領域において、輝度値を昇順または降順に並べた場合の上位または下位x%を閾値として指定する手法です。例えば50パーセンタイルと指定すると、輝度値のヒストグラムで画素値が0をとるピクセルの数と1をとるピクセルの数がちょうど1:1になる輝度値tが閾値として設定されます。
*大津の二値化法 (Otsu)
画像を輝度ヒストグラムで表したときに、前景のピークと背景のピークの間で閾値tを決める手法です。輝度ヒストグラムをある閾値t で2つに分割したとき、2つのピークの分散 (広がり) が最も大きくなるような閾値を算出します。
画像を輝度ヒストグラムで表したときに、前景のピークと背景のピークの間で閾値tを決める手法です。輝度ヒストグラムをある閾値t で2つに分割したとき、2つのピークの分散 (広がり) が最も大きくなるような閾値を算出します。
【ImageJで二値化処理を施す方法】
それでは二値化処理をImageJで施す操作方法を見ていきましょう。
今回はImageJサンプル画像のEmbryos (42K) を用いて二値化処理を施した後、細胞数をカウントするという操作を紹介します。この画像は数える対象となる細胞が暗く、背景の方が明るいという特徴があるので、Process→Binary→Options にある "Black Background" (背景を黒に) のチェックを外した状態で説明します (*次回の記事で詳しく説明します)。
1、
File→Open Sample→Embryos (42K) を開きます。
2、
グレースケール画像に変換する必要があるので、Image→Type→8bitを選択します。
3、
Image→Adjust→Thresholdを選択します。
今回はImageJサンプル画像のEmbryos (42K) を用いて二値化処理を施した後、細胞数をカウントするという操作を紹介します。この画像は数える対象となる細胞が暗く、背景の方が明るいという特徴があるので、Process→Binary→Options にある "Black Background" (背景を黒に) のチェックを外した状態で説明します (*次回の記事で詳しく説明します)。
1、
File→Open Sample→Embryos (42K) を開きます。
2、
グレースケール画像に変換する必要があるので、Image→Type→8bitを選択します。
3、
Image→Adjust→Thresholdを選択します。
ここではOtsu法を試してみます。