# DetectBlobs

DetectBlobs 関数は、対象領域 (ROI) において、「連結性解析」と呼ばれる一種のブロブ解析を実行します。「連結性解析」で、ROI に含まれるピクセルは、ブロブと背景の 2 つのカテゴリに分類されます。この分類はグレースケールしきい値に基づいて行われ、このしきい値を下回るピクセルはすべて黒のカテゴリに、上回るピクセルは白のカテゴリに分類されます。

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

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

この関数は、ブロブ解析の第 1 ステップです。FindBlobs と SortBlobs はいずれも最終的に、DetectBlobs 関数のブロブデータ構造体へのセル参照を直接使用するか、または監査を介して使用します。

## DetectBlobs の入力

パラメータ | 説明
画像 | このパラメータは、スプレッドシートで画像データ構造体を含むセルを参照する必要があります。デフォルトでは、このパラメータは、データ構造体を含むセル A0 を参照しています。また、このパラメータは、画像データアクセス関数や、座標補正関数により返された、その他の画像データ構造体も参照できます。
フィクスチャ | Fixture入力、またはビジョンツール関数の画像座標系の出力に関連する対象領域 (ROI) を定義します。フィクスチャに関連する ROI を設定すると、フィクスチャが回転または移動した場合に、フィクスチャに対応して ROI を確実に回転または移動できます。 デフォルト設定は画像の左上隅で、(0, 0, 0) になります。
X | 画像座標での X オフセット。
Y | 画像座標での Y オフセット。
角度 | 画像座標系での画像の X 軸からの回転 (時計回り +/-360 度)。
領域 | これは対象領域 (ROI) とも呼ばれ、解析の対象となる画像の領域を表します。[領域] パラメータをダブルクリックすると、変換と回転が可能な対話型グラフィックスモードを作成できます。このパラメータを選択して、プロパティシートの [ジョブの編集] ツールバーにある [領域の最大化] ボタンを押すと、画像全体が対象になるように領域が自動的に拡張されます。
X | フィクスチャ座標での原点の X オフセット
Y | フィクスチャ座標での原点の Y オフセット
幅 | 領域の X 軸に沿った寸法
高さ | 領域の Y 軸に沿った寸法
角度 | フィクスチャ座標での角度
カーブ | 領域の X 軸と反対側の境界線との間の角度変位
注: [フィクスチャ] および [領域] パラメータは、画像の範囲内で定義されている必要があります。画像の範囲内で定義されていない場合、この関数は #ERR を返します。
外部定義領域 | このパラメータは、Annulus、Circle、Region、 EditAnnulus、EditCircle、EditCompositeRegion、EditPolygon、EditRegion へのセル参照を使用します。このパラメータを使用すると、関数は [領域] と [フィクスチャ] の設定を無視し、参照先領域に指定された画像領域を検査します。EditCompositeRegion 関数コントロールを参照している場合は、検査領域がさまざまな形状の混合となることがあります。合成領域内の各形状は、検査領域に対して加算または減算 (マスキング) されるように割り当てることができます。 注: このパラメータが外部定義領域の参照として設定されている場合に、この関数の内部領域を使用するには、セル参照に値 0 を入力し、このパラメータを手動で 0 に設定する必要があります。それ以外の場合、この関数は引き続き外部定義領域を参照します。
ソートする数 | ソートするブロブの数を指定します。
0 | [ブロブの色]/[背景色]、および [最小面積]/[最大面積] パラメータで指定した色やサイズの設定に合うすべてのブロブを返します。
1 ～ 4096 (デフォルト = 1) | [ブロブの色]/[背景色]、および [最小面積]/[最大面積] パラメータで指定した色やサイズの設定に合うブロブを、指定した数を上限として返します。上限値を上回る数のブロブが検出された場合、面積の大きい順に選択されます。
注: [ソートする数] パラメータの値が 0 より大きい場合、DetectBlobs 関数は、ブロブデータ構造体の最初の 10 個のブロブに対応する最大 10 のエントリを含んでいる結果テーブルを自動的に挿入します。より多くのエントリを表示する場合は、最後の行をコピーし、追加の行を末尾に貼り付けることによりテーブルを拡張することができます。新しく貼り付けた行のインデックスの値を必ず繰り上げて、正しいブロブがインデックスされるようにしてください。
しきい値 | ブロブを背景と区別するために使用されるグレースケール値を指定します。この値を決定するには、DetectBlobs 関数の自動設定 (デフォルト設定) を使用するか、試行錯誤して手動設定するか、またはヒストグラム関数の計算結果へのセル参照として設定します。
-1 (デフォルト) | この関数は、しきい値を画像のグレースケール統計に基づいて自動的に評価、計算します。
0 ～ 255 | グレースケールのしきい値を 0 から 255 の範囲で指定します。
穴を埋める | 穴に累積された統計を処理する 2 つの方法のうちの 1 つを指定します。
0 = OFF (デフォルト) | ブロブ統計全体における穴の効果を有効にします。例えば、ブロブに穴を追加すると、ブロブの面積が減少します。 注: OFF に設定すると、別のブロブ内の穴であるブロブが報告されます。次の例では、ブロブ 0 内の穴であるブロブ 1 が報告されています。ブロブ統計のブロブ 0 の面積 (上の行) の値に、ブロブ 1 の面積 (下の行) は含まれていません。
1 = ON | ブロブ統計全体における穴の効果を無効にします。例えば、ブロブに穴を追加しても、ブロブの面積は影響を受けません。 注: ON に設定すると、別のブロブ内の穴であるブロブは無視されます。次の例では、ブロブ 0 内の穴は無視され、1 つのブロブ (ブロブ 0) だけが報告されています。ブロブ統計のブロブ 0 の面積の値には、穴を含むブロブ領域全体が含まれています。
境界ブロブ | ROI 境界線を横切るブロブを処理する 2 つの方法のうちの 1 つを指定します。
0 = OFF | ROI 境界線と交差するブロブを除外します。ROI 境界線と交差するブロブは、最終的なブロブデータ構造体には含まれません。
1 = ON (デフォルト) | ROI 境界線と交差するブロブが含まれます。ROI 境界線と交差するすべてのブロブは、最終的なブロブデータ構造体に含まれます (ただし、同時に [ブロブの色]/[背景色]、および [最小面積]/[最大面積] パラメータの設定も満たしている場合)。
ブロブの色 | ブロブの色を指定します。
0 = 黒 | 指定されたグレースケールしきい値を下回るブロブのみ返されます。
1 = 白 | 指定されたグレースケールしきい値を上回るブロブのみ返されます。
2 = 任意 (デフォルト) | ブロブの色に対する条件はありません。
注: [ブロブの色] と [背景色] が同じ色に設定されている場合、ブロブは報告されません。例えば、[ブロブの色] が黒に設定され、[背景色] も黒に設定されている場合、ブロブは報告されません。
ブロブの色 = 黒 背景色 = 黒 | ブロブの色 = どちらか一方または白 背景色 = 黒
ただし、[ブロブの色] と [背景色] が同じ色に設定されていても、反対色の領域で囲まれているブロブは報告されます (以下の例を参照)。ブロブの一部が反対色で囲まれていない場合、そのブロブは報告されません。
ブロブの色 = 黒 背景色 = 黒 | ブロブの色 = 白 背景色 = 白
背景色 | 取り込まれた画像の背景色を指定します。8 方向の連結性解析は前景で実行され、4 方向の連結性解析は背景で実行されます。
0 = 黒
1 = 白 (デフォルト)
最小面積 | 返されるすべてのブロブの面積の下限をピクセル数で指定します (デフォルト = 100)。最小面積値を上回る面積を持つブロブのみが返されます。 パラメータの範囲は次のとおりです。 下限:0 上限:接続されているビジョンシステムの解像度 (幅 * 高さ)。 例えば、In-Sight D902 ビジョンシステムに接続している場合、パラメータの範囲は 0 ～ 2,304,000 (1920x1200) です。
最大面積 | 返されるすべてのブロブの面積の上限をピクセル数で指定します (デフォルト = 100000)。最小面積値を下回る面積を持つブロブのみが返されます。 パラメータの範囲は次のとおりです。 下限:0 上限:接続されているビジョンシステムの解像度 (幅 * 高さ)。 例えば、In-Sight D902 ビジョンシステムに接続している場合、パラメータの範囲は 0 ～ 2,304,000 (1920x1200) です。
表示 | 画像上の DetectBlobs グラフィックスオーバレイの表示モードを指定します。
0 = 非表示 (デフォルト) | DetectBlobs 関数を含んでいるセルがスプレッドシート内でハイライトされている場合を除き、すべてのグラフィックスが表示されません。
1 = 結果のグラフィックスのみ | ブロブの輪郭が常に表示されます。
2 = 入力と結果のグラフィックス | 入力画像領域と抽出されたブロブの輪郭の両方が常に表示されます。

