ExtractBlobs

ExtractBlobs 関数は、対象領域 (ROI) において、「連結性解析」と呼ばれる一種のブロブ解析を実行します。

ExtractBlobs概要

この「連結性解析」の間、ROI に含まれるピクセルは、ブロブと背景の 2 つのカテゴリに分類されます。分類はグレースケールしきい値に基づいて行われ、このしきい値を下回るピクセルはすべて黒カテゴリに、上回るピクセルは白カテゴリに入ります。

同様に、類似した値を持つピクセルは、その「色」、および周囲のピクセルとの「接触」の有無を基準にグループ化されます。背景ピクセルは、左、右、上、下にあるピクセルと接触している場合は、周囲のピクセルと接続できます。一方、ブロブピクセルを周囲のピクセルと閉じたその周囲のピクセルに接続されているかどうかができるのは、左、右、上、下、または斜めにあるピクセルと接触している場合です。

処理の完了した画像は、ブロブまたは背景ピクセル値に分類されます。ROI 内のブロブは、画像内での位置 (列、行の座標)、面積、周囲長、拡散、伸長などの物理的な特性と割り当てられた値によって識別されます。抽出されたブロブのデータは、ブロブデータ構造体に格納、報告されます。

この関数は、ブロブ分析の第 1 ステップとなります。FindBlobsSortBlobs は両方とも最終的に、直接またはセル依存関係の連鎖の中で、ExtractBlobs 関数のブロブデータ構造体を参照します。

ExtractBlobsの入力パラメータ

Syntax:ExtractBlobs(画像,フィクスチャ.行,フィクスチャ.列,フィクスチャ.角度,領域.X,領域.Y,領域.高さ,領域.幅,領域.角度,領域.カーブ,外部定義領域,ソートする数,しきい値,穴を埋める,境界ブロブ,カラーブロブ,背景色,面積制限: 最小,面積制限: 最大,表示)

画像

 
画像データ構造体を含んだスプレッドシートセルを参照するように指定します。デフォルトでは、このパラメータは、AcquireImage 画像データ構造体を含むセル A0 を参照しています。また、このパラメータは、ビジョンツールのグラフィックス関数や、座標補正関数により返された、そのほかの画像データ構造体も参照できます。

フィクスチャ

 

フィクスチャ入力、またはビジョンツール関数の画像座標系の出力に関連する対象領域 (ROI) を定義します。フィクスチャに関連する ROI を設定すると、フィクスチャが回転または移動した場合に、フィクスチャに対応して ROI を確実に回転または移動できます。

デフォルト設定は画像の左上隅で、(0, 0, 0) になります。

行 (デフォルト = 0) 画像座標での行オフセット。
列 (デフォルト = 0) 画像座標での列オフセット
角度 (デフォルト = 0) 画像座標系での方位角

領域

 

これは対象領域 (ROI) とも呼ばれ、解析の対象となる画像の領域を表します。変換および回転可能な矩形の画像領域を作成します。このパラメータを選択して、プロパティシートのツールバーにある [領域の最大化] ボタンを押すと、画像全体が対象になるように領域が自動的に拡張されます。

X フィクスチャ座標での原点の X オフセット
Y フィクスチャ座標での原点の Y オフセット
高さ 領域の X 軸に沿った寸法。
領域の Y 軸に沿った寸法。
角度 フィクスチャ座標での角度。
カーブ 領域の X 軸と反対側の境界線との間の角度変位。
:  [フィクスチャ] および [領域] パラメータは、画像の範囲内で定義されている必要があります。画像の範囲内で定義されていない場合、この関数は #ERR を返します。
外部定義領域

このパラメータは、AnnulusCircleRegionEditAnnulusEditCircleEditCompositeRegionEditPolygon、または EditRegion の各関数を含むスプレッドシートセルを参照できます。このパラメータを使用すると、関数は [領域] と [フィクスチャ] の設定を無視し、参照先領域で指定された画像領域を検査します。EditCompositeRegion 関数コントロールを参照している場合は、検査領域がさまざまな形状の混合となることがあります。合成領域内の各形状は、検査領域に対して加算または減算 (マスキング) されるように割り当てることができます。

:  :このパラメータが外部定義領域の参照として設定されている場合に、この関数の内部領域を使用するには、セル参照に値 0 を入力し、このパラメータを手動で 0 に設定する必要があります。それ以外の場合、この関数は引き続き外部定義領域を参照します。

