Operator BlobDetector1D

運算子函式庫:Blob

BlobDetector1D 運算子可偵測二值影像中高度無限制的物件,並判定 其屬性。該運算子的輸出為數個資料流,分別代表 每個物件的屬性。

該運算子的功能可於 VisualApplets 中完整模擬。

另請參閱 「Library Blob」的介紹。

The BoundingBox, Area, and Center of Gravity X and Y Features

BlobDetector1D提供 BoundingBox、Area 以及 重心 X 和 Y 這幾項特徵。

[注意] 質心 X 和 Y並非 該算子的直接輸出

輸出埠CenterX和 CenterY實際上提供的是影像矩 M10 (CenterX) 和 M01 (CenterY)。要提取物體的重心,您 必須將這些矩除以已提取的面積:

BlobDetector1D運算子是專為無邊界 一維影像所設計。一般而言,在進行一維斑點分析時,「邊界框」與 「重心 Y」等物件特徵,皆是以 影像左上角為原點來參照物件的位置。由於無法對無邊界的 行,在運算的某個階段,Y 座標 將會發生溢出。發生 Y 座標溢出的行數,由 參數LineCountBits 控制。每 2^LineCountBits行,Y 座標便會重設為 0。例如,若LineCountBits= 10,則最大 Y 座標為 1023(= 2^10-1)。下一條線的 Y 座標將被設定為 0。雖然此限制對「邊界框」、「面積」及 重心 X 功能而言並非問題,但重心 Y 值會受到 Y 座標溢出影響:若物件延伸至溢出極限之外, 重心 Y 值將會損毀,如下圖所示。在此 圖中,前景已著色。

[注意] 損壞的重心 Y 值無法被自動偵測到

對於 跨越 Y 座標邊界的物件,系統不會自動偵測到 受損的重心 Y 值。

Y 座標重置的影響

圖 399. Y 座標重設的影響


操作員會逐行處理輸入的影像。由於操作員 無法預知後續情況,因此某些在後續處理中會連通的區域,起初可能看起來像是獨立的 區域。因此,本文中單一行內相連的像素被稱為 物件偽影。 BlobDetector1D操作員會檢查這些物件 偽影是否與後續行中的其他物件偽影重疊。此舉旨在 判斷這些物件究竟是真正獨立的,還是屬於某個 較大物件的一部分。 該 運算子所能處理的物件殘影最大數量,由LabelCount參數定義。若 物件殘影的數量超過 LabelCount 的值,資料將會遺失,且 物件結果的完整性將無法保證。此現象稱為 上下文 損毀。發生資料遺失的那一行,會被標記為一個 行錯誤(Line Error)虛擬物件,可透過 ErrorFlag 識別。在受損上下文中隨後的所有物件都會被標記為此狀態。 一旦透過清空小程式或 重新啟動小程式來重設上下文,上下文損壞即告結束。所有錯誤標記均列於「輸出埠」章節中。

在大多數情況下,為防止上下文損毀所需的標籤數量 等於一行中物件實體的最大數量。對於 鄰域= 4 以及 鄰域= 8 的情況,所需的 精確標籤數量略有不同:

  • 當鄰域= 4 時,為 防止上下文損壞所需的標籤數量,等於第 N 行位置 X 的任何像素與 第 N+1 行位置 X 的像素之間 所含物件殘留物的最大數量。

  • 對於鄰域= 8 時,為 防止上下文損壞所需的標籤數量,等於第 N 行位置 X 的任何像素與 第 N+1 行位置 X+1 的像素之間 所含的物件殘留物最大數量。

如果您不確定所選的標籤數量是否足以滿足您的 使用需求,請透過模擬來確認。

在實例化BlobDetector1D模組時,您可以 定義應建立哪些輸出埠。透過啟用/停用這些埠, 對應的功能也會自動啟用/停用。確認 這些埠之後,便無法再進行變更。 若您需要其他輸出埠,則必須 實例化另一個BlobDetector1D模組。

Bounding Box Height Limits and Overflow Events

