オペレーターライブラリ:Blob
BlobDetector1Dオペレーターは、高さに制限のないバイナリ画像内のオブジェクトを検出し、そのPropertyを算出します。オペレーターの出力は、各オブジェクトのPropertyを表す複数のデータストリームになります。
このオペレーターの機能は、VisualAppletsで完全にシミュレーションできます。
Library Blobのイントロダクションもあわせてお読みください。
BlobDetector1Dは、BoundingBox、Area、Center of Gravity XおよびYの機能を提供します。
![]() |
Center of Gravity X and Yはオペレーターの直接の出力ではない |
|---|---|
|
出力ポートCenterXおよびCenterYは、実際には画像モーメントM10(CenterX)およびM01(CenterY)を提供します。オブジェクトの重心を抽出するには、モーメントを抽出された面積で除算する必要があります:
|
BlobDetector1Dオペレーターは、エンドレスの1次元画像用に設計されています。一般に、1Dのブロブ解析では、Bounding BoxおよびCenter of Gravity YのオブジェクトPropertyは、画像左上の原点を基準としたオブジェクトの位置に関連付けられます。エンドレスなライン数のインデックス付けは不可能なため、動作の特定のポイントでY座標のオーバーフローが発生します。Y座標のオーバーフローが発生するラインは、パラメータLineCountBitsによって制御されます。Y座標は、2^LineCountBitsラインごとに0にリセットされます。たとえば、LineCountBits = 10の場合、最大Y座標は1023(= 2^10-1)になります。次のラインにはY座標 = 0が割り当てられます。この制限はBounding Box、Area、およびCenter of Gravity Xの機能には影響しませんが、Center of Gravity Yの値はY座標のオーバーフローの影響を受けます。オブジェクトがオーバーフローの制限を超えて広がっている場合、下の図に示すように、Center of Gravity Yの値が破損します。この図では、前景に色が付けられています。
![]() |
破損したCenter of Gravity Yの値は自動的には検出されない |
|---|---|
|
Y座標の境界にまたがるオブジェクトについて、破損したCenter of Gravity Yの値は自動的には検出されません。 |
入力画像は、オペレーターによって1ラインずつ処理されます。オペレーターは未来を予測できないため、後で接続される領域が最初には独立しているように見える場合があります。したがって、このテキストでは、単一のライン内の接続されたピクセルをobject artifactsと呼びます。BlobDetector1Dオペレーターは、これらのobject artifactが次のラインの他のobject artifactと重なっているかどうかを確認します。これは、オブジェクトが本当に独立しているのか、それともより大きなオブジェクトの一部であるかを判断するためです。オペレーターが処理できるobject artifactの最大数は、LabelCountパラメータによって定義されます。object artifactの数が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の最大数に等しくなります。
選択したラベルの量がユースケースに対して十分であるかどうかわからない場合は、シミュレーションで確認してください。
BlobDetector1Dモジュールをインスタンス化する際に、作成する出力ポートを定義できます。ポートを有効/無効にすると、対応する機能も自動的に有効/無効になります。これらのポートを確定した後は、変更することはできません。他の出力ポートが必要な場合は、別のBlobDetector1Dモジュールをインスタンス化する必要があります。
2D画像フォーマットにはフレーム終了によるオブジェクト出力の組み込み最大レイテンシがありますが、1D画像のオブジェクトはその終了に到達しない場合があります。一定時間内にオブジェクトに対応する必要が生じる場合があるため、最大Bounding Box高さを定義できるほか、Bounding Boxの高さやその他のPropertyデータがオーバーフローに達した場合にPropertyデータを早期に出力することができます。これらの出力はoverflow eventsと呼ばれ、ErrorFlagsOリンクによって示されます。オーバーフローイベントは、オペレーターのPropertyで有効または無効にすることができます。Propertyがオーバーフローし(かつそのOverflowEventパラメータが有効になっている場合)、オブジェクトはその中間状態で出力されます。オブジェクトは引き続き内部で処理および継続され、出力は単に提供されたオブジェクトの中間結果となります。
以下の図は、オーバーフローイベントの処理を視覚化したものです。前景は青色で着色され、「>」記号はオーバーフローイベントが検出される位置を示します。grayscaleは、最大BoundingBox高さを超えた瞬間にトリガーされるため、中間オブジェクトの実際の高さはMaxBoundingBoxHeight + 1になります。このため、Bounding Boxの高さは7として表示されますが、オブジェクトのProperty値の出力は1になります。
ブロブ検出器オペレーターは、処理速度(つまり帯域幅)が画像コンテンツに依存する数少ないオペレーターの1つです。このオペレーターは、連続するライン内で前景ピクセルと背景ピクセルの変化が少ない画像に対して最も効果的に動作します。したがって、ノイズが多い場合や、複数のライン内でobject artifactの数が多い場合、データスループットが著しく低下します。ただし、これは非常に強いノイズを含む画像にのみ適用されます。
オペレーターは、入力画像を1ラインずつ処理することで、最小限のレイテンシで動作します。オブジェクトの終了が明確になると、オブジェクトのPropertyがオペレーターによって即座に出力されます。したがって、オブジェクトの出力を行うのは、それが終了するのと同じライン内です。これにより、オペレーターによる後続のコンテキストの処理と並行して、完了したオブジェクトのPropertyの後処理を行うことができます。
DMAやその他のいくつかのオペレーターは、完了を報告する前にフレーム終了信号を待つことに注意してください。
オペレーターのリソース消費量は、有効な機能、機能に使用されるビット数、および選択されたラベルの数に依存します。したがって、Baslerでは、不要な機能を無効にすること、およびLabelCountパラメータを設定する際には慎重に行うことを推奨しています。
![]() |
バウンディングボックスのポートの一部を無効化してもリソースは節約されません |
|---|---|
|
バウンディングボックスには複数の出力ポートがあるため、この機能はすべてのポートが無効化されている場合にのみ無効になります。バウンディングボックスのポートを部分的に無効化しても、リソースの節約にはなりません。 |
![]() |
最大値を手動で設定することでリソースを節約する |
|---|---|
|
検出対象のオブジェクトの最大値が分かっている場合は、リソースを節約し、デザインの扱いやすくするために、リンクのBit Widthを手動で設定することをBaslerでは推奨しています。 |
ブロブ検出器の ImageI 入力には、バイナリ(pixel bit widthが1の)1D画像が必要です。このオペレーターは、動作中の異なるライン長や空のラインの入力もサポートしています。
オペレーターは、前景値が ONE であり、背景値が ZERO であると仮定します。事前の二値化処理でこの要件を満たしていることを確認してください。
BlobDetector1D オペレーターには、ImageI と同期する追加の入力リンク FlushI があります。FlushI はアクティブなコンテキストを終了させます。つまり、仮想的なフレーム終了(End of Frame)として機能します。この終了は、FlushI ポートに入力されたピクセルのいずれかが「1」である場合にトリガーされ、ラインの末尾で行われます。フラッシュによりブロブ検出が再開され、次のラインの先頭から開始されるため、Y座標も0にリセットされます。Flush コマンドによって出力されるすべてのオブジェクトには、ErrorFlagsO リンクのビット14が明確にフラグとして立てられます。それに加えて、フラッシュが発行されたラインの最後のオブジェクトとして、ContextTermination オブジェクトが出力されます(ErrorFlagsO リンクのビット15によってフラグが立てられます)。ContextTermination は、有用なPropertyデータを保持しないダミーオブジェクトです。
BlobDetector1D オペレーターの動作を下の図に示します。前景ピクセル(「1」)は青色で着色されています。「>」は、オブジェクトが出力されるラインを示しています。オブジェクトの名前は、出力リンク ErrorFlagsO に存在する設定済みタグに対応しています。
出力は VALT_LINE1D 画像形式の形式で表されます。出力ポートのそれぞれが、1つのオブジェクトProperty/オブジェクトPropertyを表しています。これらは同期しており、合わせて1つの単一オブジェクトを記述します。各出力ピクセルは、完了したオブジェクトまたはステータスエラーオブジェクトのいずれかの値を提供します。この出力が抽出されたオブジェクトであるか、ステータスエラーオブジェクトであるかは、ErrorFlagsO 出力ポートによって示されます。オブジェクトを表すピクセルは、そのオブジェクトが完了したのと同じラインに現れます。これらは完了した順に出力されます。たとえば、2つのオブジェクトがライン10で終了するとします。オブジェクトAの最後のピクセルはX座標42を持ち、オブジェクトBの最後のピクセルはX座標97を持ちます。したがって、オペレーターの出力ポートでは、オブジェクトAが最初のピクセルであり、オブジェクトBが2番目のピクセルになります。オブジェクトが完了せず、エラーも発生しなかったラインは空になります。
Propertyデータのオーバーフローを防ぐため、出力ポートの幅は、指定された入力形式に基づいて自動的に適応します。または、出力ポートの幅を手動で設定することもできます。リンクのBit Widthの手動設定は、オペレーターのPropertyで有効にしている場合、Area/CenterX/CenterYで使用できます。
ポート ErrorFlagsO は、オーバーフローや追加の情報タグに関するいくつかのエラーフラグを出力します。各ビットは特定のエラーフラグ用に予約されています。これらのエラーフラグは、ハードウェアの実行環境またはシミュレーションで確認できます。シミュレーションでこれらのエラーフラグを確認するには:
-
シミュレーションプローブを BlobDetector1D の ErrorFlagsO ポートに追加します。
-
オーバーフローを引き起こす画像をシミュレーションに追加します。
-
シミュレーションを実行します。
-
出力ポートの を開きます。
-
調べたいピクセルまでスクロールし、拡大してピクセル値を確認し、ピクセル値を次のように設定します :
-
16進数値内のアクティブなビットは、ブロブオブジェクトに関するさまざまなエラーやステータス情報を示しています。詳細は以下の表を確認してください。
エラーフラグの詳細な説明は、以下のパラメータ説明に記載されています。概要は次の表に示されています:
| Bit # | 説明 | 注意事項 |
|---|---|---|
| 0 | Area のオーバーフロー |
オブジェクトの Area 値が、処理履歴の特定の時点で、提供された出力のBit Widthを超過しました。 |
| 1 | Area OverflowEvent |
オブジェクトの Area 値は、処理中の指定された出力 Bit Width を超過しました。 生成されたオブジェクトは、オーバーフローが発生した行を示します。 |
| 2 | CenterX Overflow |
オブジェクトの CenterX 値(画像モーメント M10)は、処理履歴のいずれかの時点で指定された出力 Bit Width を超過しました。 |
| 3 | CenterX OverflowEvent |
オブジェクトの CenterX 値(画像モーメント M10)は、処理中の指定された出力 Bit Width を超過しました。生成されたオブジェクトは、オーバーフローが発生した行を示します。 |
| 4 | CenterY Overflow |
オブジェクトの CenterY 値(画像モーメント M01)は、処理履歴のいずれかの時点で指定された出力 Bit Width を超過しました。 |
| 5 | CenterY OverflowEvent |
オブジェクトの CenterY 値(画像モーメント M01)は、処理中の指定された出力 Bit Width を超過しました。生成されたオブジェクトは、オーバーフローが発生した行を示します。 |
| 6 | BoundingBox HeightViolation |
BoundingBox の高さは、処理履歴のいずれかの時点でオブジェクトに対して設定したパラメータ値 MaxBoundingBoxHeight を超過しました。 |
| 7 | BoundingBox HeightViolationEvent |
BoundingBox の高さは、処理中にオブジェクトに対して設定したパラメータ値 MaxBoundingBoxHeight を超過しました。生成されたオブジェクトは、高さ違反が検出された行を示します。 |
| 8-11 | 予備 |
将来の拡張用に予約されています。 |
| 12 | Line Error |
選択したラベル数で処理できる数を超えるオブジェクトアーティファクトが発生した行を示すダミーオブジェクトを示します。利用可能な Memory は、後続の受信データを処理するには不十分です。 これはダミーオブジェクトであるため、他のポートのフィーチャデータ値には有効なデータは含まれていません。シミュレーションではフィーチャ値は 0 として表示されますが、ハードウェアでは任意の値になる可能性があります。下位の ErrorBits 7-0 が有効なフィーチャとその値に結びついているため、これらのフラグもハードウェアとシミュレーションで異なる場合があります。 このエラーフラグが存在する場合、それは常にその行の最初のオブジェクト出力になります。 |
| 13 | ContextCorruption |
選択したラベル数で処理できる数を超えるオブジェクトアーティファクトが発生しました。利用可能な Memory は、すべての受信データを処理するには不十分です。フラグが設定されたオブジェクトの整合性は保証できません。 オペレーターは、コンテキストの終了(フラッシュによってトリガーされるなど)または、デザインからビルドした HAP ファイルを開くアプリケーションの再起動により、正しい機能に戻ります。次の行からは、以前のコンテキスト破損の影響を受けることなくコンテキストが処理されます。 |
| 14 | FlushedLine |
フラグが設定されたオブジェクトは、フラッシュによる強制的なコンテキスト終了により出力されます。 |
| 15 | ContextTermination |
フラッシュがトリガーされたライン内のコンテキストの終わりを示すダミーオブジェクトを示します。 これはダミーオブジェクトであるため、他のポートのPropertyデータには有用なデータは含まれません。シミュレーションではProperty値は0として表示されますが、ハードウェアでは任意の値になる可能性があります。下位の ErrorBits 7-0 が有効なPropertyとその値に関連付けられているため、これらのフラグもシミュレーションとハードウェアで異なる場合があります。 このダミーオブジェクトの後に出力されるオブジェクトは、新しいコンテキストの一部です。 |
表36:Blobエラーフラグの説明
| Property | 値 |
|---|---|
| オペレータータイプ | M |
| 入力リンク | ImageI、データ入力 FlushI、データ入力 |
| Output Links | BoundingX0O、データ出力 BoundingX1O、データ出力 BoundingY1O、データ出力 BoundingHeightO、データ出力 AreaO、データ出力 CenterXO、データ出力 CenterYO、データ出力 ErrorFlagsO、データ出力 |
|
Bit Widthは、ImageI Linkの入力最大画像幅に基づいています。次のように計算されます。 |
|
|
Bit Widthは、パラメータ LineCountBitsによって定義されます。 |
|
|
Bit Widthは次のパラメータから導出されます
MaxBoundingBoxHeight。計算方法は以下のとおりです
|
|
|
パラメータ AreaBitWidthMode、CenterXBitWidthMode、および CenterYBitWidthModeを介して、Linkを手動で設定するか自動モードを使用するかを選択できます。Linkを手動で編集する場合、許可される範囲は [1, 48] です。 |
|
|
最大画像幅は、パラメータ LabelCount + 2 に等しくなります。 |
| LabelCount | |
|---|---|
| タイプ | static パラメータ |
| Default | 100 |
| 範囲 | [1, (最大Img Width(入力Link I) / 2 + 2] |
|
部分的なオブジェクトを内部で追跡するために、このパラメータは利用可能なラベルの数を設定します。また、1ラインで出力できるオブジェクトの最大数にも影響します。なお、Blob_Detector_1D オペレータに必要なリソースはラベルの数に依存します。このパラメータの適切な値の範囲は100から500の間であり、ほとんどのアプリケーションで十分なはずです。 選択したラベル数よりも多くの部分的なオブジェクトが発生した場合、データが失われ、フレームのコンテキストが破損します。この場合、出力Link ErrorFlagsO のビット13が「1」になり、提供されたデータが信頼できなくなったことを示します。エラービットはデータの損失検出時に設定され、フラッシュまたはアクーシジションの再起動によってリセットされます。 |
|
| Neighborhood | |
|---|---|
| タイプ | static パラメータ |
| Default | EightConnected |
| 範囲 | {FourConnected, EightConnected} |
|
このパラメータは、Object Detectionに必要な近傍を選択します。ピクセル近傍の詳細な説明については、'Definition'を参照してください。 |
|
| LineCountBits | |
|---|---|
| タイプ | static パラメータ |
| Default | 10 |
| 範囲 | [1, 24] |
|
このパラメータは、入力されるラインの内部インデックス付けに使用されるビット数を定義します。Y座標は次のインデックスでリセットされます。
|
|
| MaxBoundingBoxHeight | |
|---|---|
| タイプ | static パラメータ |
| Default | 256 |
| 範囲 | [1, 2^24] |
|
このパラメータは、オブジェクトの外接ボックスの許容最大高さ、つまり外接ボックスによってスパンされる最大ライン数を定義します。外接ボックスの高さがMaxBoundingBoxHeight値を超えると、高さは1からやり直され、対応するオブジェクトにはHeightViolationタグ(つまりErrorFlagsOのビット6)がフラグ付けされます。 |
|
| GenerateBoundingBoxHeightViolationEvents | |
|---|---|
| タイプ | static パラメータ |
| Default | true |
| 範囲 | {true, false} |
|
オブジェクトの外接ボックスの高さがMaxBoundingBoxHeightパラメータの値を超えると、オブジェクトはその中間状態で出力されます。オブジェクトは内部で引き続き処理および継続されますが、出力されたオブジェクトの中間結果にすぎません。HeightViolationイベントによって出力されたオブジェクトには、ErrorFlagsOのビット7がタグ付けされます。 |
|
| AreaBitWidthMode | |
|---|---|
| タイプ | static パラメータ |
| Default | AutomaticContextMaximum |
| 範囲 | {AutomaticContextMaximum, LinkManuallyEditable} |
|
オブジェクトの面積は、すべてのオブジェクトの前景ピクセルの合計によって定義されます。 もし AutomaticContextMaximum が選択されている場合、オペレーターはオブジェクトの最大サイズのビットを自動的に設定します。1D画像には実際の最大高さがないため、最大高さ
オブジェクトの最大可能なサイズがわかっている場合、または特定のサイズのオブジェクトのみが対象である場合は、LinkManuallyEditableモードを使用することをお勧めします。これにより、リソースが節約され、デザイン全体全体のビルド時間が短縮されます。LinkManuallyEditableモードでは、許可された範囲[1, 48]内でリンクのPropertyであるビット幅を編集できます。リンクのビット幅は、Area機能の計算に内部的に使用されるビット幅に直接変換されるため、全体的なリソース消費に影響を与えます。 ビット幅がオブジェクトのArea値に対して十分でない場合は、ErrorFlagO リンク(ビット0)によって示されます。 |
|
| GenerateAreaOverflowEvents | |
|---|---|
| タイプ | static パラメータ |
| Default | false |
| 範囲 | {true, false} |
|
オブジェクトのArea値がAreaOリンクのビット幅を超えると、オブジェクトはその中間状態で出力されます。オブジェクトは内部で引き続き処理および継続されますが、出力されたオブジェクトの中間結果です。AreaOverflowEventによって出力されたオブジェクトには、ErrorFlagsOのビット1がタグ付けされます。 |
|
| CenterXBitWidthMode | |
|---|---|
| タイプ | static パラメータ |
| Default | AutomaticContextMaximum |
| 範囲 | {AutomaticContextMaximum, LinkManuallyEditable} |
|
Center of Gravity機能の説明については、'Center of Gravity'を参照してください。 出力は画像モーメントM10であることに注意してください。Center of Gravity Xのピクセル座標を受け取るには、DIVオペレーターを使用するか、ターゲットホストで値を面積で割ります。 次のように設定した場合: AutomaticContextMaximum、オペレーターはオブジェクトの最大サイズのビットを自動的に設定します。1D画像には実質的な最大高さが存在しないため、
自動モードであっても、最大値は48ビットに制限されることに注意してください。つまり、AutomaticContextMaximumに設定されているというだけで、オーバーフローを防ぐのに十分な値が自動的に保証されるわけではありません。 可能な最大CenterX(画像モーメントM10)値がわかっている場合、または特定のX座標のオブジェクトのみに関心がある場合は、モードとしてLinkManuallyEditableを使用することをお勧めします。これによりリソースが節約され、デザイン全体のビルド時間が短縮されます。LinkManuallyEditableモードでは、許可された範囲 [1, 48] 内でリンクのBit Width Propertyを編集できます。リンクのBit Widthは、CenterX機能の内部計算に使用されるBit Widthに直接変換されるため、全体的なリソース消費に影響します。 オブジェクトのCenterX値に対してBit Widthが十分でない場合は、ErrorFlagOリンク(ビット2)によって示されます。 |
|
| GenerateCenterXOverflowEvents | |
|---|---|
| タイプ | static パラメータ |
| Default | false |
| 範囲 | {true, false} |
|
オブジェクトのCenterX値がCenterXリンクのBit Widthを超えると、オブジェクトはその中間状態で出力されます。オブジェクトは内部で処理および継続されますが、出力されたオブジェクトの中間結果となります。CenterX OverflowEventが原因で出力されたオブジェクトには、ErrorFlagsOのビット3がタグ付けされます。 |
|
| CenterYBitWidthMode | |
|---|---|
| タイプ | static パラメータ |
| Default | AutomaticContextMaximum |
| 範囲 | {AutomaticContextMaximum, LinkManuallyEditable} |
|
Center of Gravity機能の説明については、'Center of Gravity'を参照してください。 出力は画像モーメントM10であることに注意してください。重心Yのピクセル座標を受け取るには、DIVオペレーターを使用するか、ホストPC上で面積で値を割ってください。 次のように設定した場合: AutomaticContextMaximum、オペレーターはオブジェクトの最大サイズのビットを自動的に設定します。1D画像には実質的な最大高さが存在しないため、
自動モードであっても、最大値は48ビットに制限されることに注意してください。つまり、AutomaticContextMaximumに設定されているというだけで、オーバーフローを防ぐのに十分な値が自動的に保証されるわけではありません。 可能な最大CenterY(画像モーメントM10)値がわかっている場合、または特定のY座標のオブジェクトのみに関心がある場合は、モードとしてLinkManuallyEditableを使用することをお勧めします。これによりリソースが節約され、デザイン全体のビルド時間が短縮されます。LinkManuallyEditableモードでは、許可された範囲 [1, 48] 内でリンクのBit Width Propertyを編集できます。リンクのBit Widthは、Area機能の内部計算に使用されるBit Widthに直接変換されるため、全体的なリソース消費に影響します。 オブジェクトのCenterY値に対してBit Widthが十分でない場合は、ErrorFlagOリンク(ビット4)によって示されます。 |
|
| GenerateCenterYOverflowEvents | |
|---|---|
| タイプ | static パラメータ |
| Default | false |
| 範囲 | {true, false} |
|
オブジェクトのCenterY値がCenterYリンクのBit Widthを超えると、オブジェクトはその中間状態で出力されます。オブジェクトは内部で処理および継続されますが、出力されたオブジェクトの中間結果となります。CenterY OverflowEventが原因で出力されたオブジェクトには、ErrorFlagsOのビット5がタグ付けされます。 |
|
BlobDetector1Dオペレーターの使用方法を以下の例に示します。
-
Examples - ラインスキャンアプリケーションでのBlobDetector1Dオペレーターの使用方法を示します。

![[注]](../common/images/admon/note.png)









前へ