ソートする数

 

返されるブロブの数を指定します。

0 ブロブの色/背景色、および最小面積/最大面積パラメータで指定された色やサイズの設定に合うすべてのブロブを自動的に抽出していたはずです。
1 ~ 4096 (デフォルト = 1) ブロブの色/背景色、および最小面積/最大面積パラメータで指定された色やサイズの設定に合うすべてのブロブを自動的に抽出していたはずです。上限値を上回る数のブロブが検出された場合、面積の大きい順に選択されます。
:  [ソートする数] パラメータの値が 0 より大きい場合、ExtractBlobs 関数は、ブロブデータ構造体内の最初の 10 個のブロブに対応する最大 10 のエントリを含んでいる結果テーブルを自動的に挿入します。より多くのエントリを表示する場合は、最後の行をコピーし、追加の行を末尾に貼り付けることによりテーブルを拡張することができます。新しく貼り付けた行のインデックスの値を必ず繰り上げて、正しいブロブがインデックスされるようにしてください。

Threshold

 

ブロブを背景と区別するために使用されるグレースケール値を指定します。この値を決定するには、ExtractBlobs 関数の自動設定 (デフォルト設定) を使用するか、試行錯誤しながら手動設定するか、またはヒストグラム関数の計算結果への参照として設定します。

-1 (デフォルト) この関数は、しきい値を画像のグレースケール統計に基づいて自動的に評価、計算します。
0 ~ 255 グレースケールのしきい値を 0 から 255 の範囲で指定します。

Fill Holes

 

穴に累積された統計を処理する 2 つの方法のうちの 1 つを指定します。

閉じた

次のブロブの形は、ブロブ統計全体で穴の効果を有効または無効にしたときの効果を表しています。

上側が [穴を埋める] チェックボックスを OFF にしたときの結果で、下側が ON のときの結果です。[穴を埋める] チェックボックスを OFF にすると、面積の値が小さくなることがわかります。

0 = OFF (デフォルト) ブロブ統計全体における穴の効果を有効にします。例えば、ブロブに穴を追加すると、ブロブの面積が減少します。
1 = ON ブロブ統計全体における穴の効果を無効にします。例えば、ブロブに穴を追加しても、ブロブの面積は影響を受けません。

Boundary Blobs

 

ROI 境界線を横切るブロブを処理する 2 つの方法のうちの 1 つを指定します。

0 = OFF ROI 境界線と交差するブロブを除外します。ROI 境界線と交差するブロブは一切、最終的な ブロブデータ構造体には含まれません。
1 = ON (デフォルト) ROI 境界線と交差するブロブが含まれます。ROI 境界線と交差するすべてのブロブは、最終的な ブロブデータ構造体に含まれます (ただし、同時に、ブロブの色/背景色、および最小面積/最大面積 パラメータの設定も満たしている場合)。

Color Blob

 

ブロブの色を指定します。

0 = 黒 指定されたグレースケールしきい値を下回るブロブのみ返されます。
1 = 白 指定されたグレースケールしきい値を上回るブロブのみ返されます。
2 = 任意 (デフォルト) ブロブの色に対する条件はありません。

Color Background

 

取り込まれた画像の背景色を指定します。背景色がブロブの色と異なる場合、8 方向の連結性解析が実行されます。 背景色とブロブの色が一致する場合は、4 方向の連結性解析が行われます。

0 = 黒  
1 = 白 (デフォルト)  

Area Limit: Min

 
返されるブロブすべてに対する最小面積の制限をピクセル数で指定します (0 ~ 900000、デフォルト = 100)。[最小面積] の値を上回る面積を持つ穴のみ返されます。

Area Limit: Max

 
返されるブロブすべてに対する最大面積の制限をピクセル数で指定します (0 ~ 900000。デフォルト = 100000)。[最大面積] の値を下回る面積を持つブロブのみが返されます。

Show

 

画像上の ExtractBlobs グラフィックスオーバレイの表示モードを指定します。

0 = 非表示 (デフォルト) ExtractBlobs 関数を含んでいるセルがスプレッドシート内でハイライトされている場合を除き、すべてのグラフィックスが表示されません。
1 = 結果のグラフィックスのみ ブロブの輪郭が常に表示されます。
2 = 入力と結果のグラフィックス 入力画像領域と抽出されたブロブのアウトラインの両方が常に表示されます。

