Operator BlobDetector1D

Operator Library: Blob

BlobDetector1D operator 可在具備無限高度的二進位影像中偵測物件,並決定 其 Property。此 operator 的輸出為數個資料串流, 代表每個物件的 Property。

此 operator 的功能可在 VisualApplets 中 完全模擬。

另請參閱 Library Blob 的簡介。

BoundingBox、Area 以及 Center of Gravity X 和 Y 特徵

BlobDetector1D 提供 BoundingBox、Area,以及 Center of Gravity X 與 Y 等特徵。

[備註] Center of Gravity X and Y 並非 operator 的 直接輸出

輸出連接埠 CenterX 與 CenterY 實際上提供的是影像矩陣 M10 (CenterX) 與 M01 (CenterY)。若要擷取物件的重心, 您必須將矩陣除以擷取的面積:

BlobDetector1D operator 是針對無限 一維影像所設計。一般而言,對於 1D blob 分析,Bounding Box 與 Center of Gravity Y 物件特徵與物件的位置有關, 其原點位於影像的左上角。由於對無限數量的 行進行索引是不可能的,因此在作業的某個時間點,Y 座標會發生 溢位。發生 Y 座標溢位的行由 參數 LineCountBits 控制。每隔 2^LineCountBits 行,Y 座標就會重設為 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 值不會被自動偵測。

Y 座標重設的影響

圖 399. Y 座標重設的影響


operator 會逐行處理傳入的影像。由於 operator 無法預測未來,因此稍後連接的區域一開始可能會顯示為獨立的區域。 因此,本文字中單行內相連的像素稱為 物件構件 (object artifacts)。BlobDetector1D operator 會檢查這些物件 構件是否與下一行的其他物件構件重疊。 這是為了判斷物件是否真的獨立,或者是較大物件的一部分。 operator 可處理的最大物件構件數量由 LabelCount 參數定義。如果物件構件的數量 超過 LabelCount 的值,資料將會遺失,且物件 結果的完整性將不再獲得保障。這稱為 內文損毀 (context corruption)。遺失資料的那一行會以 Line Error 虛擬物件標記,可透過 ErrorFlag 識別。受損內文中的所有後續物件都會被加上此類標記。 一旦透過清除 applet 或 重新啟動 applet 來重設內文,內文損毀即告結束。 所有錯誤旗標都列在「輸出連接埠」一節中。

在大多數情況下,防止內文損毀所需的標籤數量 等於行內的最大物件構件數量。 對於 neighborhood = 4 和 neighborhood = 8,所需的精確標籤數量 略有不同:

  • 對於 neighborhood = 4,防止內文損毀所需的標籤數量 等於線條 N 位置 X 的任何像素與 線條 N+1 位置 X 的像素之間的 最大物件構件數量。

  • 對於 neighborhood = 8,防止內文損毀所需的標籤數量 等於線條 N 位置 X 的任何像素與 線條 N+1 位置 X+1 的像素之間的 最大物件構件數量。

如果您不確定所選的標籤數量是否足以應付您的 使用情境,請在模擬中進行檢查。

具現化 BlobDetector1D 模組時,您可以 定義要建立哪些輸出連接埠。透過啟用/停用連接埠, 對應的特徵也會自動啟用/停用。確認 這些連接埠後,您就無法再變更它們。如果您需要其他輸出連接埠,則必須 具現化另一個 BlobDetector1D 模組。

Bounding Box 高度限制與溢位事件

雖然 2D 影像格式由於畫面結束而具有內建的輸出物件最大延遲, 但 1D 影像中的物件有可能永遠不會達到其 結尾。由於可能需要在一定時間內對物件做出反應, 因此如果您定義最大邊框高度以及當邊框高度或其他特徵資料達到溢位時 提前輸出特徵資料。這些輸出稱為 溢位事件 (overflow events),並由 ErrorFlagsO 連接表示。您可以在 operator property 中啟用或 停用溢位事件。如果特徵溢位(且 其 OverflowEvent 參數已啟用),則物件 將以其中間狀態輸出。該物件仍會在 內部進行處理和持續;輸出只是已給定為輸出的物件的中間結果。

