運算子庫:Blob
Blob_Analysis_1D 運算子可偵測 高度無限的二值影像中的物件,並判定其屬性。該 運算子的輸出為數個資料流,這些資料流代表每個物件的屬性。
![]() |
Blob_Analysis_1D是一個舊版運算子 |
|---|---|
|
Blob_Analysis_1D運算子是一個舊版運算子, 僅為維持向後相容性而保留。在新設計中,請使用 BlobDetector1D 來取代。 |
![]() |
您可能需要改用 2D 運算子 |
|---|---|
|
Blob_Analysis_1D 運算子適用於物體位於 任意位置的擷取情境。若在您的線掃描應用中,物體位置可 透過影像觸發器來確定,請改用 Blob_Analysis_2D 運算子。 |
本操作員參考手冊包含 以下資訊:
- 運算子功能的說明
- 一維應用的時序模型
- 在「VisualApplets 」高階模擬中使用運算子
- 操作員輸入與輸出埠
- I/O Properties
- 支援的連結格式
- Parameters
- Examples of Use
若要對 Blob 分析運算子有個概覽,務必 閱讀 「Blob 函式庫」中的介紹。
「斑點分析 1D」運算子是專為無邊界的一維影像所設計。一般 而言,在 2D 斑點分析中,物件的特徵與該物件在 畫面中的位置相關,且座標原點為 影像的左上角。但對於高度無邊界的一維影像而言,此方法並不適用。 物件 無法與 y 座標相關聯,因為該值將會無限增長,或導致 溢出。
VisualApplets 的「斑點分析 1D」運算子允許使用無限長的影像, 其中物件可能位於任何位置。 該運算子透過一個參考輸入 「LineMarkerI」進行擴充,物體即與此參考輸入相關聯。此參考輸入的值可以是 由外部編碼器及觸發脈衝所控制的計數器數值,例如。透過此方法, 可將由斑點分析所識別的每個物體,分配至 正確的參考位置。
輸入連結「FlushI」用於清空輸出,亦即完成一個輸出 幀。例如,這對於完成 DMA 傳輸是必要的。
下圖說明了「Blob Analysis 1D」運算子的運作方式。 圖中展示了運算子輸入端的範例資料及其產生的輸出結果。 左側顯示的是經由「Blob Analysis」處理後的二值無邊界影像。 第二 欄代表 LineMarkerI 的輸入。在此,使用計數器為物件 標記參考值。為了更清晰地呈現,僅列印 相關的數值。假設線標記輸入的位元寬度為九位元。因此, 當數值達到 512 時會發生溢出。 第三欄顯示了清空輸入。在 此範例中僅有一個清空條件。最右側的欄位代表 「斑點分析」運算子的輸出。觀察此範例可發現,影像 連同線標記一併在斑點分析過程中進行處理。一旦 物件處理完成,便會立即輸出。 所有物件的最終物件屬性 均以線標記標示,該線標記是與 對應物件的第一張影像行一同設定的。邊界框座標 X0 和 X1 與 2D 斑點分析的物件特徵類似,而 Y1 座標則是 物件的高度。 Y0 座標取自「一維斑點分析」 運算子的內部計數器。其起始值為零,最大值等於 該運算子屬性對話方塊中設定的物件最大高度。當滿足清空條件時, 輸出端會觸發一幀結束標記。
與 2D 運算子類似,「Blob Analysis 1D」運算子屬於「M」類型,其中 所有輸出皆為同步。與 2D 運算子不同,1D 運算子有三個輸入。 前兩個輸入「ImageI」和「LineMarkerI」為同步輸入,且必須 由同一個 M 型運算子提供。輸入鏈路「FlushI」與 影像為非同步,因此無需任何同步處理。下圖 展示了一種可能的配置(還有許多其他配置)。
如前所述,flush 用於完成一個輸出幀,也就是 產生幀結束標誌。根據 flush 輸入的時機以及 影像中的物件,可能會產生空幀,也可能產生 包含大量資料的輸出幀。為了控制此行為,會使用參數 output_frame_size_overflow_handling和 suppress_empty_output_frames(參見下文的參數說明 )便派上用場。以下波形示意圖展示不同組合的 參數設定、資料及「flush」輸入所產生的效果。「Blob Data」代表輸出 的時序。
第一個範例展示了在達到最大幀大小後 如何生成新的幀。當最後一個 blob 輸出完畢並完成當前輸出幀後,blob 運算子會產生一個幀結束標記。清空訊號將產生 額外的幀結束標記:
下一個範例展示了如何抑制空的輸出幀。如您所見, 第一次清空操作被忽略。第二次清空操作則會延遲,直到有可輸出的 數據塊為止。透過這種方式,操作員可以延遲清空輸出:
在第三個範例中,我們可以看到 flush 輸入端出現常數 1 的行為。由於 suppress_empty_output_frame 設定為 "yes",運算子會在每次 blob 輸出後 產生一個幀結束標記。 警告:若不慎將 suppress_empty_output_frame 設定為「no」,常數 1 可能會導致數百萬個幀結束標記。若此輸出 連接至VisualApplets 輸出(DMA 運算子),可能會導致 PC 過載!
最後一個範例展示了物件的捨棄機制,因為參數 "output_frame_size_overflow_handling" 被設定為 "discard_exceeding_objects"。
請注意,輸出時序取決於輸出管線。若資料無法 被處理,也就是說,位於 blob 運算子後方的連續運算子阻礙了 處理流程,則可能會發生沖洗訊號遺失的情況。
VisualApplets 的斑點分析運算子是極少數幾種 其處理速度(即頻寬)取決於影像內容的運算子。 若 影像中包含大量物件,會導致物件清單過於龐大,進而可能造成 運算子輸入速度減慢。此情況僅適用於含有極強噪訊的影像。在 受控條件下,該運算子的執行速度應足以滿足需求。
此運算子的設計旨在將延遲降至最低。輸入影像 會逐行傳輸至 Blob 分析模組。 若物件已完全 傳輸至該運算子,一旦該 運算子偵測到傳輸完成,其物件特徵便會立即輸出。因此,Blob Analysis 會在物件 完全傳輸至該運算子後立即輸出物件。物件特徵的 後處理可在影像本身仍在處理的同時開始進行。
請注意,DMA 及其他某些運算子會在等待幀結束訊號後, 才會回報完成。請參閱 flush 輸入的說明,以了解 Blob_Analysis_1D 運算子中幀結束訊號的產生方式。
![]() |
使用「Blob_Analysis_1D」模擬時請謹慎 |
|---|---|
|
「Blob 1D」模擬存在某些限制。請謹慎使用此 模擬功能。 |
VisualApplets 即使影像協定為一維,仍會使用一般二維影像。因此,在 模擬運算子時,我們使用一般影像。每張影像皆被視為獨立處理。
該運算元的模擬結果並不等同於硬體行為。兩者之間有 兩項差異:
-
物件特徵輸出的順序在硬體與 軟體中可能有所不同。這是因為硬體輸出取決於 資料的時序,而此時序無法在VisualApplets 中進行模擬。
-
第二個(也是最重要的)差異在於 Flush 條件的運作方式。FlushI 輸入與影像資料 輸入完全是異步的。FlushI 用於完成輸出幀,也就是說,它會將 幀尾標記插入輸出流中。 (參見上文,以及下文的 參數說明。)由於 Flush 與影像資料是異步運作的,因此 無法透過模擬來重現與硬體相同的行為。 因此, VisualApplets 模擬採用了替代的模擬模型。由於 無法複製硬體的行為,該模擬模型 特意與硬體以不同的方式實現。它具有以下 特性:
-
該模擬嘗試透過統計兩者輸入的像素數量,來比較資料輸入 與沖洗輸入之間的相關性。因此,若 資料輸入與沖洗輸入的影像尺寸相同,則 其相關性在像素位置上為 1:1。 然而,若 清空輸入的像素數量較少(例如每行 1 個像素),則 模擬僅會比較像素位置。
-
當滿足平齊條件時,系統會根據物件的 Y0 座標輸出該物件,而非像 硬體那樣根據其完成狀態來輸出。
-
在影像的最後一個物件輸出後,所有後續的 刷新訊號都會被忽略。因此,在模擬中,輸入端的 刷新訊號數量與幀 輸出數量並無關聯。
由於這種行為,使用此模擬時應謹慎。
以下圖示透過微型圖像展示了一些範例,用以說明 在模擬中使用 flush 訊號時的一些特殊情況。
-
Blob 分析的 ImageI 輸入由一維二進位 影像表示,亦即位寬為 1 位元、具有指定寬度且高度無限制的 影像。 可選擇最高達 32 像素的並行處理能力。前景值 假設為「1」,而背景值則必須為「0」。 此點必須在二值化過程中予以考量。
由於 LineMarkerI 的輸入與影像資料輸入是同步的,因此這些連結必須 具有相同的影像尺寸與並行度。然而,連結的位元 寬度可任意設定。LineMarker 的值在每條影像線中必須保持恆定。
輸入連結「FlushI」與其他輸入連結為異步運作。其可具有任何 位元寬度、並行度及影像尺寸。若任何 並行元件的輸入位元中有一個被設定為高電平,則會清空 Blob 分析的輸出。
每個輸出埠代表一個物件特徵/物件屬性。這些埠上的每個 輸出值代表一個物件。因此,物件屬性 會形成一個資料流。輸出資料流的長度等於 影像中偵測到的物件數量,並可分為多個子幀。 每個輸出埠的高度為 1 像素,且具有特定長度。它們以 灰階 2D 影像的形式呈現。
輸出埠是透過運算子參數及 輸入的屬性來設定的。無法直接變更連結的屬性。
連接埠 ErrorFlagsO 會輸出數個溢位錯誤旗標。每個位元皆保留用於特定的旗標。詳細說明請參閱下方的參數說明。下表提供摘要說明:
| Bit # | 描述 | 與物件相關 | 注意事項 |
|---|---|---|---|
| 0, 1 | 標籤溢位 | no |
Blob Analysis 偵測到太多物件,無法全部儲存至記憶體中。若要增加兩行影像內的最大物件數量,可以變更運算子參數「LabelBits」。 此旗標會在偵測到時設定,並持續到資料輸出算格結束為止。目前已輸出的所有物件屬性均有效。 對於 Blob Analysis 1D 運算子,該旗標在下一個有效資料輸出時,僅會在一個時脈週期內維持高階狀態。 設定此旗標後,blob 分析的輸出可能會產生錯誤的物件屬性。如果有足夠的物件標籤可用,運算子將會恢復正常功能。 |
| 2 | 輸出遭截斷 | 是 |
影像中的物件數量超過運算子參數對話方塊中設定的最大輸出寬度。此旗標會與符合輸出寬度的最後一個物件一起設定。 |
| 3 | 物件大小超過最大值 | 是 |
如果 1D Blob Analysis 的物件超過其最大高度,就會設定此旗標。運算子會將此超出的物件切割成較小的物件。接續的物件會標記此旗標,以便偵測切割情況。 對於 2D Blob Analysis,此旗標會設定為固定的零。 |
| 4 | 區域已截斷 | 是 |
物件的區域連同錯誤旗標大於區域位元(Area bits)所允許的大小。 |
| 5 | 重心 X 已截斷 | 是 |
X 方向的重心大於位元所允許的大小。 |
| 6 | 重心 Y 已截斷 | 是 |
Y 方向的重心大於位元所允許的大小。 |
| 7 | 輪廓長度溢位 | 是 |
輪廓長度大於為運算子所參數化的位元允許的大小。 |
表 38. Blob 錯誤標誌說明
| Property | Value |
|---|---|
| Operator Type | M |
| Input Links | ImageI,影像資料輸入 LineMarkerI,資料輸入 FlushI,資料輸入 |
| 輸出連結 | LineMarkerO,資料輸出 BoundingX0O,資料輸出 BoundingX1O,資料輸出 BoundingY0O,資料輸出 BoundingY1O,資料輸出 AreaO,資料輸出 CenterXO,資料輸出 CenterYO,資料輸出 ContourOrthoO,資料輸出 ContourDiaO,資料輸出 ErrorFlagsO,資料輸出 |
同步與非同步輸入
- 同步群組:ImageI、 LineMarkerI
- FlushI與該群組是異步運作的。
| label_bits | |
|---|---|
| Type | 靜態參數 |
| Default | 7 |
| Range | [5, 31] |
|
此參數用於設定內部標記物件所需的位元數。它也會影響兩條影像行中可同時存在物件的最大數量,由 2^label_bits 決定。請注意,Blob 分析所需的記憶體資源幾乎會隨著每個附加位元而加倍。此參數的良好數值範圍介於 7 到 9 位元之間,這對於幾乎所有應用來說都已足夠。 如果偵測到此位址空間溢位,運算子會在連接埠「ErrorFlagsO」的第 0 位元和第 1 位元輸出錯誤旗標。這些旗標會在偵測到溢位時設定,並在輸出影格結束時重設。 |
|
| neighborhood | |
|---|---|
| Type | 靜態參數 |
| Default | eight_connected |
| Range | {four_connected, eight_connected} |
|
選取 Object Detection 所需的鄰域。如需像素鄰域的詳細說明,請參閱 'Definition'。 |
|
| max_object_height_bits | |
|---|---|
| Type | 靜態參數 |
| Default | 10 |
| Range | [3, 31] |
|
此參數用於指定物件的最大高度。舉例來說, 若高度設定為 10 位元,則物件的高度不得超過 1024 影像行。 若某個物件超過此限制,則會被分割成兩個或更多 個獨立的物件。若發生此情況,端口 ErrorFlagsO 的第 3 位元處的錯誤標誌將與恢復的物件一同被設定。 |
|
| max_output_frame_size | |
|---|---|
| Type | 靜態參數 |
| Default | 65536 |
| Range | [1, 67108864] |
|
選取最大輸出幀大小,即單一輸出幀中 的物件最大數量。 |
|
| 輸出幀大小溢出處理 | |
|---|---|
| Type | 靜態參數 |
| Default | generate_new_frame |
| Range | {生成新幀,捨棄超出範圍的物件} |
|
最大輸出幀大小透過參數 「max_output_frame_size」指定。若物件數量超過此大小, 運算子可選擇產生新幀,或捨棄超出部分的物件。 生成新幀將導致幀結束,亦即該幀已 完成。若物件被捨棄,該運算子將在 ErrorFlagsO 埠的第 2 位元處輸出錯誤標誌,並隨同該幀的最後一個有效物件一併輸出。 請注意,在執行「flush」指令時,系統也會產生一個新的幀。 |
|
| suppress_empty_output_frames | |
|---|---|
| Type | 靜態參數 |
| Default | 是 |
| Range | {yes, no} |
|
此參數用於抑制因清空 狀況且無物件資料所導致的空輸出幀。 詳細的時序圖可參閱〈輸出幀的產生 — 清空幀、空幀與資料捨棄〉一節。 |
|
| line_marker | |
|---|---|
| Type | 靜態參數 |
| Default | used |
| Range | {used, not_used} |
|
每個物件的「line_marker」會輸出至「LineMarkerO」。位元寬度 由輸入連結 LineMarkerI 決定。若未使用線標記, 則位元寬度會設定為 1,且其輸出為常數零。 |
|
| bounding_box_x0 | |
|---|---|
| Type | 靜態參數 |
| Default | used |
| Range | {used, not_used} |
|
邊界框表示剛好包覆物件的最小軸對齊矩形。每個座標值都是相對於影像的左上角。Bounding Box X0 表示每個物件的最低 x 座標。它會輸出於「BoundingX0O」。Bit Width 由輸入影像決定。若未使用邊界框,則 Bit Width 會設為 1 個 bit,且其輸出為固定的零。 |
|
| bounding_box_x1 | |
|---|---|
| Type | 靜態參數 |
| Default | used |
| Range | {used, not_used} |
|
邊界框表示剛好包覆物件的最小軸對齊矩形。每個座標值都是相對於影像的左上角。Bounding Box X1 表示每個物件的最高 x 座標。它會輸出於「BoundingX1O」。Bit Width 是由輸入影像決定。若未使用邊界框,則 Bit Width 會設為 1 個 bit,且其輸出為固定的零。 |
|
| bounding_box_y0 | |
|---|---|
| Type | 靜態參數 |
| Default | used |
| Range | {used, not_used} |
|
邊界框的 y0 代表每個物件的最低 y 座標。 此座標是基於運算子的內部計數器。它會從 處理的第一行影像開始計數。其最大值等於 透過參數 max_object_height_bits 設定的最大高度。發生溢出後, 計數器將重新從零開始計數。 此功能可取代線條標記。不過,線條 標記提供更多可能性,並能實現複雜的配置。 此功能會於「BoundingY0O」輸出。位元寬度由 輸入影像決定。若未使用邊界框,則位元寬度會設定為 1,且 其輸出為恆定值 0。 |
|
| bounding_box_y1 | |
|---|---|
| Type | 靜態參數 |
| Default | used |
| Range | {used, not_used} |
|
在 1D 運算子中(有別於 2D 運算子),邊界框 y1 代表物件的高度。其輸出位於「BoundingY1O」。 位元寬度 由輸入影像決定。若未使用邊界框,則位元寬度 將設定為 1,且其輸出為常數 0。 |
|
| area_mode | |
|---|---|
| Type | 靜態參數 |
| Default | use_area_with_maximum_required_bits |
| Range | {area_not_used, use_area_with_maximum_required_bits, use_area_with_specified_bits} |
|
物件的面積定義為所有物件前景像素的總和。此參數用於選擇所需的面積模式。若選擇「use_area_with_maximum_required_bits」,運算子會自動決定物件可能最大尺寸所需的 bits。物件可能的最大尺寸取決於輸入連結 I 處的最大寬度和高度。如果影像的所有像素都由前景值組成(即白色輸入影像為一個大物件),則可達到物件的理論最大值。 如果使用者可以確定物件的面積不會大於指定的值,則可以進行參數化設定。如果已知最大物件尺寸,請選擇「use_area_with_specified_bits」。使用參數「area_bits」來指定 bit 數量。如果根本不需要面積,請選擇「area_not_used」。在「area_not_used」模式下,Bit Width 會設為 1,且其輸出為固定的零。 |
|
| area_bits | |
|---|---|
| Type | 靜態參數 |
| Default | not_used |
| Range | {not_used, used} |
|
只有在參數「area_mode」設為「use_area_with_specified_bits」時,此參數才會啟用。如果物件的面積大於所選 bits 允許的大小,blob analysis 將會在輸出連結「ErrorFlagsO」的位元編號 4 輸出溢位旗標。 |
|
| center_of_gravity_x_mode | |
|---|---|
| Type | 靜態參數 |
| Default | use_cX_with_maximum_required_bits |
| Range | {cX_not_used, use_cX_with_maximum_required_bits, use_cX_with_specified_bits} |
|
有關重心(center of gravity)的說明,請參閱 'Center of Gravity'。 請注意,進行 Blob 分析後,必須將輸出除以面積才能得到正確的結果。 如果參數設為 "use_cX_width_maximum_required_bits",算子將會自動決定輸出位元數。如果使用大型輸入影像,所需的位元數可能會非常高。 如果參數值使用 "use_cX_with_specified_bits",則位元數是可調整的。 如果不需要 X 方向的重心,可以透過選擇 "cX_not_used" 來關閉它。 |
|
| center_of_gravity_x_bits | |
|---|---|
| Type | 靜態參數 |
| Default | 29 |
| Range | [2, auto] |
|
如果 "center_of_gravity_x_mode" 設為 "use_cX_with_specified_bits",可以在此變更位元數。否則,此參數將會停用。 |
|
| center_of_gravity_x_overflow_flag | |
|---|---|
| Type | 靜態參數 |
| Default | not_used |
| Range | {not_used, used} |
|
如果手動設定 X 方向重心的位元數,此參數會被啟動並可設為 "used"。如果偵測到溢位(overflow),算子將會在輸出連結 "ErrorFlagsO" 的第 5 位元輸出 ONE。 |
|
| center_of_gravity_y_mode | |
|---|---|
| Type | 靜態參數 |
| Default | use_cY_with_maximum_required_bits |
| Range | {cY_not_used, use_cY_with_maximum_required_bits, use_cY_with_specified_bits} |
|
有關重心(center of gravity)的說明,請參閱 'Center of Gravity'。 請注意,進行 Blob 分析後,必須將輸出除以面積才能得到正確的結果。 如果參數設為 "use_cY_width_maximum_required_bits",算子將會自動決定輸出位元數。如果使用大型輸入影像,所需的位元數可能會非常高。 如果參數值使用 "use_cY_with_specified_bits",則位元數是可調整的。 如果不需要 Y 方向的重心,可以透過選擇 "cY_not_used" 來關閉它。 |
|
| center_of_gravity_y_bits | |
|---|---|
| Type | 靜態參數 |
| Default | 29 |
| Range | [2, auto] |
|
如果 "center_of_gravity_y_mode" 設為 "use_cY_with_specified_bits",可以在此變更位元數。否則,此參數將會停用。 |
|
| center_of_gravity_y_overflow_flag | |
|---|---|
| Type | 靜態參數 |
| Default | not_used |
| Range | {not_used, used} |
|
如果手動設定 Y 方向重心的位元數,此參數會被啟動並可設為 "used"。如果偵測到溢位(overflow),算子將會在輸出連結 "ErrorFlagsO" 的第 6 位元輸出 ONE。 |
|
| contour_length_mode | |
|---|---|
| Type | 靜態參數 |
| Default | contour_length_not_used |
| Range | {contour_length_not_used, contour_length_used} |
|
物體的輪廓長度包含所有邊緣,甚至是孔洞處的邊緣。如需詳細解釋,請參閱 'Contour Length'。 若選取此功能,可依據所選的鄰域,透過 參數「contour_length_bits_orthogonal_connected」及 「contour_length_bits_diagonal_connected」來選擇所需的位元數。 若選取 4-連通鄰域,則輪廓長度僅能 在正交方向上計算。若選取 8-連通鄰域, 則輪廓長度將在正交及對角方向上計算。 |
|
| contour_length_bits_orthogonal_connected | |
|---|---|
| Type | 靜態參數 |
| Default | 16 |
| Range | [1, 31] |
|
若將「contour_length_mode」設定為「contour_length_used」,則可在此 選擇用以表示正交相連像素等高線長度所需的 位元數。 |
|
| contour_length_bits_diagonal_connected | |
|---|---|
| Type | 靜態參數 |
| Default | 16 |
| Range | [1, 31] |
|
若將「contour_length_mode」設定為「contour_length_used」,則可在此 選擇用以表示對角相鄰像素輪廓長度所需的位元數。 此功能僅在選取 8 鄰域時才可用。 否則,此參數將被停用。 |
|
| contour_length_overflow_flag | |
|---|---|
| Type | 靜態參數 |
| Default | not_used |
| Range | {not_used, used} |
|
輪廓長度可能會導致溢位。如果使用此旗標,若發生溢位,將會在連接埠 "ErrorFlagsO" 的第 7 位元設定錯誤旗標。 |
|
以下範例展示了運算子 Blob_Analysis_1D 的用法:
-
範例 - 顯示在 線型掃描應用中使用 operator Blob_Analysis_1D。

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






![[警告]](../common/images/admon/warning.png)

























上一頁

