DetectBlobs
DetectBlobs 関数は、対象領域 (ROI) において、「連結性解析」と呼ばれる一種のブロブ解析を実行します。
DetectBlobs概要
この「連結性解析」の間、ROI に含まれるピクセルは、ブロブと背景の 2 つのカテゴリに分類されます。分類はグレースケールしきい値に基づいて行われ、このしきい値を下回るピクセルはすべて黒カテゴリに、上回るピクセルは白カテゴリに入ります。
同様に、類似した値を持つピクセルは、その「色」、および周囲のピクセルとの「接触」の有無を基準にグループ化されます。背景ピクセルは、左、右、上、下にあるピクセルと接触している場合は、周囲のピクセルと接続できます。一方、ブロブピクセルを周囲のピクセルと接続できるのは、左、右、上、下、または斜めにあるピクセルと接触している場合です。
処理の完了した画像は、ブロブまたは背景ピクセル値に分類されます。ROI 内のブロブは、画像内での位置 (列、行の座標)、面積、周囲長、拡散、伸長などの物理的な特性と割り当てられた値によって識別されます。抽出されたブロブのデータは、ブロブデータ構造体に格納、報告されます。
この関数は、ブロブ分析の第 1 ステップとなります。FindBlobs と SortBlobs 関数は両方とも最終的に、直接またはセル依存関係の連鎖の中で、DetectBlobs 関数のブロブデータ構造体を参照します。
DetectBlobsの入力パラメータ
Syntax:DetectBlobs(画像,フィクスチャ.行,フィクスチャ.列,フィクスチャ.角度,領域.X,領域.Y,領域.高さ,領域.幅,領域.角度,領域.カーブ,外部定義領域,ソートする数,しきい値,穴を埋める,境界ブロブ,ブロブの色,背景色,最小面積,最大面積,表示)
画像データ構造体を含んだスプレッドシートセルを参照するように指定します。デフォルトでは、このパラメータは、AcquireImage 画像データ構造体を含むセル A0 を参照しています。また、このパラメータは、ビジョンツールのグラフィックス関数や、座標補正関数により返された、そのほかの画像データ構造体も参照できます。 |
||||||||||||||||||||||||
フィクスチャ入力、またはビジョンツール関数の画像座標系の出力に関連する対象領域 (ROI) を定義します。フィクスチャに関連する ROI を設定すると、フィクスチャが回転または移動した場合に、フィクスチャに対応して ROI を確実に回転または移動できます。 デフォルト設定は画像の左上隅で、(0, 0, 0) になります。
|
||||||||||||||||||||||||
これは対象領域 (ROI) とも呼ばれ、解析の対象となる画像の領域を表します。変換および回転可能な矩形の画像領域を作成します。このパラメータを選択して、プロパティシートのツールバーにある [領域の最大化] ボタンを押すと、画像全体が対象になるように領域が自動的に拡張されます。
|
||||||||||||||||||||||||
注 : [フィクスチャ] および [領域] パラメータは、画像の範囲内で定義されている必要があります。画像の範囲内で定義されていない場合、この関数は #ERR を返します。
|
||||||||||||||||||||||||
このパラメータは、Annulus、Circle、Region、EditAnnulus、EditCircle、EditCompositeRegion、EditPolygon、または EditRegion の各関数を含むスプレッドシートセルを参照できます。このパラメータを使用すると、関数は [領域] と [フィクスチャ] の設定を無視し、参照先領域で指定された画像領域を検査します。EditCompositeRegion 関数コントロールを参照している場合は、検査領域がさまざまな形状の混合となることがあります。合成領域内の各形状は、検査領域に対して加算または減算 (マスキング) されるように割り当てることができます。 注 : :このパラメータが外部定義領域の参照として設定されている場合に、この関数の内部領域を使用するには、セル参照に値 0 を入力し、このパラメータを手動で 0 に設定する必要があります。それ以外の場合、この関数は引き続き外部定義領域を参照します。
|
||||||||||||||||||||||||
返されるブロブの数を指定します。
注 : [ソートする数] パラメータの値が 0 より大きい場合、DetectBlobs 関数は、ブロブデータ構造体内の最初の 10 個のブロブに対応する最大 10 のエントリを含んでいる結果テーブルを自動的に挿入します。より多くのエントリを表示する場合は、最後の行をコピーし、追加の行を末尾に貼り付けることによりテーブルを拡張することができます。新しく貼り付けた行のインデックスの値を必ず繰り上げて、正しいブロブがインデックスされるようにしてください。
|
||||||||||||||||||||||||
ブロブを背景と区別するために使用されるグレースケール値を指定します。この値を決定するには、DetectBlobs 関数の自動設定 (デフォルト設定) を使用するか、試行錯誤しながら手動設定するか、またはヒストグラム関数の計算結果への参照として設定します。
|
||||||||||||||||||||||||
穴に累積された統計を処理する 2 つの方法のうちの 1 つを指定します。
注 : ExtractBlobs の [穴を埋める] は、[穴を埋める] チェックボックスをオンにすると別のブロブ内の穴を報告するもので、DetectBlobs の [穴を埋める] とは異なります。
|
||||||||||||||||||||||||
ROI 境界線を横切るブロブを処理する 2 つの方法のうちの 1 つを指定します。
|
||||||||||||||||||||||||
ブロブの色を指定します。
注 :
|
||||||||||||||||||||||||
取り込まれた画像の背景色を指定します。8 方向の連結性解析は前景上で実行され、4 方向の連結性解析は背景上で実行されます。
|
||||||||||||||||||||||||
返されるブロブすべてに対する最小面積の制限をピクセル数で指定します (0 ~ 900000、デフォルト = 100)。[最小面積] の値を上回る面積を持つ穴のみ返されます。 |
||||||||||||||||||||||||
返されるブロブすべてに対する最大面積の制限をピクセル数で指定します (0 ~ 900000。デフォルト = 100000)。[最大面積] の値を下回る面積を持つブロブのみが返されます。 |
||||||||||||||||||||||||
画像上にオーバレイする DetectBlobs グラフィックスの表示モードを指定します。
|
DetectBlobsの出力
戻り値 |
画像から抽出されたブロブを含んでいるブロブデータ構造体。入力パラメータのいずれかが無効であれば #ERR を返します。 |
DetectBlobs 関数を初めてセルに挿入すると、スプレッドシートに 注 : [ソートする数] パラメータの値が 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 位置に基づいてブロブのリストをソートすることができるようになります。