運算子函式庫:Blob
BlobDetector2D 運算子可偵測二值影像中的物件,並判定其屬性。該運算子的 輸出為數個資料流,分別代表每個物件的屬性。
該運算子的功能可於 VisualApplets 中進行完整模擬。
另請參閱 「Library Blob」的介紹。
BlobDetector2D支援 BoundingBox、Area 以及 重心 X 和 Y 這些功能。
![]() |
質心 X 和 Y並非 該算子的直接輸出 |
|---|---|
|
輸出埠CenterX和 CenterY實際上提供的是影像矩 M10 (CenterX) 和 M01 (CenterY)。要擷取物體的重心,您 必須將這些矩除以擷取的面積:
|
操作員會逐行處理輸入的影像。由於操作員 無法預知後續情況,某些在後續處理中會連通區域,起初可能會顯現為獨立的 區域。因此,本文中單一行內的相連像素被稱為 物件偽影。 BlobDetector2D操作員會檢查這些物件 偽影是否與下一行的其他物件偽影重疊。此舉旨在 判定這些物件究竟是真正獨立的,還是屬於某個 較大物件的一部分。 該 運算子所能處理的物件殘像最大數量,由LabelCount參數定義。若 物件殘像的數量超過 LabelCount 的值,資料將會遺失,且 物件結果的完整性將無法保證。這稱為 上下文 損毀。發生資料遺失的那一行,會被標記為一個 「行錯誤」(Line Error)虛擬物件,可透過 ErrorFlag 辨識。在受損上下文中隨後出現的所有物件都會被標記為此狀態。 當上下文在幀結束時 或透過重新啟動 Applet 而自動重置後,上下文損毀即告結束。所有錯誤標記均列於「輸出埠」章節中。
在大多數情況下,為防止上下文損壞所需的標籤數量 等於一行中物件殘留物的最大數量。對於 鄰域= 4 以及 鄰域= 8 的情況,所需的 標籤確切數量略有不同:
-
當鄰域= 4 時,為 防止上下文損壞所需的標籤數量,等於第 N 行位置 X 的任何像素與 第 N+1 行位置 X 的像素之間 所含物件殘留物的最大數量。
-
對於鄰域= 8 時,為 防止上下文損壞所需的標籤數量,等於第 N 行位置 X 的任何像素與 第 N+1 行位置 X+1 的像素之間 所含的物件殘留物最大數量。
如果您不確定所選的標籤數量是否足以滿足您的 使用需求,請透過模擬進行確認。
在實例化BlobDetector2D模組時,您可以 定義要建立哪些輸出連接埠。透過啟用/停用這些連接埠, 對應的功能也會自動啟用/停用。確認 這些連接埠後,便無法再進行變更。 若您需要其他輸出埠,則必須 實例化另一個BlobDetector2D模組。
斑點偵測運算子屬於少數幾種其處理速度—— 即頻寬——取決於影像內容的運算子。這些運算子在 連貫線條內,前景與背景像素變化較少的影像上表現最佳。 因此,若多條線條內存在雜訊或大量物件偽影, 將顯著降低資料吞吐量。不過,此現象僅適用於 含有極強雜訊的影像。
該運算子透過逐行處理輸入影像, 實現最低延遲。一旦物體的邊界確定無誤,該運算子便會 立即將物體特徵作為輸出提供。 因此,物件的 輸出發生在該物件結束的同一行中。這使得在 影像本身仍由 運算子處理的同時,即可對已完成的物件特徵進行後處理。
請注意,DMA 及其他某些運算子會在接收到幀結束訊號後, 才會回報處理完成。當輸入影像的最後一行 處理完畢時,系統便會產生幀結束訊號。
該運算子的資源消耗取決於已啟用的功能、 這些功能所佔用的位元數,以及所選定的標籤數量。因此, Basler 建議停用非必要的功能,並在 設定LabelCount參數時務必謹慎。
![]() |
部分停用邊界框連接埠並不會節省資源 |
|---|---|
|
由於包圍框具有多個輸出埠,因此此功能僅在 以下情況下才會被停用: 所有 其連接埠皆被停用時才會停用。僅 部分停用邊界框連接埠並不會節省資源。 |
![]() |
手動設定最大值可節省資源 |
|---|---|
|
為了節省資源並改善設計的操作性,Basler 建議 若您已知待偵測物件的最大值, 請手動設定連結的位元寬度。 |
Blob 偵測器的ImageI輸入需為 二進位(像素位元寬度為 1)的 2D 影像。此運算子支援 影像內不同行長度的輸入,亦支援空行與空幀。
該運算子假設前景值的數值為 ONE,而背景值的數值為 ZERO。請確保在 初步二值化過程中符合此要求。
輸出以 VALT_IMAGE2D 影像格式呈現。每個 輸出埠代表一個物件特徵/物件屬性。這些輸出埠為同步運作 ,並共同描述單一物件。每個輸出像素提供 已完成物件或錯誤狀態物件的值。該輸出究竟是 已擷取的物件,還是錯誤狀態物件,則由 ErrorFlagsO輸出埠所指示。代表 物件的像素會出現在該物件已完成的同一行中。它們是 依照完成順序輸出。例如,有兩個物件結束於第 10 行。 物件 A 的最後一個像素的 X 座標為 42,物件 B 的最後一個像素的 X 座標為 97。因此,在運算元的輸出埠中,物件 A 為第一個像素,物件 B 為 第二個像素。未完成任何物件且未發生錯誤的 行將保持空白。
輸出埠的位寬會根據指定的輸入 格式自動調整,以防止特徵資料發生溢出。此外,您也可以手動 設定輸出埠的位寬。若您已在運算子 屬性中啟用此功能,則可針對「面積/中心 X/中心 Y」手動設定連結位寬。
ErrorFlagsO埠會輸出數個錯誤標誌,用於 表示溢出或額外資訊標籤。每個位元皆保留給特定的標誌。您可以 在硬體的執行環境中或於 模擬環境中查看這些錯誤標誌。若要在模擬環境中查看這些錯誤標誌:
-
在BlobDetector2D 的ErrorFlagsO 連接埠上新增一個模擬探針。
-
在模擬中加入一張會導致內容溢出的圖片。
-
執行模擬。
-
開啟 視圖 的輸出 連接埠。
-
捲動至您要檢查的像素位置,放大以查看像素
值,並將像素值設定為 :
-
十六進位值中的有效位元代表您所擁有的 blob 物件所涉及的各種錯誤或狀態 資訊。詳情請參閱下表 。
您可在下方的參數說明中找到有關錯誤標誌的詳細說明 。下表列出了相關摘要:
| 位元 # | 描述 | 註釋 |
|---|---|---|
| 0 | 區域溢出 |
該物件的「Area」值在其處理歷程中的某個時間點,超過了所提供的輸出位元 寬度。 |
| 1 | CenterX 溢出 |
該物件的CenterX值(影像矩 M10)在其處理歷程中的 某個時間點,超過了所提供的輸出位元寬度。 |
| 2 | CenterY 溢出 |
該物件的中心 Y值(影像矩 M01)在其處理歷程中的 某個時間點,超過了指定的輸出位元寬度。 |
| 3, 4 | 保留 |
預留供未來擴充使用。 |
| 5 | 行錯誤 |
表示一個虛擬物件,用以標示某行中發生的 物件異常狀況數量,已超出 所選標籤數量所能處理的範圍。可用記憶體不足 以處理後續傳入的資料。 由於這是個虛擬物件,因此 其他連接埠上的特徵資料值並不包含任何有用資料。雖然在模擬中 這些特徵值顯示為 0,但在硬體中卻可能 呈現任何數值。 由於較低的ErrorBits 7-0與已啟用的功能及其 值相關聯,這些標誌在硬體中的值也可能與 模擬結果不同。 若此錯誤標記存在,它總是該行 輸出的第一個物件。 |
| 6 | 語境:貪腐 |
發生的物件異常數量超過了 已選定的標籤數量所能處理的範圍。可用記憶體 不足以處理所有傳入的資料。無法保證 被標記物件的完整性。 當幀結束時,或透過重新啟動擷取, 操作員即可恢復正常運作。後續影像 的處理過程,不會受到先前 上下文損毀的影響。 |
表 37. Blob 錯誤標誌說明
| Property | Value |
|---|---|
| Operator Type | M |
| Input Link | ImageI,資料輸入 |
| 輸出連結 | BoundingX0O,資料輸出 BoundingX1O,資料輸出 BoundingY1O,資料輸出 BoundingHeightO,資料輸出 AreaO,資料輸出 CenterXO,資料輸出 CenterYO,資料輸出 ErrorFlagsO,資料輸出 |
|
位元寬度是根據 ImageI
連結的輸入最大影像寬度而定。其計算方式如下: |
|
|
位元寬度是根據 ImageI
連結的輸入最大影像高度而定。其計算方式如下: |
|
|
位元寬度是根據 ImageI
連結的輸入最大影像高度而定。其計算方式如下: |
|
|
透過參數AreaBitWidthMode、 CenterXBitWidthMode 以及 CenterYBitWidthMode,您可以選擇 手動設定連結,或是使用自動模式。若您 手動編輯連結,允許的範圍為 [1, 48]。 |
|
|
影像的最大寬度等於參數 LabelCount+ 1。 |
| 標籤數量 | |
|---|---|
| Type | 靜態參數 |
| Default | 100 |
| Range | [1, (輸入連結 I 的最大影像寬度 / 2 + 2] |
|
為了在內部追蹤部分物件,此參數用於設定 可用的標籤數量。它同時也會影響單行中最多可 輸出的物件數量。 請注意, BlobDetector2D運算子的所需資源取決於 標籤的數量。此參數的建議數值範圍為 100 至 500 之間, 這對於大多數應用而言應已足夠。 若出現的部分物件數量多於所選標籤,則會造成資料遺失,且 幀的上下文將遭到損毀。在此情況下,輸出鏈路 ErrorFlagsO的第 6 位元將設為「1」,以表示 所提供的資料已不再可靠。 當偵測到 資料遺失時,該錯誤位元會被設定;並於輸出幀結束時重置。 |
|
| 社區 | |
|---|---|
| Type | 靜態參數 |
| Default | EightConnected |
| Range | {四連通、八連通} |
|
此參數用於選取物件偵測所需的鄰域。有關像素 鄰域的詳細說明,請參閱 「定義」。 |
|
| AreaBitWidthMode | |
|---|---|
| Type | 靜態參數 |
| Default | AutomaticFrameMaximum |
| Range | {AutomaticFrameMaximum, LinkManuallyEditable} |
|
物件的面積由該物件所有前景 像素的總和所定義。 若選取「AutomaticContextMaximum」, 運算子會自動設定物件最大大小的位元。 物件的 最大可能大小取決於輸入連結 I 上的 最大寬度與高度。當影像中的所有 像素均為前景值時,即會達到物件的理論最大面積,換言之,一張全白的輸入影像 即構成一個大型物件。 若已知CenterX(影像 矩 M10)的最大可能值,或者僅對特定 X 座標的物件感興趣, Basler 建議使用 LinkManuallyEditable 模式。此舉可節省 資源,並縮短整個設計的建置時間。在 LinkManuallyEditable模式下,您可編輯 連結的位元寬度屬性,其範圍限於 [1, 48] 之間。 連結的 位寬直接對應於內部用於 計算「面積」特徵所採用的位寬,因此 會影響整體資源消耗。 若位元寬度不足以容納 物件的「面積」值,則會透過 ErrorFlagO連結(第 0 位元)加以標示。 |
|
| CenterXBitWidthMode | |
|---|---|
| Type | 靜態參數 |
| Default | AutomaticFrameMaximum |
| Range | {AutomaticFrameMaximum, LinkManuallyEditable} |
|
請注意,輸出結果為影像矩 M10。若要取得 質心 X 軸的像素座標,請使用 DIV 運算子,或將該值 除以主機電腦上的面積。 若設定AutomaticContextMaximum,則 運算子會自動設定輸出位元。一個 物件的最大可能大小取決於輸入連結 I 的最大寬度與高度。若 影像中所有像素皆由前景值組成,即 一個純白輸入影像(視為單一大型物件),則該 物件的理論最大 CenterX 值,是在圖像的所有像素均由前景值組成時達到,也就是說, 一張全白的輸入圖像即為一個大型物件。若使用大型 輸入圖像, CenterXO連結的位元寬度可能會非常高。 若已知CenterX(影像 矩 M10)的最大可能值,或僅對特定 X 座標的物體感興趣, Basler 建議使用 LinkManuallyEditable 模式。此舉可節省 資源,並縮短整個設計的建置時間。在 LinkManuallyEditable模式下,您可編輯 連結的位元寬度屬性,範圍限定於 [1, 48] 之間。 連結的 位寬直接對應於內部用於 計算CenterX特徵所採用的位寬,因此 會影響整體資源消耗。 若位元寬度不足以容納 物件的CenterX值,則會 透過ErrorFlagO連結(第 1 位元)加以標示。 |
|
| CenterYBitWidthMode | |
|---|---|
| Type | 靜態參數 |
| Default | AutomaticFrameMaximum |
| Range | {AutomaticFrameMaximum, LinkManuallyEditable} |
|
請注意,輸出結果是影像矩 M01。若要取得 質心 Y 的像素座標,請使用 DIV 運算子,或將該值 除以主機電腦上的面積。 若設定AutomaticContextMaximum,則 運算子會自動設定輸出位元。一個 物件的最大可能大小取決於輸入連結 I 上的最大寬度與高度。若 影像中所有像素皆為前景值,即 一個純白輸入影像(視為單一大型物件),則該 物件的理論最大 CenterY 值,是在影像的所有像素均由前景值組成時達到,也就是 一張全白且僅包含一個大型物件的輸入影像。若使用大型 輸入影像, CenterYO連結的位元寬度可能會變得非常高。 若已知CenterY(影像 矩 M10)的最大可能值,或僅對特定 Y 座標的物體感興趣, Basler 建議使用 LinkManuallyEditable 模式。此舉可節省 資源,並縮短整個設計的建置時間。在 LinkManuallyEditable模式下,您可編輯 連結的位元寬度屬性,其取值範圍限於 [1, 48] 之間。 連結的 位寬直接對應於內部用於 計算「面積」特徵所採用的位寬,因此 會影響整體資源消耗。 若位元寬度不足以容納物件的 CenterY值,則會 透過ErrorFlagO連結(第 2 位元)加以標示。 |
|
以下範例展示了 BlobDetector2D 運算子的使用方式:
-
範例 — 展示運算子BlobDetector2D在 區域掃描應用中的使用方式。

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






上一頁