下圖視覺化呈現了溢位事件的處理方式:前景 顯示為藍色,'>' 符號表示偵測到溢位事件的位置。 由於 grayscale 是在超出最大 BoundingBox 高度的瞬間觸發, 因此中間物件的實際高度為 MaxBoundingBoxHeight + 1。這就是為什麼 顯示的邊框高度為 7,而物件的特徵值 給出的輸出為 1。

溢位事件的行為

圖 400. 溢位事件的行為


效能

blob 偵測器 operator 屬於少數處理速度( 亦即頻寬)取決於影像內容的 operator。這些 operator 最適合用於 在內聚行內前景與背景像素變化很少的影像。 因此,雜訊或多行中的大量物件構件會 明顯降低資料傳輸量。然而,這僅適用於包含 非常強烈雜訊的影像。

延遲

此運算子透過逐行處理輸入影像,以最低的延遲運作。一旦物件結尾明確,物件特徵就會立即由運算子作為輸出提供。因此,物件的輸出發生在其結束的同一行中。這使得在運算子仍在處理後續上下文的同時,能夠對已完成的物件特徵進行後續處理。

請注意,DMA 和其他一些運算子會等待訊框結束訊號,然後才回報完成。

資源消耗

運算子的資源消耗取決於啟用的功能、用於功能的 Bit Width 數量以及所選的標籤數量。因此,Basler 建議停用不需要的功能,並在設定 LabelCount 參數時保持謹慎。

[備註] 部分停用 Bounding Box 連接埠無法節省資源

Bounding box 具有多個輸出連接埠,因此只有在其 所有 連接埠都停用時,該功能才會停用。部分停用 bounding box 連接埠並不能節省資源。

[備註] 手動設定最大值可節省資源

為了節省資源並改善設計的處理方式,如果您知道要偵測的物件的最大值,Basler 建議手動設定連結的 bit widths。

Input Ports

blob 偵測器的 ImageI 輸入預期為二進位(pixel bit width 為 1)的 1D 影像。該運算子支援在運作期間輸入不同的行長度以及空行。

運算子假設前景值的is ONE,背景值的is ZERO。請確保您在初步二值化過程中符合此要求。

BlobDetector1D 運算子有一個與 ImageI 同步的額外輸入連結 FlushI。FlushI 會終止作用中的上下文,這表示它運作起來就像虛擬的 End of Frame。如果 FlushI 連接埠上的任何輸入像素為 '1',就會觸發此終止,並且會在行尾發生。清除會重新啟動 blob 偵測,從下一行開始,這也會將 Y 座標重設為 0。所有因 Flush 命令而輸出的物件,都會明確地以 ErrorFlagsO 連結的第 14 位元進行標記。除此之外,發出清除的那一行的最後一個物件會輸出 ContextTermination 物件(由 ErrorFlagsO 連結的第 15 位元標記)。ContextTermination 是一個不包含任何有用特徵資料的虛擬物件。

BlobDetector1D 運算子的行為顯示於下圖中。前景像素('1')以藍色標示。'>' 表示物件在哪一行輸出。物件的命名對應於輸出連結 ErrorFlagsO 上呈現的其設定標籤。

BlobDetector1D 運算子的清除行為

圖 401. BlobDetector1D 運算子的清除行為


Output Ports

輸出以 VALT_LINE1D 影像格式的形式呈現。每個輸出連接埠代表一個物件特徵 / 物件 property。它們是同步的,並且共同描述一個單一物件。每個輸出像素提供已完成物件或錯誤狀態物件的值。此輸出是擷取的物件還是錯誤狀態物件,是由 ErrorFlagsO 輸出連接埠所指示。代表物件的像素會出現在該物件完成的同一行中。它們會按照完成的順序輸出。例如,兩個物件在第 10 行結束。物件 A 的最後一個像素的 X 座標為 42,物件 B 的最後一個像素的 X 座標為 97。因此,物件 A 是運算子輸出連接埠上的第一個像素,而物件 B 是第二個像素。未完成任何物件且未發生錯誤的行為空行。

輸出連接埠的寬度會根據給定的輸入格式自動調整,以防止特徵資料溢位。或者,您可以手動設定輸出連接埠的寬度。如果您已在運算子 properties 中啟用它們,則可針對 Area / CenterX / CenterY 進行 link bit widths 的手動設定。

