HOMEソリューションImage-Proの画像解析の例
ソリューション 凝集した円形の粒子の径を測定する

Q:ほぼ真円の、凝集した粒子 (circuloid 形の粒子) の径を測定したい。粒子どうしに多少の重なりがあるが、それでも測定できるか?

A:多少の重なりがあっても、鮮明な画像で真円の粒子であれば、概ね次のような「ディスタンスマップ」フィルタを利用した処理で径を測定できます。
  1. Image-Pro Plusの「ファイル」メニューにある「開く」コマンドで、サンプルイメージの "Particles.tif" 画像を開きます (この画像は、インストールディスクの "Images" フォルダ内の "More" フォルダにあります)。


    粒子の SEM 画像(粒子が凝集し、互いに接触しています)

  2. 次に、「測定」メニューの「カウント/サイズ」を実行し、「カウント/サイズ」ダイアログボックスを開きます。「手動抽出」-「レンジを選択」をクリックし、「色抽出」ウィンドウを開きます。



  3. 「色抽出」ウィンドウで、2値化のレンジの下限を「78」、上限を「255」に設定し、「新規マスク」ボタンをクリックします。


    画像を2値化し、マスクを作成します

    これで、元の画像を2値化したマスク画像が作成されます。


    マスク画像

    この画像では、粒子同士が接触しています。
    「色抽出」ウィンドウの「閉じる」をクリックしてウィンドウを閉じます。

  4. 次に、「処理」メニューの「フィルタ」を実行し、「フィルタ」ダイアログボックスの「モフォロジカル」タブをクリックします。「ディスタンスマップ」を選択してから、下の「オプション」欄で「ユークリッド」を選択し、「閾値」で「50」を指定します。



  5. 「適用」をクリックして、ディスタンスマップフィルタをマスク画像に適用します。その結果、16ビットグレイスケール形式のディスタンスマップ画像が作成されます。


    ディスタンスマップ画像

    この画像では、輝度が距離を表します。つまり、各粒子の外周の外にあるピクセルが輝度「0」になり、粒子の内側へ向かうにつれて輝度値が大きくなります。それぞれの粒子の中央にあるピクセルが粒子内で最も大きい輝度を持ち、同時にその輝度は外周から中央までの距離、つまり粒子の半径に相当します (「カウント/サイズ」で測定した場合、各粒子内の最大輝度、つまり「濃度(最大)」の値が粒子の半径となります)。


  6. 次に、画像内の粒子の最大半径を調べます。「測定」メニューの「ヒストグラム」を実行して「ヒストグラム」を開き、「レポート」メニューの「統計」オプションを選択してから、ヒストグラムの左側に表示される「X最大」の値を読みます。下の画像では、「27」になっています。これが、画像内の最も大きい粒子の半径です。


  7. 次に、「カウント/サイズ」で画像内の全粒子の半径を測定します。「カウント/サイズ」ダイアログボックスの「手動抽出」-「レンジを選択」をクリックして「色抽出」ウィンドウを開き、2値化の輝度レンジの下限を「3」、上限を「27」に設定します(この設定で、半径が3~27ピクセルの粒子が測定されます)。
    設定したら、「閉じる」をクリックします。



  8. 次に、「カウント/サイズ」の「測定」メニューから「測定項目」を実行し、「測定項目」欄から「濃度(最大)」を選択します。この「濃度(最大)」(最大輝度)が、各粒子の最大半径に相当します。

  9. 「カウント/サイズ」の「カウント」ボタンをクリックし、自動計測を実行します。


  10. このままでは粒子同士が接触しているので、「カウント/サイズ」の「編集」メニューにある「Watershed分割」を実行し、粒子を切り離します。


  11. 粒子の半径の測定結果は、「カウント/サイズ」の「表示」メニューで「測定データ」を実行し、「濃度(最大)」の列をご覧下さい。

  12. なお、本ページの末尾にあるマクロを使用すれば、Image-Pro Plus の注釈機能を利用して、各粒子に円形のアウトラインを付けることもできます。


    元の画像を 「編集」メニューの「コピー」コマンドでクリップボードに入れ、次にこの画像ウィンドウの中へ「貼り付け」コマンドで貼り付けると、次のようになります。

なお、「測定」メニューの「較正」-「輝度較正」コマンドで輝度較正を行なうと、半径を表す輝度値を、実際の寸法に合わせて較正することができます。

上記 12. の手順で使用するマクロは、以下の手順でインストールして下さい。
  1. マクロ ("---マクロここから---" ~ "---マクロここまで---" の部分) をクリップボードにコピーし、Image-Pro Plus の「マクロ」メニューにある「マクロ編集」コマンドを実行してマクロエディタを開きます。
  2. マクロエディタウィンドウの末尾にカーソルを入れて一回改行し、マクロエディタの「編集」メニューにある「貼り付け」コマンドで、マクロをウィンドウ内に貼り付けます。
  3. マクロエディタの「ファイル」から「上書き保存」を実行し、マクロを保存します。
マクロを保存すると、「マクロ」メニューの最下段に、マクロ名 ("Draw_Circles") が表示されます。
  1. 上記の測定手順 1.~12. を実行してから、「マクロ」メニューの最下段に表示されている "Draw_Circles" をクリックして、マクロを実行して下さい。
'----------マクロここから----------
Sub Draw_Circles()

Dim Anz_Obj As Integer
Dim Zaehler1 As Integer

ret = IpBlbSetAttr(BLOB_OUTLINEMODE,0)
ret = IpBlbEnableMeas(BLBM_AREA, 1)
ret = IpBlbEnableMeas(BLBM_DENSMAX, 1)
ret = IpBlbEnableMeas(BLBM_CENTRX, 1)
ret = IpBlbEnableMeas(BLBM_CENTRY, 1)
ret = IpBlbMeasure()
ret = IpBlbUpdate(4)

ret = IpBlbGet(GETNUMOBJ, 0, 1, Anz_Obj)

ReDim X_Pos(Anz_Obj) As Single
ReDim Y_Pos(Anz_Obj) As Single
ReDim Radius_(Anz_Obj) As Single

ret = IpBlbData(BLBM_CENTRX, 0, Anz_Obj, X_Pos(0))
ret = IpBlbData(BLBM_CENTRY, 0, Anz_Obj, Y_Pos(0))
ret = IpBlbData(BLBM_DENSMAX, 0, Anz_Obj, Radius_(0))

Zaehler1 = 0

For Zaehler1 = 0 To (Anz_Obj - 1)

  ret = IpAnCreateObj(GO_OBJ_ELLIPSE)
  ret = IpAnMove(0, (X_Pos(Zaehler1) - Radius_(Zaehler1)), (Y_Pos(Zaehler1) - Radius_(Zaehler1)))
  ret = IpAnMove(5, (X_Pos(Zaehler1) + Radius_(Zaehler1)), (Y_Pos(Zaehler1) + Radius_(Zaehler1)))

Next

End Sub
'----------マクロここまで----------


ご参考: 次のページに類似処理の解説があります。
繊維断面を測定する
凝集した粒子を分離する