Operator BlobDetector2D

オペレーターライブラリ:Blob

BlobDetector2D オペレーターは、バイナリ画像内のオブジェクトを検出し、そのプロパティを決定します。オペレーターの出力は、各オブジェクトのプロパティを表す複数のデータストリームです。

このオペレーターの機能は、VisualAppletsで完全にシミュレーションできます。

Library Blobのイントロダクションもあわせてお読みください。

概要

BlobDetector2D は、BoundingBox、Area、および Center of Gravity X と Y の機能をサポートしています。

[注] Center of Gravity X and Yはオペレーターの直接の出力ではない

出力ポートCenterXおよびCenterYは、実際には画像モーメントM10(CenterX)およびM01(CenterY)を提供します。オブジェクトの重心を抽出するには、モーメントを抽出された面積で除算する必要があります:

入力画像は、オペレーターによって行単位で処理されます。オペレーターは未来を予測できないため、後で接続される領域は最初は独立しているように見える場合があります。したがって、このテキストでは、1つの行内の接続されたピクセルは object artifacts と呼ばれます。BlobDetector2D オペレーターは、それらの object artifacts が後続の行の他の object artifacts と重なっているかどうかを確認します。これは、オブジェクトが本当に独立しているのか、それともより大きなオブジェクトの一部であるのかを判断するためです。オペレーターが処理できる object artifacts の最大数は、LabelCount パラメータによって定義されます。object artifacts の数が LabelCount の値を超えると、データが失われ、オブジェクト結果の整合性が保たれなくなります。これは context corruption と呼ばれます。データが失われた行には、ErrorFlag で判別できる Line Error ダミーオブジェクトがマークされます。破損したコンテキスト内の後続のすべてのオブジェクトには、そのようにフラグが立てられます。コンテキストの破損は、フレームの終了時またはアプレットの再起動によってコンテキストが自動的にリセットされると終了します。すべてのエラーフラグは、'Output Ports' セクションにリストされています。

ほとんどの場合、コンテキストの破損を防ぐために必要なラベルの数は、1つのライン内のobject artifactの最大数に等しくなります。neighborhood = 4およびneighborhood = 8の場合、必要な正確な数は若干異なります:

  • neighborhood = 4の場合、コンテキストの破損を防ぐために必要なラベルの数は、ラインNの位置Xにある任意のピクセルとラインN+1の位置Xにあるピクセルの間にあるobject artifactの最大数に等しくなります。

  • neighborhood = 8の場合、コンテキストの破損を防ぐために必要なラベルの数は、ラインNの位置Xにある任意のピクセルとラインN+1の位置X+1にあるピクセルの間にあるobject artifactの最大数に等しくなります。

選択したラベルの量がユースケースに対して十分であるかどうかわからない場合は、シミュレーションで確認してください。

BlobDetector2D モジュールをインスタンス化する際、作成する出力ポートを定義できます。ポートを有効または無効にすると、対応する機能も自動的に有効または無効になります。これらのポートを確認した後は、変更できなくなります。他の出力ポートが必要な場合は、別の BlobDetector2D モジュールをインスタンス化する必要があります。

パフォーマンス

ブロブ検出器オペレーターは、処理速度(つまり帯域幅)が画像コンテンツに依存する数少ないオペレーターの1つです。このオペレーターは、連続するライン内で前景ピクセルと背景ピクセルの変化が少ない画像に対して最も効果的に動作します。したがって、ノイズが多い場合や、複数のライン内でobject artifactの数が多い場合、データスループットが著しく低下します。ただし、これは非常に強いノイズを含む画像にのみ適用されます。

レイテンシー

オペレーターは、入力画像を行単位で処理することで、最小限のレイテンシで動作します。オブジェクトの終了が明確になると、オブジェクトの機能がオペレーターによって即座に出力として提供されます。したがって、オブジェクトの出力は、それが終了するのと同じ行で行われます。これにより、画像自体がオペレーターによって処理されている間でも、完了したオブジェクト機能の後処理が可能になります。

DMA およびその他のいくつかのオペレーターは、完了を報告する前にフレーム終了信号を待機することに注意してください。フレーム終了信号は、入力画像の最後の行が処理されると生成されます。

リソース消費量

オペレーターのリソース消費量は、有効な機能、機能に使用されるビット数、および選択されたラベルの数に依存します。したがって、Baslerでは、不要な機能を無効にすること、およびLabelCountパラメータを設定する際には慎重に行うことを推奨しています。