## DetectBlobs の出力

戻り値 | 画像から抽出されたブロブを含んでいるブロブデータ構造体。入力パラメータが無効であれば #ERR を返します。
結果 | DetectBlobs 関数を初めてセルに挿入すると、次のブロブデータアクセス関数を使用して、スプレッドシート内に結果テーブルが作成されます。 注: [ソートする数] が 0 の場合、テーブルは GetNFound 関数のみで構成されます。 [ソートする数] パラメータの値が 0 より大きい場合、DetectBlobs 関数は、ブロブデータ構造体の最初の 10 個のブロブに対応する最大 10 のエントリを含んでいる結果テーブルを自動的に挿入します。より多くのエントリを表示する場合は、最後の行をコピーし、追加の行を末尾に貼り付けることによりテーブルを拡張することができます。新しく貼り付けた行のインデックスの値を必ず繰り上げて、正しいブロブがインデックスされるようにしてください。
ラベル | 関数名 | 説明
X | GetX(ブロブ, ブロブインデックス) | ブロブの重心の X 座標を返します。
Y | GetY(ブロブ, ブロブインデックス) | ブロブの重心の Y 座標を返します。
角度 | GetAngle(ブロブ, ブロブインデックス) | ブロブの Y 軸に対する主軸の角度を返します。
色 | GetColor(ブロブ, ブロブインデックス) | ブロブの色の値 (0 = 黒、1 = 白) を返します。
得点 | GetScore(ブロブ, ブロブインデックス) | ブロブが、FindBlobs 関数の条件にどの程度一致しているかを表します。
面積 | GetArea(ブロブ, ブロブインデックス) | ブロブの面積を返します (ピクセル単位)。 注: ブロブに穴がある場合、面積の値は、[穴を埋める] チェックボックスが ON か OFF かによって異なります。
伸長 | GetElongation(ブロブ, ブロブインデックス) | ブロブのピクセルが、ブロブの重心からどの程度伸びているかを表す値を返します。例えば、円の伸長は 0 ですが、釘の伸長の値は大きくなります。
穴 | GetHoles(ブロブ, ブロブインデックス) | ブロブに含まれている穴の数を返します。 注: 面積が最小面積値を上回っている穴のみが返されます。
周囲長 | GetPerimeter(ブロブ, ブロブインデックス) | ブロブを囲む境界線の長さを返します。周囲長は、ブロブの境界線を形成するピクセルの外部エッジをカウントすることにより計算されます。
拡散 | GetSpread(ブロブ, ブロブインデックス) | ブロブのピクセルが、ブロブの重心からどの程度拡散しているかを表す値を返します。例えば、円形の対象物の拡散値は楕円形の対象物の場合よりも小さくなります。

