HOMEソリューションImage-Proの画像解析の例
ソリューション

粒子の円相当径を測定


Q: カウント/サイズで粒子の円相当径を測定したいのだが。

A: 円相当径はImage-Pro Plusがサポートする通常の測定項目にはありませんが、ユーザ定義による測定項目として測定が可能です。
  1. Image-Pro Plus ver.6.0以降のバージョンをお使いの場合は、「カウント/サイズ」と「データコレクタ」を組み合わせることで測定可能です。
  2. Image-Pro Plus ver. 5.1およびそれ以前のバージョンをお使いの場合は、マクロにて測定が可能です。
それぞれの手順は次のようになります。

a.   Image-Pro Plus ver.6.0以降で円相当径を測定する手順:
  1. 画像を開き、"Measure" (測定) メニューの "Count/Size" (カウント/サイズ) を実行して "Count/Size" (カウント/サイズ)ダイアログを開きます。画像を開く
  1. "Measure" (測定) メニューの "Data Collector" (データコレクタ) を実行してデータコレクタを起動します。

  2. "Data Collector" (データコレクタ) ウィンドウの "Layout" (項目選択) タブにある "Data source/Data items" (データソース/データ項目)欄で、"Count/Size" (カウント/サイズ) を選択します。
    データコレクタ
この設定により、カウント/サイズの測定結果をデータコレクタに渡すことが可能になります。
  1. 円相当径は、カウント/サイズで各粒子の面積を測定し、その値に基づいて算出します。従って、次にカウント/サイズで測定した面積値をデータコレクタに渡す設定を行ないます。
"Data source/Data items" (データソース/データ項目) の下の欄で "Area" (面積) をクリックして選択してから、">>"ボタンをクリックします。これで、"Area (Value)" [面積(値)] が右側の "Selected items" (収集する項目) 欄に追加されます。
面積値をデータコレクタへ渡す設定

この設定で、カウント/サイズの面積測定値がデータコレクタに渡されます。
  1. 次に、円相当径を算出するユーザ定義測定項目を設定します。
"Data source/Data items" (データソース/データ項目) 欄で "User Measurement" (ユーザ定義測定項目) を選択します。
ユーザ定義測定項目を選択
  1. すると、その下の欄に"UserMeasurement"という項目が表示されますので、それを選択して">>"ボタンをクリックします。
UserMeasurementを選択

"Add user-defined measurement" (ユーザ定義測定項目を追加) ダイアログが開きます。
ユーザ定義項目設定ダイアログ
  1. "Name" (変数名) 欄の"UserMeas..."という文字を削除して、円相当径の測定項目名を半角英数文字でタイプします。下図の例では"Eq_Crcl_Diam"とタイプしています。測定項目名を入力
注記:測定項目名には半角英数文字のみをご使用下さい。また、できる限り短い名称を指定して下さい。
  1. この後、"Formula" (計算式) 欄に円相当径の計算式
2.0*SQRT(面積_値/pi)

を入力します。

"2.0*SQRT()"はそのまま半角文字でタイプしても構いませんが、演算子や関数は、"Functions" (関数) 欄で選択し、欄の右端の"Insert" (挿入) ボタンをクリックすることでも入力できます。
演算子・関数を挿入

他の変数 (この例では、上の4.の手順で選択した"面積_値"と"pi") も直接タイプして入力可能ですが、タイプミスを防ぐために、"Variables" (変数) 欄で選択してから、欄の右端の"Insert" (挿入) ボタンで計算式に入力されることをお勧めします。
変数を入力

ここでは、"Area_V" (面積_値) を選択して "Insert" (挿入) ボタンをクリックして下さい。
また、円周率 (pi) も同様に挿入して下さい。
  1. 計算式の入力が終了したら、"OK"をクリックして下さい。計算式入力の終了
  1. 次に、このユーザ定義測定項目を保存します。
"Data Collector" (データコレクタ) の "Save" (保存) ボタンをクリックし、ファイル名を半角英数文字で入力して、ユーザ定義測定項目を保存します。保存したファイルには".DCL"の拡張子が付きます。
ユーザ定義項目を保存

注記: ユーザ定義測定項目は、.DCLファイルに保存しないとセッ ション終了と同時に破棄されますので、必ず保存されることをお勧めします。なお、.DCLファイルに保存したユーザ定義測定項目を再度Image-Pro Plusに読み込んで使用するには、"Data Collector" の "Load" (ロード) ボタンを使用して下さい。
  1. 次に、"Count/Size" (カウント/サイズ) ダイアログの "Measure" (測定) メニューから "Select Measurements" (測定項目) を実行して、"Measurements" (測定項目) 欄で "Area" (面積) を選択して下さい。