雖然 2D 影像格式因幀結束而存在輸出物件的 內建最大延遲,但 1D 影像中的物件有可能永遠無法到達其 末端。 由於可能需要在一定時間內 對物件做出反應,您可以定義最大包圍盒高度,並在包圍盒高度或其他特徵資料達到 溢出時,提前輸出相關特徵資料。這些輸出稱為 溢出事件 ,並由 ErrorFlagsO連結標示。您可在運算子屬性中啟用或 停用溢出事件。若特徵發生溢出(且 其OverflowEvent參數已啟用),物件 將以中間狀態輸出。 該物件仍會在內部繼續進行處理 ;輸出僅為該物件的 某個階段所產生的中間結果。

下圖直觀呈現了溢出事件的處理方式:前景為 藍色,符號「>」標示了偵測到溢出事件的 位置。由於灰階效果是在 超出最大BoundingBox高度的瞬間觸發, 因此中間物件的實際高度為 MaxBoundingBoxHeight+ 1。這就是為什麼邊界 框顯示的高度為 7,而該物件的特徵值 卻輸出 1 的原因。

溢出事件的行為

圖 400. 溢出事件的行為


效能

斑點偵測運算子屬於少數幾種其處理速度—— 也就是頻寬——取決於影像內容的運算子。這些運算子在 連貫線條內,前景與背景像素變化較少的影像上表現最佳。 因此,若多條線條內存在雜訊或大量物件偽影, 將顯著降低資料吞吐量。不過,此情況僅適用於 含有極強雜訊的影像。

延遲

該運算子透過逐行處理輸入影像, 實現最低延遲。一旦物體的邊界確定無誤,該運算子便會 立即輸出該物體的特徵。 因此,物件的 輸出發生在該物件結束的同一行中。這使得在 運算子仍在處理後續內容的同時, 便能對已完成的物件特徵進行後處理。

請注意,DMA 及其他某些運算子會在接收到幀結束訊號後, 才會回報完成。

Resource Consumption

該運算子的資源消耗取決於已啟用的功能、 這些功能所使用的位元數,以及選定的標籤數量。因此, Basler 建議停用非必要的功能,並在 設定LabelCount參數時務必謹慎。

[注意] 部分停用包圍框連接埠並不會節省資源

由於包圍框有幾個輸出埠,因此此功能僅在 以下情況下才會被停用: 所有 其連接埠皆被停用時,此功能才會 停用。僅部分 停用邊界框的連接埠並不會節省資源。

[注意] 手動設定最大值可節省資源

為了節省資源並改善設計的操作性,Basler 建議 若您已知待偵測物件的最大值, 請手動設定連結的位元寬度。

Input Ports

Blob 偵測器的ImageI輸入預期為 二進位(像素位寬為 1)的一維影像。該運算子在運作期間支援輸入不同 的行長度,以及空行。

該運算子假設前景值的數值為 ONE,而背景值的數值為 ZERO。請務必在 初步二值化過程中符合此要求。

BlobDetector1D運算子有一個額外的輸入 連結FlushI,其與 ImageI 同步。FlushI 會終止當前執行中的上下文,也就是說它就像一個虛擬的「幀結束」信號。當 FlushI埠的任何輸入像素為「1」時,便會觸發此 終止,且將發生於該行 的末端。 此清除操作將重新啟動斑點偵測,並從下一行開始, 同時將 Y 座標重設為 0。所有因 Flush命令而輸出的物件,都會透過ErrorFlagsO連結的第 14 位元 被明確標記。此外,一個 ContextTermination 物件會作為該行中 最後一個物件輸出(該行中已發出清空指令,此狀態由 ErrorFlagsO連結的第 15 位元標記)。該 ContextTermination 是一個虛擬物件,不包含任何 有用的特徵資料。

BlobDetector1D運算子的運作方式 如圖所示。 前景像素('1')以藍色標示。 符號「>」表示物件輸出於哪一行。物件的命名 對應於其集合標籤,這些標籤存在於輸出連結 ErrorFlagsO 中。

BlobDetector1D 運算子的沖洗行為

圖 401. BlobDetector1D 運算子的平滑處理行為


Output Ports

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