ErrorFlagsO 連接埠會輸出用於溢位或額外資訊標籤的多個錯誤旗標。每個位元都保留給特定的旗標。您可以在硬體的執行環境中或在模擬中查看這些錯誤旗標。若要在模擬中查看這些錯誤旗標:

  • 將模擬探針新增至 BlobDetector1D 的 ErrorFlagsO 連接埠。

  • 將導致溢位的影像新增至模擬中。

  • 執行模擬。

  • 開啟輸出連接埠的 Simulation Probe View。

  • 捲動至您要檢查的像素,放大以查看像素值,並將像素值設定為 Hex:
    模擬探針檢視器中的錯誤旗標

    圖 402. 模擬探針檢視器中的錯誤旗標


  • 十六進位值中的有效位元表示有關您的 blob 物件的不同錯誤或狀態資訊。如需詳細資訊,請查看下表。

您可以在下方的參數說明中找到有關錯誤旗標的詳細說明。下表概述了相關內容:

Bit # 描述 備註
0 Area Overflow

物件的 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 不足以處理所有傳入的資料。無法保證被標記物件的完整性。

當內容結束(例如由 flush 觸發)或重新啟動應用程式(在其中開啟從您的設計建立的 HAP 檔案)時,運算子會恢復正確的功能。透過以下程式碼行,隨後即可處理內容,而不會受到先前內容損毀的任何影響。

14 FlushedLine

由於 flush 強制終止了內容,因此會輸出被標記的物件。

15 ContextTermination

表示一個虛擬物件,它標誌著已觸發 flush 的行中內容的結束。

由於這是一個虛擬物件,其他連接埠上的特徵資料不包含任何有用的資料。雖然特徵值在模擬中顯示為 0,但在硬體中它們可以是任何值。由於較低的 ErrorBits 7-0 與啟用的特徵及其值相關聯,因此這些旗標在硬體中也可能與模擬中的有所不同。

在此虛擬物件之後輸出的任何物件都是新內容的一部分。

表 36. Blob 錯誤旗標說明


I/O Properties

Property Value
Operator Type M
輸入連結 ImageI, 資料輸入
FlushI, 資料輸入
輸出連結 BoundingX0O, 資料輸出
BoundingX1O, 資料輸出
BoundingY1O, 資料輸出
BoundingHeightO, 資料輸出
AreaO, 資料輸出
CenterXO, 資料輸出
CenterYO, 資料輸出
ErrorFlagsO, 資料輸出

支援的 Link 格式

Link Parameter 輸入連結 ImageI 輸入連結 FlushI 輸出連結 BoundingX0O 輸出連結 BoundingX1O 輸出連結 BoundingY1O 輸出連結 BoundingHeightO 輸出連結 AreaO 輸出連結 CenterXO 輸出連結 CenterYO 輸出連結 ErrorFlagsO
Bit Width 1 1 自動1 自動1 自動2 自動3 [1, 48] / auto4 [1, 48] / auto4 [1, 48] / auto4 16
Arithmetic unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned
Parallelism {64} 64 1 1 1 1 1 1 1 1
Kernel Columns 1 1 1 1 1 1 1 1 1 1
Kernel Rows 1 1 1 1 1 1 1 1 1 1
Img Protocol VALT_Line1D VALT_Line1D VALT_Line1D VALT_Line1D VALT_Line1D VALT_Line1D VALT_Line1D VALT_Line1D VALT_Line1D VALT_Line1D
Color Format VAF_GRAY 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 FL_NONE
Max. Img Width 2^16 作為 ImageI 自動5 自動5 自動5 自動5 自動5 自動5 自動5 自動5
Max. Img Height any 作為 ImageI 1 1 1 1 1 1 1 1

1

Bit Width 基於 ImageI 鏈路的輸入最大圖像寬度。計算方式為 ceil(log2(Max. Img Width)).

2

Bit Width 由參數 LineCountBits 定義。

3

Bit Width 衍生自參數 MaxBoundingBoxHeight。計算方式為 ceil(log2(MaxBoundingBoxHeight)).

4

透過參數 AreaBitWidthMode、CenterXBitWidthMode 和 CenterYBitWidthMode,您可以選擇是要手動設定鏈路還是使用自動模式。如果您手動編輯鏈路,允許的範圍為 [1, 48]。

