運算子庫:Blob
Blob_Analysis_2D 運算子可在二進位影像中偵測物件並決定其屬性。此運算子的輸出為多個資料串流,分別代表每個物件的屬性。
![]() |
Blob_Analysis_2D 是一個舊版運算子 |
|---|---|
|
Blob_Analysis_2D 運算子為舊版運算子,保留此運算子僅為了維持相容性。在新的設計中,請改用 BlobDetector2D。 |
此運算子的功能可在 VisualApplets 中完全模擬。不過請注意,輸出值的順序可能與硬體實作不盡相同。
請確保您已先閱讀關於 blob 分析運算子的一般介紹(節 Library Blob)。
VisualApplets blob 分析運算子屬於少數處理速度(即頻寬)取決於影像內容的運算子。若影像中有許多物件,就會建立大型物件清單。這可能會導致運算子輸入速度變慢。不過,這僅適用於包含極強雜訊的影像。在受控條件下,此運算子的速度應該足夠快。
此運算子以最低的延遲運作。輸入影像會逐行傳輸至 blob 分析線路。一旦物件完全傳輸至運算子中,運算子就會偵測物件完成並輸出物件特徵。因此,當運算子仍在處理影像本身時,即可開始對物件特徵進行後續處理。
請注意,DMA 與某些其他運算子會在回報完成之前等待算格結束 (frame end) 訊號。算格結束訊號會在輸入影像完成時產生。
blob 分析的 ImageI 輸入由二進位、二維影像表示,也就是具有 1 Bit 的 Bit Width、指定影像寬度與指定影像高度的影像。您可以選擇最高 32 像素的 Parallelism。
此運算子假設前景值為 1(ONE),背景值為 0(ZERO)。請確保您的前置二值化處理程序符合此要求。
每個輸出連接埠代表一個物件特徵/物件屬性。這些連接埠上的每個輸出值代表一個物件。因此,每個物件屬性會產生一個資料串流。輸出資料串流的長度等於影像中找到的物件數量。這些串流可中斷為多個子算格 (sub-frame)。每個輸出連接埠上的資料高度為 1 像素且具有特定長度。輸出以灰階 2D 影像的形式呈現。
輸出連接埠是使用運算子參數與輸入的 Property 來設定。無法直接變更連結 Property。
連接埠 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 | 輪廓長度溢位 | 是 |
輪廓長度大於為運算子所參數化的位元允許的大小。 |
表 39. Blob 錯誤旗標說明
| Property | Value |
|---|---|
| Operator Type | M |
| Input Link | I,資料輸入 |
| 輸出連結 | BoundingX0O,資料輸出 BoundingX1O,資料輸出 BoundingY0O,資料輸出 BoundingY1O,資料輸出 AreaO,資料輸出 CenterXO,資料輸出 CenterYO,資料輸出 ContourOrthoO,資料輸出 ContourDiaO,資料輸出 ErrorFlagsO,資料輸出 |
| 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'。 |
|
| output_frame_size | |
|---|---|
| Type | 靜態參數 |
| Default | specify_max_no_of_objects |
| Range | {maximum_required, specify_max_no_of_objects} |
|
理論上可能出現在影像中的物件最大數量為:輸入影像寬度 * 輸入影像高度 / 2(相當於使用 4 連通鄰域的棋盤圖案)。此種圖案發生的機率相當低。因此,您透過此參數來設定影像中的最大物件數量。 |
|
| max_output_frame_size | |
|---|---|
| Type | 靜態參數 |
| Default | 65536 |
| Range | [1, 67108864] |
|
選擇輸出的最大物件數量。若 blob analysis 偵測到超過此數量的物件,將會被捨棄。不過,在連接埠「ErrorFlagsO」上,將會設定位元 2 處的錯誤旗標。此旗標會與最後一個有效物件一同設定。如果「ouput_frame_size」設為「maximum_required」,則此參數會停用。 |
|
| 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} |
|
邊界框表示剛好包覆物件的最小軸對齊矩形。每個座標值都是相對於影像的左上角。Bounding Box Y0 表示每個物件的最低 y 座標。它會輸出於「BoundingY0O」。Bit Width 由輸入影像決定。若未使用邊界框,則 Bit Width 會設為 1,且其輸出為固定的零。 |
|
| bounding_box_y1 | |
|---|---|
| Type | 靜態參數 |
| Default | used |
| Range | {used, not_used} |
|
邊界框表示剛好包覆物件的最小軸對齊矩形。每個座標值都是相對於影像的左上角。Bounding Box Y1 表示每個物件的最高 y 座標。它會輸出於「BoundingY1O」。Bit Width 由輸入影像決定。若未使用邊界框,則 Bit Width 會設為 1,且其輸出為固定的零。 |
|
| 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_2D 運算子的使用方式:
-
範例 - 顯示運算子 Blob_Analysis_2D 的用法。 此 Applet 會對輸入資料進行二值化並決定斑點分析結果。結果以及原始影像會透過兩個 DMA 通道輸出。
-
範例 - 將斑點分析運算子套用到輸入相機影像。 此小程式展示了小程式中斑點資料的使用方式。 在此情況下,會定位出具有最大面積的物件,並使用其座標從 原始影像中切割出該物件。
-
'Functional Example for the FrameBufferMultRoiDyn Operator on the imaFlex CXP-12 Platform'
範例 - operator 使用方式示範
-
Examples- Geometric Transformation and Defect Detection
-
Examples- Geometric Transformation and Defect Detection Using Image Moments

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



















上一頁