ExtractBlobsの出力

戻り値

画像から抽出されたブロブを含んでいるブロブデータ構造体。入力パラメータのいずれかが無効であれば #ERR を返します。

結果

ExtractBlobs 関数を初めてセルに挿入すると、スプレッドシートに閉じた結果テーブルが作成されます。[ソートする数] が 0 の場合、テーブルは GetNFound 関数のみで構成されます。[ソートする数] が 0 より大きい場合は、複数の関数が挿入され、ソートする数の行が最大になるブロブの結果テーブルが作成されます。

:  [ソートする数] パラメータの値が 0 より大きい場合、ExtractBlobs 関数は、ブロブデータ構造体内の最初の 10 個のブロブに対応する最大 10 のエントリを含んでいる結果テーブルを自動的に挿入します。より多くのエントリを表示する場合は、最後の行をコピーし、追加の行を末尾に貼り付けることによりテーブルを拡張することができます。新しく貼り付けた行のインデックスの値を必ず繰り上げて、正しいブロブがインデックスされるようにしてください。

ExtractBlobsデータアクセス関数

ここでは、画像内のブロブに関する重要な統計情報を提供する関数について説明します。

次のデータアクセス関数が、ExtractBlobs ブロブデータ構造体結果テーブルを作成するためにスプレッドシートに自動挿入されます。

スプレッドシート名 関数名 説明
インデックス なし インデックスで指定されたブロブを、エリア内で大きい順にソートして返します。
GetRow(ブロブ, ブロブインデックス)

ブロブの重心の Y 座標 (行) を返します。

閉じた

GetCol(ブロブ, ブロブインデックス)

ブロブの重心の X 座標 (列) を返します。

閉じた

角度 GetAngle(ブロブ, ブロブインデックス)

ROI の中心に対するブロブの主軸の角度を返します。

閉じた

カラー GetColor(ブロブ, ブロブインデックス) ブロブの色の値 (0 = 黒、1 = 白) を返します。
得点 GetScore(ブロブ, ブロブインデックス) ブロブが、FindBlobs 関数の条件にどの程度一致しているかを表します。
面積 GetArea(ブロブ, ブロブインデックス)

ブロブの面積を返します (ピクセル単位)。

閉じた

:  ブロブに穴がある場合、面積の値は、[穴を埋める] チェックボックスが ON か OFF かによって異なります。
伸長 GetElongation(ブロブ, ブロブインデックス)

ブロブのピクセルが、ブロブの重心からどの程度伸びているかを表す値を返します。例えば、円の伸長は 0 ですが、釘の伸長の値は大きくなります。

閉じた

GetHoles(ブロブ, ブロブインデックス) ブロブに含まれている穴の数を返します。
周囲長 GetPerimeter(ブロブ, ブロブインデックス)

ブロブを囲む境界線の長さを返します。周囲長は、ブロブの境界線を形成するピクセルの外部エッジをカウントすることにより計算されます。

閉じた

拡散 GetSpread(ブロブ, ブロブインデックス)

ブロブのピクセルが、ブロブの重心からどの程度拡散しているかを表す値を返します。例えば、円形の対象物の拡散値は楕円形の対象物の場合よりも小さくなります。

閉じた

次のデータアクセス関数を使用して、そのほかのデータの取得ができます。

しきい値 GetThresh(ブロブ) 画像のセグメント化に使用されたしきい値を返します。
検出数 GetNFound(ブロブ) 検出されたブロブの数を返します。
高さ GetHigh(ブロブ, ブロブインデックス) インデックス付きブロブの高さを返します。
GetWide(ブロブ, ブロブインデックス) インデックス付きブロブの幅を返します。
最小行 GetMinRow(ブロブ, ブロブインデックス)

画像座標フレームの方向を向いた、ブロブの周りを囲む正方形の境界ボックスの一番上の行座標を返します。

:  異なる方向を持つ境界ボックスについては、BoundingRectangle 関数を参照してください。
最小列 GetMinCol(ブロブ, ブロブインデックス)

画像座標フレームの方向を向いた、ブロブの周りを囲む正方形の境界ボックスの左端の列座標を返します。

:  異なる方向を持つ境界ボックスについては、BoundingRectangle 関数を参照してください。
最大行 GetMaxRow(ブロブ, ブロブインデックス)

