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

























上一頁