## DetectBlobs の例

DetectBlobs 関数は、連結しているピクセルのブロブを識別して見つけるために使用されます。ブロブは、さまざまな形状とサイズで構成されています。この例では、DetectBlobs データ構造体の結果テーブルに返される情報と検出されたブロブとの関連性と、後でこの情報を使用してブロブを特性に基づいてソートしてフィルタ処理する方法を示します。

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

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

- 画像:この例ではデフォルト設定が使用されていますが、ブロブを検出する前に画像から余分なノイズを除去する処理を行う Filter 関数により生成された画像データ構造体など、このパラメータはどの画像データ構造体でも参照できます。
- フィクスチャ:画像が静止していて、回転や移動をしないので、デフォルト設定を使用しました。ただし、DetectBlobs 関数を使用して画像の移動処理を行う場合は、画像の範囲をFixtureに割り当てることを推奨します。
- 領域:分析される形状すべてが含まれるように、画像領域を最大化しました。領域パラメータをクリックし、プロパティシートのツールバーにある [領域の最大化] ボタンを押すと、画像全体が対象になるように領域が自動的に拡張されます。
- ソートする数:[ソートする数] は 6 に設定しました。このパラメータは 0 に設定することも可能で、その場合、[ブロブの色]/[背景色]、および [最小面積]/[最大面積] パラメータで指定した色やサイズの設定に合うすべてのブロブが自動的に抽出されます。
- しきい値:デフォルト設定を使用して、グレースケールのしきい値を自動的に計算します。この画像では、グレースケール値の差は非常に顕著で、どのピクセルが暗く、どのピクセルが明るいかは明白です。微妙なグラデーションがかかり、しきい値の自動設定ではうまく値を分類できない場合は、HistHead 関数や HistTail 関数などのヒストグラム関数を使用して、画像のさまざまな領域のグレースケール濃度を判定します。
- 穴を埋める:デフォルト設定が使用されます。このとき、ブロブにある穴が影響するため、穴の開いたブロブの全体の面積は小さくなります。[穴を埋める] チェックボックスをオンにすると、ブロブ内の穴が報告されて穴の面積が加算されるため、穴の開いたブロブの面積が大きくなります。
- 境界ブロブ:デフォルト設定を使用しました。このとき、画像領域の境界線に触れているブロブも含まれます。この設定では、カメラ画像を左に移動して、最も大きい円と最も小さい正方形の図形を画像領域の左端と交差させたとき、これらの形状のうち、領域の境界線内に入っている部分はブロブとして抽出されます。このチェックボックスがオフの場合、これらのブロブは処理されません。
- 最小面積/最大面積:デフォルト設定を使用しました。これらの設定によって、抽出中に領域内のブロブがフィルタされ、ブロブの最大面積と最小面積の設定に基づいて、そのブロブをブロブとして分類できるかどうかが判定されます。
- 表示:デフォルト設定を使用しました。このとき、下の例にあるように、ブロブデータ構造体を含むセルが選択されている場合だけ、結果のグラフィックスが表示されます。

DetectBlobs プロパティシートの設定後、ブロブデータ構造体と結果データテーブルが作成されます。

結果テーブルに返された値は、FindBlobs 関数および SortBlobs 関数を使用したブロブのフィルタとソートに使用できます。例えば、FindBlobs 関数をスプレッドシートに挿入し、DetectBlobs 関数を参照することができます。その後、FindBlobs 関数を使用し、ブロブの拡散に基づいて、ブロブをフィルタします。さらに、スプレッドシートに SortBlobs 関数を挿入すると、この関数はあらかじめ作成しておいた FindBlobs 関数を参照して、ブロブの X、Y 位置に基づいてブロブのリストをソートできます。