輸出埠的位寬會根據指定的輸入 格式自動調整,以防止特徵資料發生溢出。此外,您也可以手動 設定輸出埠的位寬。若您已在運算子 屬性中啟用相關功能,則可針對 Area/CenterX/CenterY 手動設定連結位寬。

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

  • 在BlobDetector1D 的ErrorFlagsO 埠上新增一個模擬探針。

  • 在模擬中加入一張會導致溢出的圖片。

  • 執行模擬。

  • 開啟 「模擬探針檢視」 視圖 輸出埠。

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

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


  • 十六進位值中的有效位元代表與您的 blob 物件相關的各種錯誤或狀態 資訊。詳情請參閱下表 。

您可在下方的參數說明中找到有關錯誤標誌的詳細說明 。下表提供了一項摘要:

位元 # 描述 註釋
0 區域溢出

該物件的「Area」值 在其 處理歷程中的某個時間點,已超過所提供的輸出位元寬度。

1 區域溢出事件

該物件的「Area」值 在處理過程中超出了指定的輸出位元寬度。 生成的物件會標示溢出發生在第幾行。

2 CenterX 溢出

該物件的CenterX值(影像矩 M10)在其處理歷程中的 某個時間點,已超過所提供的輸出位元寬度。

3 CenterX 溢出事件

該物件的CenterX值(影像矩 M10)在處理過程中 超出了指定的輸出位元寬度。生成的物件標記了發生 溢出的行號。

4 CenterY 溢出

該物件的中心 Y值(影像矩 M01)在其處理歷程中的 某個時間點,已超過所提供的輸出位元寬度。

5 CenterY 溢出事件

該物件的中心 Y值(影像矩 M01)在處理過程中 超出了指定的輸出位元寬度。生成的物件標記了發生 溢出的行號。

6 邊界框高度違規

BoundingBox的高度 超出了您在處理歷史的某個時間點 為物件所設定的 MaxBoundingBoxHeight參數值。

7 BoundingBox HeightViolationEvent

BoundingBox的高度 超過了您在處理過程中 MaxBoundingBoxHeight已超出您 在處理過程中為物件所設定的參數值。生成的 物件標記會顯示在第幾行偵測到 高度違規的情況。

8-11 保留

預留供未來擴充使用。

12 行錯誤

表示一個虛擬物件,用以標記某一行中發生的 物件異常狀況數量,已超出 所選標籤數量所能處理的範圍。可用記憶體不足 以處理後續傳入的資料。

由於這是個虛擬物件,因此其他端口的 特徵資料值並不包含任何有用資料。雖然在模擬中 這些特徵值顯示為 0,但在硬體中卻可能為任何 值。 由於較低的ErrorBits 7-0與已啟用的功能及其 值相關聯,因此這些標誌在硬體中的表現 可能與模擬結果有所不同。

若此錯誤標記存在,它總是該行 輸出中的第一個物件。

13 語境:貪腐

發生的物件異常數量超過了 所選標籤數量所能處理的範圍。可用記憶體不足 以處理所有傳入資料。無法保證 被標記物件的完整性。

當上下文結束時(即由「刷新」觸發),或當您重新啟動 該應用程式(您是在該應用程式中開啟根據您的 設計所建置的 HAP 檔案)時, 該運算子便會恢復至正確的功能。 透過以下這行程式碼,即可處理該執行上下文, 且完全不受先前執行上下文損毀的影響。

14 FlushedLine

這些被標記的物件是因 flush 操作導致的強制上下文 終止而被輸出的。

15 上下文終止

表示一個虛擬物件,用以標示該行中 觸發「flush」操作的上下文結束位置。

由於這是個虛擬物件,因此其他 連接埠上的特徵資料並不包含任何有用資料。雖然在模擬中 特徵值顯示為 0,但在 硬體中卻可能取任何值。 由於較低的ErrorBits 7-0與已啟用的功能及其 數值相關聯,因此這些標誌在硬體中的狀態 也可能與模擬結果有所不同。

在此虛擬物件之後輸出的任何物件,均屬於一個新的 上下文。

表 36. Blob 錯誤標誌說明


I/O Properties

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

Supported Link Format

Link Parameter 輸入連結圖片I 輸入連結 FlushI 輸出連結 BoundingX0O 輸出連結 BoundingX1O 輸出連結 BoundingY1O 輸出連結 BoundingHeightO 輸出連結區域 O 輸出鏈結中心 XO 輸出連結中心 YO 輸出連結錯誤標誌 O
Bit Width 1 1 auto1 auto1 auto2 auto3 [1, 48] / 自動4 [1, 48] / 自動4 [1, 48] / 自動4 16
Arithmetic 無號數 無號數 無號數 無號數 無號數 無號數 無號數 無號數 無號數 無號數
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 auto5 auto5 auto5 auto5 auto5 auto5 auto5 auto5
Max. Img Height any 作為 ImageI 1 1 1 1 1 1 1 1