[注] バウンディングボックスのポートの一部を無効化してもリソースは節約されません

バウンディングボックスには複数の出力ポートがあるため、この機能はすべてのポートが無効化されている場合にのみ無効になります。バウンディングボックスのポートを部分的に無効化しても、リソースの節約にはなりません。

[注] 最大値を手動で設定することでリソースを節約する

検出対象のオブジェクトの最大値が分かっている場合は、リソースを節約し、デザインの扱いやすくするために、リンクのBit Widthを手動で設定することをBaslerでは推奨しています。

入力ポート

ブロブ検出器の ImageI 入力には、バイナリ(ピクセル Bit Width 1)、2D 画像が必要です。オペレーターは、画像内の異なる行長の入力や、空の行および空のフレームをサポートしています。

オペレーターは、前景値が ONE であり、背景値が ZERO であると仮定します。事前の二値化処理でこの要件を満たしていることを確認してください。

出力ポート

出力は、VALT_IMAGE2D 画像形式の形式で表されます。出力ポートのそれぞれは、1つのオブジェクト機能 / オブジェクトプロパティを表します。それらは同期しており、合わせて1つの単一のオブジェクトを記述します。各出力ピクセルは、完了したオブジェクトまたはステータスエラーオブジェクトのいずれかの値を提供します。この出力が抽出されたオブジェクトであるかステータスエラーオブジェクトであるかは、ErrorFlagsO 出力ポートによって示されます。オブジェクトを表すピクセルは、オブジェクトが完了したのと同じ行に表示されます。それらは完了の順序に出力されます。たとえば、2つのオブジェクトが10行目で終了します。オブジェクト A の最後のピクセルは X 座標 42 を持ち、オブジェクト B の最後のピクセルは X 座標 97 を持ちます。したがって、オブジェクト A は最初のエントリであり、オブジェクト B はオペレーターの出力ポートにおける 2 番目のピクセルです。オブジェクトが完了せず、エラーが発生しなかった行は空です。

Propertyデータのオーバーフローを防ぐため、出力ポートの幅は、指定された入力形式に基づいて自動的に適応します。または、出力ポートの幅を手動で設定することもできます。リンクのBit Widthの手動設定は、オペレーターのPropertyで有効にしている場合、Area/CenterX/CenterYで使用できます。

ポート ErrorFlagsO は、オーバーフローや追加の情報タグに関するいくつかのエラーフラグを出力します。各ビットは特定のエラーフラグ用に予約されています。これらのエラーフラグは、ハードウェアの実行環境またはシミュレーションで確認できます。シミュレーションでこれらのエラーフラグを確認するには:

  • シミュレーションプローブを BlobDetector2D の ErrorFlagsO ポートに追加します。

  • オーバーフローを引き起こす画像をシミュレーションに追加します。

  • シミュレーションを実行します。

  • 出力ポートの Simulation Probe View を開きます。

  • 調べたいピクセルまでスクロールし、拡大してピクセル値を確認し、ピクセル値を次のように設定します Hex:
    シミュレーションプローブビューのエラーフラグ

    図 403:シミュレーションプローブビューアのエラーフラグ


  • 16進数値内のアクティブなビットは、ブロブオブジェクトに関するさまざまなエラーやステータス情報を示しています。詳細は以下の表を確認してください。

エラーフラグの詳細な説明は、以下のパラメータ説明に記載されています。概要は次の表に示されています:

Bit # 説明 注意事項
0 Area のオーバーフロー

オブジェクトの Area の値が、処理履歴のどこかの時点で、提供された出力 Bit Width を超えました。

1 CenterX Overflow

オブジェクトの CenterX 値(画像モーメント M10)は、処理履歴のいずれかの時点で指定された出力 Bit Width を超過しました。

2 CenterY Overflow

オブジェクトの CenterY 値(画像モーメント M01)は、処理履歴のいずれかの時点で指定された出力 Bit Width を超過しました。

3, 4 予備

将来の拡張用に予約されています。

5 Line Error

選択したラベル数で処理できる数を超えるオブジェクトアーティファクトが発生した行を示すダミーオブジェクトを示します。利用可能な Memory は、後続の受信データを処理するには不十分です。

