DetectBlobs

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

:  この関数は、In-Sight ファームウェア 5.2.0 以降を搭載している In-Sight ビジョンシステムでのみ使用可能です。モデル一覧およびサポートされているファームウェアバージョンについては、ファームウェアのバージョンをご参照ください。 モデル一覧およびサポートされているファームウェアバージョンについては、ファームウェアバージョンをご参照ください。

DetectBlobs概要

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

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

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

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

DetectBlobsの入力パラメータ

Syntax:DetectBlobs(画像,フィクスチャ.行,フィクスチャ.列,フィクスチャ.角度,領域.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 より大きい場合、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 の面積の値には、穴を含むブロブ領域全体が含まれています。

:  ExtractBlobs の [穴を埋める] は、[穴を埋める] チェックボックスをオンにすると別のブロブ内の穴を報告するもので、DetectBlobs の [穴を埋める] とは異なります。

境界ブロブ

 

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

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

色: ブロブ

 

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

0 = 黒 指定されたグレースケールしきい値を下回るブロブのみ返されます。
1 = 白 指定されたグレースケールしきい値を上回るブロブのみ返されます。
2 = 任意 (デフォルト) ブロブの色に対する条件はありません。
:  
  • [色: ブロブ] および [色: 背景] が同じ色に設定されている場合、ブロブは報告されません。例えば、[色: ブロブ] が「黒」に設定され、[色: 背景] も「黒」に設定されている場合、ブロブは報告されません。

    色: ブロブ = 黒

    色: 背景 = 黒

    色: ブロブ = いずれか一方が白

    色: 背景 = 黒

    ただし、[色: ブロブ] および [色: 背景] が同じ色に設定されている場合でも、ブロブが反対色のエリアによって含められているときには、ブロブが報告されます (下記の例を参照)。ブロブのいずれかの部分が反対色によって含められていない場合は、ブロブは報告されません。

    色: ブロブ = 黒

    色: 背景 = 黒

    色: ブロブ = 白

    色: 背景 = 白

    色: DetectBlobs の [色: ブロブ] はExtractBlobs の [色: ブロブ] とは異なります。こちらは [色: ブロブ] および [色: 背景] が同じ色に設定されている場合でも、ブロブの選択された色を報告します。

色: 背景

 

取り込まれた画像の背景色を指定します。8 方向の連結性解析は前景上で実行され、4 方向の連結性解析は背景上で実行されます。

0 = 黒

1 = 白 (デフォルト)

最小面積

 

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

最大面積

 

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

表示

 

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

0 = 非表示 (デフォルト)

DetectBlobs 関数を含んでいるセルがスプレッドシート内でハイライトされている場合を除き、すべてのグラフィックスが表示されません。

1 = 結果のグラフィックスのみ

ブロブの輪郭が常に表示されます。

2 = 入力と結果のグラフィックス

入力画像領域と抽出されたブロブのアウトラインの両方が常に表示されます。

DetectBlobsの出力

戻り値

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

結果

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

 

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

DetectBlobsデータアクセス関数

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

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

スプレッドシートの関数

関数名

説明

インデックス

なし

インデックスで指定されたブロブを、エリア内で大きい順にソートして返します。

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

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

閉じた

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

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

閉じた

角度

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

Y 軸に対するブロブの主 (メジャー) 軸の角度を返します。

:  矩形の [角度] の値は、ExtractBlobs 関数の角度とは異なり、180° と報告される場合があります。

閉じた

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

ブロブの色の値 (0 = 黒、1 = 白) を返します。

得点

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

ブロブが、FindBlobs 関数の条件にどの程度一致しているかを表します。

面積

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

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

閉じた

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

伸長

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

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

閉じた

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

ブロブに含まれている穴の数を返します。

:  [最小面積] の値を上回る面積を持つ穴のみ返されます。

周囲長

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

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

閉じた

拡散

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

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

閉じた

DetectBlobs 関数の例

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

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

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

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

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

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