概要
ImageJのThresholdの中にもPercentileという項目があり、マクロで書かなくても簡単にPercentile法で二値化処理を施すことは可能です。しかし、ImageJでは輝度値ヒストグラムの上位50%を閾値とする(=50パーセンタイル)という設定しか施すことができません。画像によっては上位50%が適切な閾値であるとは限らないので、この設定を任意の数値に変えることが可能になると、さまざまな画像で領域分割が可能になります。
今回は上位X%を閾値とする二値化処理を施すスクリプトをマクロで書くことを学びます。
今回は上位X%を閾値とする二値化処理を施すスクリプトをマクロで書くことを学びます。
サンプル画像(下記リンク先を参照)Rat_Hippocampal_Neuron2.zip を例に見てみましょう。
今回は神経細胞の突起に見られる粒子状の構造の画像を使います。
今回は神経細胞の突起に見られる粒子状の構造の画像を使います。
最終的にこの粒子状の構造をカウントすることを目的に画像処理を施すことを考えます。まず、Percentile法で二値化処理を施してみます。
Image→Adjust→ThresholdをクリックしてPercentileを選択すると、ヒストグラムの画像の左下に50.15%と表示されています。これが閾値です。しかし50%を閾値にすると下図のように細胞の粒子状の構造のみならず繊維の部分も含まれてしまいうまくカウントできないように思われます。
そこで試しに上段のバーをマウスで動かして閾値を変えてみます。5%付近にするとカウントしたい粒子状の構造が選択されることがわかります。
Image→Adjust→ThresholdをクリックしてPercentileを選択すると、ヒストグラムの画像の左下に50.15%と表示されています。これが閾値です。しかし50%を閾値にすると下図のように細胞の粒子状の構造のみならず繊維の部分も含まれてしまいうまくカウントできないように思われます。
そこで試しに上段のバーをマウスで動かして閾値を変えてみます。5%付近にするとカウントしたい粒子状の構造が選択されることがわかります。
◆50%パーセンタイルの場合
◆5%パーセンタイルの場合
これより、上記の画像に「上位5%を閾値とする二値化処理を施し粒子の数をカウント」する画像処理を施すことにします。この処理をマクロで記述するために必要な知識をまず説明します。
【配列】
array[]
arrayという名前の配列の定義。イメージとしてはarrayという名前の箱に[]内に書いた数だけ文字または数字を格納する場所があると考えるとわかりやすいと思います。 ※配列の名前は任意に変更可。
arrayという名前の配列の定義。イメージとしてはarrayという名前の箱に[]内に書いた数だけ文字または数字を格納する場所があると考えるとわかりやすいと思います。 ※配列の名前は任意に変更可。
【getHistogramの使い方】
getHistogram()
8bit画像の場合、0~255までの輝度値に対応するピクセル数が順番に格納されます。
※getHistogram(引数1, 引数2, 256) と記述した場合
引数1に輝度値(0-255)、引数2に各輝度値に対応する度数(ピクセル数)をかえす。
8bit画像の場合、0~255までの輝度値に対応するピクセル数が順番に格納されます。
※getHistogram(引数1, 引数2, 256) と記述した場合
引数1に輝度値(0-255)、引数2に各輝度値に対応する度数(ピクセル数)をかえす。