これはダミーオブジェクトであるため、他のポートのフィーチャデータ値には有効なデータは含まれていません。シミュレーションではフィーチャ値は 0 として表示されますが、ハードウェアでは任意の値になる可能性があります。下位の ErrorBits 7-0 が有効なフィーチャとその値に結びついているため、これらのフラグもハードウェアとシミュレーションで異なる場合があります。

このエラーフラグが存在する場合、それは常にその行の最初のオブジェクト出力になります。

6 ContextCorruption

選択したラベル数で処理できる数を超えるオブジェクトアーティファクトが発生しました。利用可能な Memory は、すべての受信データを処理するには不十分です。フラグが設定されたオブジェクトの整合性は保証できません。

オペレーターは、フレームの終了時またはアク実ションの再起動時に正しい機能に戻ります。後続の画像は、前のコンテキスト破損の影響を受けることなく処理されます。

表 37:ブロブエラーフラグの説明


I/O Property

Property 値
オペレータータイプ M
Input Link ImageI、データ入力
Output Links BoundingX0O、データ出力
BoundingX1O、データ出力
BoundingY1O、データ出力
BoundingHeightO、データ出力
AreaO、データ出力
CenterXO、データ出力
CenterYO、データ出力
ErrorFlagsO、データ出力

サポートされているリンクフォーマット

Link Parameter 入力リンク ImageI 出力リンク BoundingX0O 出力リンク BoundingX1O 出力リンク BoundingY1O 出力Link BoundingHeightO 出力リンク AreaO 出力リンク CenterXO 出力リンク CenterYO Output Link ErrorFlagsO
Bit Width 1 auto1 auto1 auto2 auto3 [1, 48] / auto4 [1, 48] / auto4 [1, 48] / auto4 7
Arithmetic unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned
Parallelism 64 1 1 1 1 1 1 1 1
Kernel Columns 1 1 1 1 1 1 1 1 1
Kernel Rows 1 1 1 1 1 1 1 1 1
Img Protocol VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D
Color Format VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY
Color Flavor FL_NONE FL_NONE FL_NONE FL_NONE FL_NONE FL_NONE FL_NONE FL_NONE FL_NONE
Max. Img Width 2^16 auto5 auto5 auto5 auto5 auto5 auto5 auto5 auto5
Max. Img Height 2^24 as I as I as I as I as I as I as I as I

1

Bit Widthは、ImageI Linkの入力最大画像幅に基づいています。次のように計算されます。 ceil(log2(Max. Img Width)).

2

Bit Width は、ImageI リンクの着信最大画像高に基づいています。次のように計算されます。 ceil(log2(Max. Img Height)).

3

Bit Width は、ImageI リンクの着信最大画像高に基づいています。次のように計算されます。 ceil(log2(Max. Img Height + 1)).

4

パラメータ AreaBitWidthMode、CenterXBitWidthMode、および CenterYBitWidthModeを介して、Linkを手動で設定するか自動モードを使用するかを選択できます。Linkを手動で編集する場合、許可される範囲は [1, 48] です。

5

最大画像幅は、パラメータ LabelCount + 1 に等しくなります。

パラメーター