面積を選択
  1. "Count/Size" (カウント/サイズ) ダイアログの "Manual" (手動抽出) を選択してから "Select Range" (レンジを選択) をクリックして "Segmentation" (色抽出) ウィンドウを開き、画像内の粒子が赤く表示されるように画像を2値化します。
画像を2値化

設定が終了したら、"Close" (閉じる) をクリックします。
  1. "Count/Size" (カウント/サイズ) ダイアログの"Count" (カウント) ボタンをクリックして、画像内の粒子を自動測定します。
粒子を測定

これで画像内の粒子の面積値が測定されましたので、このデータを以降の操作でデータコレクタに渡し、円相当径を算出させます。
  1. ここで"Data Collector" (データコレクタ) の "Collect Now" (収集実行) ボタンをクリックします。
収集実行

これで、カウント/サイズで測定した粒子の面積値がデータコレクタに渡され、同時に円相当径の値が算出されます。
  1. 円相当径の測定結果を表示させるには、"Data Collector" (データコレクタ) の "Data List" (データ一覧) タブをご覧下さい。
データ一覧

また、統計データは、"Statistics" (統計) タブに表示されます。
統計データ

データを保存するには、"Export" (出力) タブのオプションを使用して下さい。


  1. Image-Pro Plus ver.5.1以前で円相当径を測定する方法:
バージョン5.1およびそれ以前のImage-Pro Plusには、データコレクタでユーザ定義測定項目を定義する機能がありませんので、本ページの末尾に示すようなマクロを使用して測定していただく必要があります。

操作手順は次のようになります。
  1. マクロをクリップボードにコピーし、Image-Pro Plusの "Macro" (マクロ) メニューにある "Edit Macro" (マクロ編集) コマンドを実行してマクロエディタを開きます。
  2. マクロエディタウィンドウの末尾にカーソルを入れて一回改行し、マクロエディタの "Edit" (編集) メニューにある "Paste" (貼り付け) コマンドでマクロをウィンドウ内に貼り付けます。
  3. マクロエディタの "File" (ファイル) から "Save" (上書き保存) を実行し、マクロを保存します。
マクロを保存すると、"Macro" (マクロ) メニューの最下段に、マクロ名 ("Equiv_Circle_Diam") が表示されます。
  1. 測定対象の画像を開き、上の「Image-Pro Plus ver.6.0 以降で円相当径を測定する手順」の手順 11.~13. を実行します。
  2. "Macro" (マクロ) メニューの最下段に表示されているマクロ名"Equiv_Circle_Diam"をクリックして、マクロを実行します。
測定結果は "Output Window" (アウトプットウィンドウ) に表示されます。

マクロを使用した例

測定結果を保存するには、アウトプットウィンドウの "File" (ファイル) メニューにあるオプションを使用して下さい。
 

円相当径を算出するサンプルマクロ:

Sub Equiv_Circle_Diam()

'宣言部:

'円周率:
Const PI =  3.1415

'ファイル名:
Dim File_mei As String * 255

'粒子の個数:
Dim Kosuu As Integer

'カウンタ:
Dim n As Integer

'画像から画像名を取得:
ret = IpDocGetStr(INF_NAME, DOCSEL_ACTIVE, File_mei)

'念のため測定を行ない、粒子の個数を取得:
ret = IpBlbEnableMeas(BLBM_AREA, 1)
ret = IpBlbMeasure()
ret = IpBlbUpdate(0)
ret = IpBlbUpdate(4)
ret = IpBlbGet(GETNUMOBJ, 0, 1, Kosuu)

'エラー処理:
If File_mei = "" Or Kosuu = 0 Then
    MsgBox("本マクロは、画像を開き、カウント/サイズで一度測定を行なってから実行して下さい。")
    Exit Sub
End If

'粒子の面積値を格納する変数を宣言:
ReDim Menseki(Kosuu) As Single

'粒子の面積値を取得:
ret = IpBlbData(BLBM_AREA, 0 , (Kosuu - 1), Menseki(0))

'面積と円相当径の値をアウトプットウィンドウに出力:
ret = IpOutputClear()
ret = IpOutputShow(1)

    Debug.Print "画像名:"; vbTab; IpTrim(File_mei)
    Debug.Print "No."; vbTab;"面積"; vbTab;"円相当径"

n=0

For  n = 0 To (Kosuu - 1)
    Debug.Print n+1; vbTab; Menseki(n); vbTab; 2.0*(Sqr(Menseki(n)/PI))
Next

End Sub

以上