1

位元寬度是根據 ImageI 鏈路的最大輸入影像寬度而定。其計算方式如下: ceil(log2(Max. Img Width)).

2

位元寬度由參數 LineCountBits 所定義。

3

位寬是根據該參數推導而來的 MaxBoundingBoxHeight. 其計算方式如下: ceil(log2(MaxBoundingBoxHeight)).

4

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

5

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

Parameters

標籤數量
Type 靜態參數
Default 100
Range [1, (輸入連結 I 的最大圖像寬度 / 2 + 2]

為了在內部追蹤部分物件,此參數用於設定 可用的標籤數量。它同時也會影響單行中可 輸出的物件最大數量。 請注意, Blob_Detector_1D運算子的所需資源取決於 標籤的數量。此參數的建議取值範圍為 100 至 500 之間, 這對於大多數應用應已足夠。

若出現的部分物件數量多於所選標籤,則會造成資料遺失,且 幀的上下文將遭到損毀。在此情況下,輸出連結 ErrorFlagsO的第 13 位元將設定為「1」,以表示 所提供的資料已不再可靠。 當偵測到 資料遺失時,此錯誤位元會被設定;並會在執行清空或重新啟動擷取時被重設。

社區
Type 靜態參數
Default EightConnected
Range {四連通、八連通}

此參數用於選取物件偵測所需的鄰域。有關像素 鄰域的詳細說明,請參閱 「定義」。

LineCountBits
Type 靜態參數
Default 10
Range [1, 24]

此參數定義用於對 傳入行進行內部索引的位元數。Y 座標會在索引值 2^LineCountBits. 因此,舉例來說,以 LineCountBits=10, 最大 Y 座標為 1023 (2^10-1)。隨後的 Y 座標行編號 將重新從 0 開始。

MaxBoundingBoxHeight
Type 靜態參數
Default 256
Range [1, 2²⁴]

此參數定義物件邊界框的最大允許高度, 亦即邊界框所涵蓋的行數上限。當 邊界框的高度超過 MaxBoundingBoxHeight值時,其高度 將重置為 1,且該物件會被標記上 HeightViolation標籤(即 ErrorFlagsO 的第 6 位元)。

GenerateBoundingBoxHeightViolationEvents
Type 靜態參數
Default true
Range {true, false}

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

AreaBitWidthMode
Type 靜態參數
Default AutomaticContextMaximum
Range {AutomaticContextMaximum, LinkManuallyEditable}

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

如果 AutomaticContextMaximum 若選取此選項, 該運算子會自動設定物件的最大尺寸位元。 由於一維影像並無實際的最大高度,因此最大高度為 2^LineCountBits 假設為。位元寬度是根據 輸入鏈路 I 上的最大行寬,以及透過 所定義的索引行數量來計算的 LineCountBits 參數。若所有線條上的所有像素 均為前景值,即輸入影像為純白且 構成單一大型物體時,該物體的理論最大面積即達標。

若已知物件的最大可能尺寸,或僅對 特定尺寸的物件感興趣,Basler 建議使用 LinkManuallyEditable 模式。此舉可節省 資源,並縮短整個設計的建置時間。 在 LinkManuallyEditable模式下,您可以編輯 連結的位元寬度屬性,範圍限於 [1, 48] 之間。 連結的 位元寬度會直接轉換為內部用於 計算「面積」特性的位元寬度,因此 會影響整體資源消耗。

若位元寬度不足以容納 物件的「面積」值,則會透過 ErrorFlagO 連結 (第 0 位元)加以標示。

GenerateAreaOverflowEvents
Type 靜態參數
Default false
Range {true, false}

當物件的「面積」值 超過AreaO連結的位元寬度時,該 物件將以其中間狀態輸出。 該物件在內部仍會 繼續處理與執行,但此時輸出的是該物件的 中間結果。因 AreaOverflowEvent而輸出的物件,其ErrorFlagsO 的第 1 位元 會被標記。

CenterXBitWidthMode
Type 靜態參數
Default AutomaticContextMaximum
Range {AutomaticContextMaximum, LinkManuallyEditable}

有關「重心」功能的說明,請參閱「重心」一節。 「重心」功能。

請注意,輸出結果為影像矩 M10。若要取得 質心 X 座標,請使用 DIV 運算子,或將該值 除以目標主機上的面積。

如果您將 AutomaticContextMaximum, 該 運算子會自動設定物件最大大小的位元。由於 一維影像並無實際的最大高度,因此最大高度為 2^LineCountBits 假設有若干條線。位元寬度是 根據輸入鏈路 I 上的最大線寬,以及您透過 所設定的索引線數量來計算的 LineCountBits 參數。當所有行中的所有像素均由 前景值組成時,物件的理論 最大值即達標,也就是說,一張全白輸入影像即構成一個大型物件。若您 使用較大的輸入寬度以及較高的 LineCountBits, 的位寬為 CenterXO 連結的數值可能會非常高。

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

若已知CenterX(影像 矩 M10)的最大可能值,或僅對特定 X 座標的物體感興趣, Basler 建議使用 LinkManuallyEditable 模式。此舉可節省 資源,並縮短整個設計的建置時間。在 LinkManuallyEditable模式下,您可以編輯 連結的位元寬度屬性,其範圍限於 [1, 48] 之間。 連結的 位寬直接對應於內部用於 計算CenterX特徵所採用的位寬,因此 會影響整體資源消耗。

若位元寬度不足以容納物件的 CenterX值,則會 透過ErrorFlagO連結(第 2 位元)加以標示。

GenerateCenterXOverflowEvents
Type 靜態參數
Default false
Range {true, false}

當物件的CenterX值 超過CenterX連結的位元寬度時, 該物件將以其中間狀態輸出。 該物件在內部仍會 繼續處理與執行,但被輸出的其實是該物件的 中間結果。因CenterX OverflowEvent而輸出的物件,會被標記為 ErrorFlagsO 的第 3 位元。

CenterYBitWidthMode
Type 靜態參數
Default AutomaticContextMaximum
Range {AutomaticContextMaximum, LinkManuallyEditable}

有關「重心」功能的說明,請參閱「重心」一節。 「重心」功能。

請注意,輸出值為影像矩 M10。若要取得 質心 Y 座標,請使用 DIV 運算子,或將該值 除以主機電腦上的面積。

如果您將 AutomaticContextMaximum, 該 運算子會自動設定物件最大大小的位元。由於 一維影像並無實際的最大高度,因此最大高度為 2^LineCountBits 假設有若干條線。位元寬度是 根據輸入鏈路 I 上的最大線寬,以及您透過 所設定的索引線數量來計算的 LineCountBits 參數。當所有行中的所有像素均由 前景值組成時,物件的理論 最大值即達標,也就是說,一張全白輸入影像即構成一個大型物件。若您 使用較大的輸入寬度以及較高的 LineCountBits, 的位寬為 CenterYO 連結的數值可能會非常高。

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

若已知CenterY(影像 矩 M10)的最大可能值,或僅對特定 Y 座標的物件感興趣 ,Basler 建議使用 LinkManuallyEditable 模式。此舉可節省 資源,並提升整體設計的建構速度。在 LinkManuallyEditable模式下,您可編輯 連結的位元寬度屬性,範圍限定於 [1, 48] 之間。 連結的 位寬直接對應於內部用於 計算「面積」特性所採用的位寬,因此 會影響整體資源消耗。

若位元寬度不足以容納物件的 CenterY值,則會 透過ErrorFlagO連結(第 4 位元)加以標示。

GenerateCenterYOverflowEvents
Type 靜態參數
Default false
Range {true, false}

當物件的CenterY值 超過CenterY連結的位元寬度時, 該物件將以其中間狀態輸出。 該物件在內部仍會 繼續處理與執行,但此時輸出的是該物件的 中間結果。因CenterY OverflowEvent而輸出的物件,其 ErrorFlagsO 的第 5 位元會被標記。

Examples of Use

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

  • 「BlobDetector1D」

    範例 — 展示運算子BlobDetector1D在 線掃描應用中的使用方式。