Q: 画像を小さい領域に分割して粒子の分散度を調べたい。
A: 粒子の分散度は、ボ
ロノイ多角形を使用した方法の他に、区画法でも解析できます。
区画法では、画像を碁盤目状の区画に区切り、それぞれの区画内に存在する粒子の合計面積と、区画全体に対して粒子が占める面積比率を測定します。
Image-Pro Plus でこの解析を行なうには、画像内に AOI (Area of Interest: 対象領域) を作成し、それを画像内で移動しながら、各区画
(= AOI の領域) に存在する粒子の面積・面積比率をカウント/サイズで測定していきます。
測定結果は、1つの区画内で測定が終了する毎に、"Data Collector" (データコレクタ) で収集しておけば、結果の集計やグラフ化が簡単に行なえます
(データコレクタのグラフ作成機能は、Image-Pro Plus ver. 6.0 以降に搭載されています) 。
この種の測定は、非常に多くの反復処理が必要なため、手動で行なうのは極めて非効率的です。このため、以下の測定手順は、本ページの末尾に示すマクロを使
用することを前提にしています。
測定手順は以下の通りです。
注記: マクロのインストール方法については、本ページの
末尾の「区画法のサンプルマクロについて」をご覧下さい。
- 画像を開き、"Macro" (マクロ) メニューの最下段に表示されるマクロ名 "SectMthd_Setup" をクリックします。
これで設定用のマクロが実行され、"Count/Size" (カウント/サイズ)
と "Data Collector" (データコレクタ) が起動して、以下の測定項目が自動設定されます。
- "Object Count" (カウント数)
- "Total Objects" (オブジェクト合計数)
- "Area" (面積) の "Sum" (合計)
- "Per Area (Obj./Total)" (面積比) の "Sum" (合計)
注記:
- この "Sect_Mthd" マクロは設定を行なうだけですので、セッションで1回実行すれば十分です。測定の度に実行する必要はありません。
- "Object Count" (カウント数) は選別レンジを適用した後のカウント数です。"Total Objects"
(オブジェクト合計数) は選別レンジ適用前のカウント数です。ここでの測定のように、決められた数の区画から測定結果を収集するときは
(あるいは決められた枚数の画像から測定結果を 収集するときは)、"Object Count" (カウント数) だけでなく
"Total Objects" (オブジェクト合計数) を必ず選択しておく必要があります (選択しないと、区画内または画像内のオブジェクト数が0だったときに、測定結果がデータコレクタへ収集されません)。
- 測定項目はここではマクロで自動設定されますが、"Area" (面積) と "Per Area (Obj./Total)"
(面積比) を手動で選択される場合は、"Layout" (項目選択) タブの "Data Sources/Data Items"
(データソース/データ項目) 欄でそれぞれの測定項目を測定する際に、測定項目の下の欄で "Value" (値) でなく
"Sum" (合計) を選択して下さい。
- "Count/Size" (カウント/サイズ) ダイアログの "Manual" (手動抽出) を選択してから "Select
Ranges" (レンジを選択) をクリックし、"Segmentation" (色抽出) ウィンドウを開きます。
- "Segmentation" (色抽出) ウィンドウで画像を2値化します。
画像内の粒子が赤く表示されるように2値化したら、"Close" (閉じる) ボタンをクリックして "Count/Size"
(カウント/サイズ) に戻ります。
- 必要に応じて、測定する粒子を取捨選択する選別レンジを設定して下さい。選別レンジを設定するには、"Count/Size"
(カウント/サイズ) の "Measure" (測定) メニューから "Select Measurements" (測定項目)
を実行し、中央の "Filter Objects" (選別レンジ) 欄で測定項目を選択してから、その下の "Start" (最小)
欄と "End" (最大) 欄に数値を入力します (最大~最小のレンジ内にある粒子のみが測定対象となります)。
- "Macro" (マクロ) メニューの最下段に表示されるマクロ名 "SectMthd" をクリックして測定用のマクロを起動します。
- 「区画のサイズ (1辺の長さ) を指定して下さい。」というメッセージが表示されたら、区画 (矩形AOI) のサイズをピクセル単位で指定し、"OK"
をクリックします。
これで画像内に矩形AOI が現われ、移動しながら測定を実行します。
- 測定が終了したら、"Data Collector" (データコレクタ) の "Data List" (データ一覧) タブや
"Statistics" (統計) タブで測定データを見ることができます。データを外部に出力するには、"Export" (出力)
タブのオプションを使用して下さい。
Image-Pro Plus ver. 6.0以降では、データコレクタのグラフ作成オプションを利用できます。次の図は、"Data
List" (データ一覧) で表示中の測定結果を、"Data Graph" (データグラフ) ボタンでグラフ化した結果です。
● 区画法のサンプルマクロについて
上記の手順による測定を実行するマクロです。
マクロのインストール手順は以下の通りです。
- 次のマクロの「'***** マクロここから *****」~「'***** マクロここまで *****」の範囲をクリップボードにコピーして下さい。
- Image-Pro Plusを起動し、"Macro" (マクロ) メニューの "Edit Macro" (マクロ編集)
コマンドを実行し、マクロエディタを開きます。
- マクロエディタウィンドウの末尾にカーソルを入れ、[Enter]キーを1回押して改行して下さい。
- マクロエディタの "Edit" (編集) メニューにある "Paste" (貼り付け) を実行し、1.の手順でコピーしたマクロをマクロエディタ内に貼り付けます。
- マクロエディタの "File" (ファイル) メニューにある "Save" (上書き保存) コマンドを実行して、マクロを保存します。
- Image-Pro Plus 本体の "Macro" (マクロ) メニューの最下段に、マクロ名 ("SectMthd_Setup"
と "SectMthd") が表示されていることを確認します。もし表示されない場合は、 "Macro" (マクロ) メニューの
"Macro" (マクロ) コマンドを実行し、"Reload" (再ロード) ボタンをクリックしてみて下さい。
'***** マクロ ここから *****
Sub SectMthd_Setup()
'カウント/サイズを開き、設定を行ないます:
ret = IpBlbShow(1)
ret = IpBlbSetAttr(BLOB_ADDCOUNT, 1)
ret = IpBlbSetAttr(BLOB_MEASUREOBJECTS, 1)
ret = IpBlbSetAttr(BLOB_FILTEROBJECTS, 1)
ret
= IpBlbSetAttr(BLOB_CLEANBORDER,0)
ret = IpBlbSetAttr(BLOB_FILLHOLES,0)
'データコレクタを開きます:
ret = IpDcShow(3)
'データコレクタの収集項目を選択します:
'カウント数を選択:
ret = IpDcSelect("Count_Size", "Count", 0)
'オブジェクト合計数を選択:
ret = IpDcSelect("Count_Size",
"Total_Count", 0)
'面積(合計値)を選択:
ret = IpDcSelect("Count_Size", "BLBM_AREA", 6)
'面積比(合計値)を選択:
ret = IpDcSelect("Count_Size",
"BLBM_PERAREA", 6)
End Sub
Sub SectMthd()
'変数宣言部:
'横・縦方向測定のループ用カウンタ:
Dim xloop As Integer
Dim yloop As Integer
'画像情報:
Dim dInfo As
IPDOCINFO
'横・縦方向の測定回数:
Dim Kaisuu_X As Integer
Dim Kaisuu_Y As Integer
'矩形AOIのサイズ:
Dim AOI_Size
As Integer
'画像の縦横サイズ(dInfo.height、dInfo.width)を取得します:
ret = IpDocGet(GETDOCINFO, DOCSEL_ACTIVE, dInfo)
'画像がない場合はマクロを終了します:
If ret < 0 Then
Exit Sub
End If
'矩形AOIの一辺のサイズ(AOI_Size)を指定します(初期値:50、最小:10、最大:1000):
Saisettei:
ret = IpStGetInt("区画のサイズ (1辺の長さ) を指定して下さい。", AOI_Size, 50, 10, 1000)
'区画サイズ指定時にユーザが「取り消し」ボタンをクリックしたらマクロを終了します:
If ret = 0 Then
Exit Sub
End If
'指定された区画サイズが適切(画像サイズの1/2以内)かどうかを判断します:
If dInfo.Width < (AOI_Size * 2) Or dInfo.Height < (AOI_Size
* 2) Then
MsgBox("指定した区画のサイズが大きすぎます。再設定して下さい。")
GoTo Saisettei
End If
'横方向の測定回数(Kaisuu_X)と縦方向の測定回数(Kaisuu_Y)を算出します:
Kaisuu_X = dInfo.Width \ AOI_Size
Kaisuu_Y = dInfo.Height \ AOI_Size
'指定された区画サイズ(AOI_Size)に基づいて、画像内に矩形AOIを作成します:
' ret = IpAoiExShow()
ipRect.Left
= 0
ipRect.top = 0
ipRect.Right
= AOI_Size - 1
ipRect.bottom = AOI_Size - 1
ret = IpAoiCreateBox(ipRect)
'データコレクタの自動収集オプションをOFFに設定します:
ret = IpDcSet(DC_AUTO,
0)
'以下、縦横方向の測定回数(Kaisuu_Y、Kaisuu_X)に達するまでループ処理します:
yloop
= 1
xloop = 1
For yloop
= 1 To Kaisuu_Y
For xloop
= 1 To Kaisuu_X
'カウントを実行します:
ret = IpBlbCount()
ret = IpBlbUpdate(0)
ret = IpBlbUpdate(4)
'カウント結果をデータコレクタへ送ります:
ret = IpDcUpdate(DC_FETCH)
ret = IpMacroWait(2)
ret = IpAoiMove(AOI_Size,
0)
Next xloop
'AOIを左端へ戻し、一段下へ移動します:
ret = IpAoiMove(-1
* (AOI_Size * Kaisuu_X) , AOI_Size)
Next
yloop
'AOIを非表示にします:
ret = IpAoiShow(FRAME_NONE)
End Sub
'***** マクロ ここまで ***** |
|
|