画像座標フレームの方向を向いた、ブロブの周りを囲む正方形の境界ボックスの一番下の行座標を返します。

:  異なる方向を持つ境界ボックスについては、BoundingRectangle 関数を参照してください。
最大列 GetMaxCol(ブロブ, ブロブインデックス)

画像座標フレームの方向を向いた、ブロブの周りを囲む正方形の境界ボックスの左端の列座標を返します。

:  異なる方向を持つ境界ボックスについては、BoundingRectangle 関数を参照してください。

ExtractBlobs 関数の例

分析される形状すべてが含まれるように、画像領域は最大化されました。この例では、ExtractBlobs データ構造体結果テーブルに返される情報と検出されたブロブとの関連性、また、後にこの情報を使用して、ブロブを特性に基づいてソートし、フィルタする方法を示します。

この例では、次の画像は、ExtractBlobs 関数の結果ページに返された値の意味を表すために使用されています。

ExtractBlobs 関数が、スプレッドシートの空のセルに挿入されました。形状に基づいて、閉じたExtractBlobs プロパティシートのパラメータは次のように構成されました。

画像: この例ではデフォルト設定が使用されていますが、ブロブを検出する前に画像から余分なノイズを除去する処理を行う NeighborFilter 関数により生成された画像データ構造体など、このパラメータはどの画像データ構造体でも参照できます。

フィクスチャ: 画像が静止していて、回転や移動をしないので、デフォルト設定を使用しました。ただし、ExtractBlobs 関数を使用して画像の移動処理を行う場合は、画像の範囲をフィクスチャに割り当てることを推奨します。

領域: 分析される形状すべてが含まれるように、画像領域を最大化しました。領域パラメータをクリックし、プロパティシートのツールバーにある [領域の最大化] ボタンを押すと、画像全体が対象になるように領域が自動的に拡張されます。

ソートする数: 6 個の形状があるので、ソートする数は 6 に設定しました。このパラメータは 0 に設定することも可能で、その場合、自動的に 6 個の形状が抽出されます。

しきい値: デフォルト設定を使用して、グレースケールのしきい値を自動的に計算します。この画像では、グレースケール値の差は非常に顕著で、どのピクセルが暗く、どのピクセルが明るいかは明白です。微妙なグラデーションがかかり、しきい値の自動設定ではうまく値を分類できない場合は、HistHead 関数や HistTail 関数などのヒストグラム関数を使用して、画像のさまざまな領域のグレースケール濃度を判定します。

穴を埋める: デフォルト設定が使用されます。このとき、ブロブにある穴が影響するため、穴の開いたブロブの全体の面積は小さくなります。[穴を埋める] チェックボックスを ON にすると、穴の面積が加算され、穴の開いたブロブの面積が大きくなります。

境界ブロブ: デフォルト設定を使用しました。このとき、画像領域の境界線に触れているブロブも含まれます。この設定では、カメラ画像を左に移動して、円とダンベル形の図形を領域の左端と交差させたとき、これらの形状のうち、領域の境界線内に入っている部分はブロブとして抽出されます。このチェックボックスが OFF の場合、これらのブロブは処理されません。

最小/面積/最大面積: デフォルト設定を使用しました。これらの設定によって、抽出中に領域内のブロブがフィルタされ、ブロブの最大面積と最小面積の設定に基づいて、そのブロブをブロブとして分類できるかどうかが判定されます。

表示: デフォルト設定を使用しました。このとき、下の例にあるように、ブロブデータ構造体を含むセルが選択されている場合だけ、結果のグラフィックスが表示されます。

ExtractBlobs プロパティシートを設定すると、ブロブデータ構造体と閉じた結果データテーブルが生成されます。

結果を見ると、すべての形状の面積はほとんど同じで、角度、伸長、周囲長などそのほかの値は大きなばらつきを示しています。結果テーブルに返された値は、FindBlobs 関数および SortBlobs 関数を使用したブロブのフィルタとソートに使用できます。例えば、FindBlobs 関数をスプレッドシートに挿入し、ExtractBlobs 関数を参照することができます。その後、FindBlobs 関数を使用し、ブロブの拡散に基づいて、ブロブをフィルタします。さらに、スプレッドシートに SortBlobs 関数を挿入すると、この関数はあらかじめ作成しておいた FindBlobs 関数を参照して、ブロブの X、Y 位置に基づいてブロブのリストをソートすることができるようになります。