5

最大圖像寬度等於參數 LabelCount + 2。

參數

LabelCount
Type static parameter
Default 100
Range [1, (max. Img Width(Input Link I) / 2 + 2]

為了在內部追蹤局部物件,此參數可設定可用標籤的數量。它還會影響一行中可輸出的物件的最大數量。請注意,Blob_Detector_1D 運算子所需的資源取決於標籤數量。此參數的良好數值範圍在 100 到 500 之間,這對於大多數應用程式來說應該足夠了。

如果出現的局部物件數量多於所選標籤,將會遺失資料且畫面內容會損毀。在這種情況下,輸出鏈路 ErrorFlagsO 的第 13 位元會是「1」,以表示所提供的資料不再可靠。當偵測到資料遺失時,會設定錯誤位元,並透過清除 (flush) 或重新啟動擷取來重設。

Neighborhood
Type static parameter
Default EightConnected
Range {FourConnected, EightConnected}

此參數選擇物件偵測所需的 Neighborhood。有關像素鄰域的詳細說明,請參閱 'Definition'。

LineCountBits
Type static parameter
Default 10
Range [1, 24]

此參數定義用於輸入行內部索引的位元數。Y 座標在索引處重設 2^LineCountBits。因此,例如使用 LineCountBits=10時,最大 Y 座標為 1023 (2^10-1)。隨後的 Y 座標行索引從 0 重新開始。

MaxBoundingBoxHeight
Type static parameter
Default 256
Range [1, 2^24]

此參數定義物件邊界框允許的最大高度,即邊界框跨越的最大行數。當邊界框的高度超過 MaxBoundingBoxHeight 值時,高度將從 1 重新開始,並且相應的物件將被標記 HeightViolation 標籤(即 ErrorFlagsO 的第 6 位元)。

GenerateBoundingBoxHeightViolationEvents
Type static parameter
Default true
Range {true, false}

當物體的邊界框高度超過 MaxBoundingBoxHeight 參數的值時,該物體會以其中間狀態輸出。該物體仍會在內部進行處理並繼續,但結果僅為已輸出的物體的中間結果。因 HeightViolation 事件而輸出的物體會在 ErrorFlagsO 的第 7 位元中加上標記。

AreaBitWidthMode
Type static parameter
Default AutomaticContextMaximum
Range {AutomaticContextMaximum, LinkManuallyEditable}

物體的面積由所有物體前景像素的總和定義。

如果 AutomaticContextMaximum 被選中時,運算子會自動設定物體最大尺寸的位元。由於一維影像沒有真正的最大高度,因此會假設最大高度為 2^LineCountBits 。位元的計算會考慮輸入鏈結 I 上的最大線寬以及透過 LineCountBits 參數定義的索引線數量。如果所有行的所有像素都由前景值組成(即一個大型物件的白色輸入影像),則會達到物體的理論最大面積。

如果物體的最大可能大小已知,或者只對特定大小的物體感興趣,Basler 建議使用 LinkManuallyEditable 模式。這可以節省資源並縮短整個設計的建置時間。在 LinkManuallyEditable 模式下,您可以在 [1, 48] 的允許範圍內編輯鏈結的 bit width Property。鏈結的 bit width 直接轉化為內部用於計算 Area 功能的 bit width,因此會影響整體資源消耗。

如果 bit width 不足以應付物體的 Area 值,則會由 ErrorFlagO 鏈結(第 0 位元)指出。

GenerateAreaOverflowEvents
Type static parameter
Default false
Range {true, false}

當物體的 Area 值超過 AreaO 鏈結的 bit width 時,該物體會以其中間狀態輸出。該物體仍會在內部進行處理並繼續,但它是已輸出的物體的中間結果。因 AreaOverflowEvent 事件而輸出的物體會在 ErrorFlagsO 的第 1 位元中加上標記。

CenterXBitWidthMode
Type static parameter
Default AutomaticContextMaximum
Range {AutomaticContextMaximum, LinkManuallyEditable}

請參閱「Center of Gravity」以了解 Center of Gravity 功能的說明。

請注意,輸出為影像動量 M10。若要取得 Center of Gravity X 的像素座標,請使用 DIV 運算子,或在目標主機上將該值除以面積。

若您將 AutomaticContextMaximum,運算子會自動設定物體最大尺寸的位元。由於一維影像沒有真正的最大高度,因此會假設最大高度為 2^LineCountBits 行。位元的計算會考慮輸入鏈結 I 上的最大線寬以及您透過 LineCountBits 參數設定的索引線數量。如果所有行的所有像素都由前景值組成(即一個大型物件的白色輸入影像),則會達到物體的最大理論值。如果您使用大的輸入寬度和高的 LineCountBits值,則 CenterXO 鏈結的 bit width 可能會變得非常高。

請注意,即使在自動模式下,最大值也限制為 48 位元。這意味著即使將其設定為 AutomaticContextMaximum,該值也不會自動大到足以防止溢位。

如果最大可能的 CenterX(影像動量 M10)值已知,或者只對特定 X 座標的物體感興趣,Basler 建議使用 LinkManuallyEditable 模式。這可以節省資源並縮短整個設計的建置時間。在 LinkManuallyEditable 模式下,您可以在 [1, 48] 的允許範圍內編輯鏈結的 bit width Property。鏈結的 bit width 直接轉化為內部用於計算 CenterX 功能的 bit width,因此會影響整體資源消耗。

如果 bit width 不足以應付物體的 CenterX 值,則會由 ErrorFlagO 鏈結(第 2 位元)指出。

GenerateCenterXOverflowEvents
Type static parameter
Default false
Range {true, false}

當物體的 CenterX 值超過 CenterX link 的 Bit Width 時,該物體將以其中間狀態輸出。該物體在內部仍會繼續處理,但輸出的已是該物體的中間結果。因 CenterX OverflowEvent 而輸出的物體會被標記 ErrorFlagsO 的第 3 個 bit。

CenterYBitWidthMode
Type static parameter
Default AutomaticContextMaximum
Range {AutomaticContextMaximum, LinkManuallyEditable}

請參閱「Center of Gravity」以了解 Center of Gravity 功能的說明。

請注意,輸出的影像動差為 M10。若要取得重心 Y (Center of Gravity Y) 的像素座標,您可以透過主機 PC 使用 DIV 運算子,或將該值除以面積 (Area)。

若您將 AutomaticContextMaximum,運算子會自動設定物體最大尺寸的位元。由於一維影像沒有真正的最大高度,因此會假設最大高度為 2^LineCountBits 行。位元的計算會考慮輸入鏈結 I 上的最大線寬以及您透過 LineCountBits 參數設定的索引線數量。如果所有行的所有像素都由前景值組成(即一個大型物件的白色輸入影像),則會達到物體的最大理論值。如果您使用大的輸入寬度和高的 LineCountBits值,則 CenterYO 鏈結的 bit width 可能會變得非常高。

請注意,即使在自動模式下,最大值也限制為 48 位元。這意味著即使將其設定為 AutomaticContextMaximum,該值也不會自動大到足以防止溢位。

如果已知可能的最大 CenterY(影像動差 M10)值,或者您僅對特定 Y 座標的物體感興趣,Basler 建議使用 LinkManuallyEditable 模式。這可以節省資源並縮短整個設計的編譯時間。在 LinkManuallyEditable 模式下,您可以在允許的範圍 [1, 48] 內編輯 link 的 Bit Width Property。link 的 Bit Width 會直接轉化為內部用於計算 Area 功能的 Bit Width,因此會影響整體資源消耗。

如果 Bit Width 不足以應付物體的 CenterY 值,則會透過 ErrorFlagO link(第 4 個 bit)進行指示。

GenerateCenterYOverflowEvents
Type static parameter
Default false
Range {true, false}

當物體的 CenterY 值超過 CenterY link 的 Bit Width 時,該物體將以其中間狀態輸出。該物體在內部仍會繼續處理,但輸出的已是該物體的中間結果。因 CenterY OverflowEvent 而輸出的物體會被標記 ErrorFlagsO 的第 5 個 bit。

使用範例

以下範例顯示了 BlobDetector1D 運算子的使用方式:

  • 「BlobDetector1D」

    範例 - 顯示在線掃描應用程式中使用 BlobDetector1D 運算子的方式。