LabelCount
タイプ static パラメータ
Default 100
範囲 [1, (最大Img Width(入力Link I) / 2 + 2]

部分オブジェクトを内部で追跡するために、このパラメータは利用可能なラベルの数を設定します。また、1行に出力される可能性のあるオブジェクトの最大数にも影響します。BlobDetector2D オペレーターに必要なリソースはラベルの数に依存することに注意してください。このパラメータの適切な値の範囲は 100 から 500 の間であり、ほとんどのアプリケーションに十分です。

選択したラベルよりも多くの部分オブジェクトが発生した場合、データが失われ、フレームのコンテキストが破損します。この場合、提供されたデータが信頼できなくなったことを示すために、出力リンク ErrorFlagsO のビット 6 が「1」になります。エラービットはデータの損失を検出したときに設定され、出力フレームの終了時にリセットされます。

Neighborhood
タイプ static パラメータ
Default EightConnected
範囲 {FourConnected, EightConnected}

このパラメータは、Object Detectionに必要な近傍を選択します。ピクセル近傍の詳細な説明については、'Definition'を参照してください。

AreaBitWidthMode
タイプ static パラメータ
Default AutomaticFrameMaximum
範囲 {AutomaticFrameMaximum, LinkManuallyEditable}

オブジェクトの面積は、すべてのオブジェクトの前景ピクセルの合計によって定義されます。

AutomaticContextMaximum が選択されている場合、オペレーターはオブジェクトの最大サイズのビットを自動的に設定します。オブジェクトの最大の可能なサイズは、入力リンク I における最大幅と高さに依存します。オブジェクトの理論上の最大面積は、画像のすべてのピクセルが前景色値で構成されている場合、つまり、1つの大きなオブジェクトである白い入力画像の場合に達成されます。

最大可能な CenterX(画像モーメント M10)値がわかっている場合、または特定の X 座標のオブジェクトのみが関心対象である場合は、LinkManuallyEditable モードを使用することをお勧めします。これにより、リソースが節約され、デザイン全体のビルド時間が短縮されます。LinkManuallyEditable モードでは、[1, 48] の許容範囲内でリンクの Bit Width プロパティを編集できます。リンクの Bit Width は、Area 機能を計算するために内部で使用される Bit Width に直接変換されるため、全体的なリソース消費に影響します。

Bit Width がオブジェクトの Area の値に十分でない場合は、ErrorFlagO リンク(ビット 0)によって示されます。

CenterXBitWidthMode
タイプ static パラメータ
Default AutomaticFrameMaximum
範囲 {AutomaticFrameMaximum, LinkManuallyEditable}

Center of Gravity機能の説明については、'Center of Gravity'を参照してください。

出力は画像モーメント M10 であることに注意してください。Center of Gravity X のピクセル座標を受け取るには、DIV オペレーターを使用するか、ホスト PC で値を面積で割ります。

AutomaticContextMaximumを設定すると、オペレーターが自動的に出力ビットを設定します。オブジェクトの取りうる最大サイズは、入力リンクIでの最大幅と高さによって異なります。オブジェクトの理論上の最大CenterX値は、画像のすべてのピクセルが前景値で構成されている場合、つまり、1つの大きなオブジェクトである白い入力画像の場合に達成されます。大きな入力画像を使用する場合、CenterXOリンクのBit Widthが非常に大きくなることがあります。

可能な最大CenterX(画像モーメントM10)値がわかっている場合、または特定のX座標のオブジェクトのみに関心がある場合は、モードとしてLinkManuallyEditableを使用することをお勧めします。これによりリソースが節約され、デザイン全体のビルド時間が短縮されます。LinkManuallyEditableモードでは、許可された範囲 [1, 48] 内でリンクのBit Width Propertyを編集できます。リンクのBit Widthは、CenterX機能の内部計算に使用されるBit Widthに直接変換されるため、全体的なリソース消費に影響します。

オブジェクトのCenterX値に対してBit Widthが十分でない場合、それはErrorFlagOリンク(ビット1)によって示されます。

CenterYBitWidthMode
タイプ static パラメータ
Default AutomaticFrameMaximum
範囲 {AutomaticFrameMaximum, LinkManuallyEditable}

重心の説明については、'Center of Gravity'を参照してください。

出力は画像モーメントM01であることに注意してください。Center of Gravity Yのピクセル座標を取得するには、DIVオペレーターを使用するか、ホストPC上で面積で値を除算してください。

AutomaticContextMaximumを設定すると、オペレーターが自動的に出力ビットを設定します。オブジェクトの取りうる最大サイズは、入力リンクIでの最大幅と高さによって異なります。オブジェクトの理論上の最大CenterY値は、画像のすべてのピクセルが前景値で構成されている場合、つまり、1つの大きなオブジェクトである白い入力画像の場合に達成されます。大きな入力画像を使用する場合、CenterYOリンクのBit Widthが非常に大きくなることがあります。

可能な最大CenterY(画像モーメントM10)値がわかっている場合、または特定のY座標のオブジェクトのみに関心がある場合は、モードとしてLinkManuallyEditableを使用することをお勧めします。これによりリソースが節約され、デザイン全体のビルド時間が短縮されます。LinkManuallyEditableモードでは、許可された範囲 [1, 48] 内でリンクのBit Width Propertyを編集できます。リンクのBit Widthは、Area機能の内部計算に使用されるBit Widthに直接変換されるため、全体的なリソース消費に影響します。

オブジェクトのCenterY値に対してBit Widthが十分でない場合、それはErrorFlagOリンク(ビット2)によって示されます。

使用例

BlobDetector2Dオペレーターの使用方法は、以下の例に示されています:

  • 'BlobDetector2D'

    例 - エリアスキャンアプリケーションにおけるBlobDetector2Dオペレーターの使用方法を示しています。