Operator Blob_Analysis_2D

Operator Library: Blob

Blob_Analysis_2D 運算子可偵測二進位影像中的物件並決定其 Property。此運算子的輸出為多個資料串流,分別代表各個物件的 Property。

[備註] Blob_Analysis_2D 是一個傳統運算子

Blob_Analysis_2D 運算子是一個傳統運算子,保留它純粹是為了相容性考量。在庫存設計中,請改用 BlobDetector2D。

此運算子的功能可以在 VisualApplets 中完整模擬。不過請注意,輸出數值的順序可能與硬體實作不盡相同。

請務必先閱讀 blob 分析運算子的一般介紹(節 Library Blob)。

效能

VisualApplets blob 分析運算子屬於少數處理速度(即頻寬)取決于影像內容的運算子。若影像中有許多物件,就會建立大型物件清單。這可能會導致運算子輸入變慢。不過,這僅適用於包含極強雜訊的影像。在受控條件下,運算子的速度應該足夠快。

延遲

此運算子以最低的延遲運作。輸入影像會逐行傳輸至 blob 分析。一旦某個物件完全傳輸至運算子中,運算子就會偵測物件完成並輸出物件特徵。因此,當影像本身仍在由運算子處理時,即可開始進行物件特徵的後端處理。

請注意,DMA 與其他一些運算子會等待訊框結束訊號後才會回報完成。訊框結束訊號會在輸入影像完成後產生。

Input Ports

blob 分析的 ImageI 輸入由二進位、二維影像(也就是 Bit Width 為 1 Bit、指定影像寬度以及指定影像高度的影像)表示。您可以選擇最高 32 個像素的 Parallelism。

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

Output Ports

每個輸出連接埠代表一個物件特徵 / 物件 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

輪廓長度大於為運算子所參數化的位元允許的大小。

表 39. Blob 錯誤旗標說明


I/O Properties

Property Value
Operator Type M
Input Link I, data input
輸出連結 BoundingX0O, data output
BoundingX1O, data output
BoundingY0O, data output
BoundingY1O, data output
AreaO, data output
CenterXO, data output
CenterYO, data output
ContourOrthoO, data output
ContourDiaO, data output
ErrorFlagsO, data output

支援的 Link 格式

Link Parameter Input Link I 輸出連結 BoundingX0O 輸出連結 BoundingX1O Output Link BoundingY0O 輸出連結 BoundingY1O 輸出連結 AreaO 輸出連結 CenterXO 輸出連結 CenterYO Output Link ContourOrthoO Output Link ContourDiaO 輸出連結 ErrorFlagsO
Bit Width 1 自動1 自動2 自動3 自動4 自動5 自動6 自動7 自動8 自動9 8
Arithmetic unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned
Parallelism {1, 2, 4, 8, 16, 32} 1 1 1 1 1 1 1 1 1 1
Kernel Columns 1 1 1 1 1 1 1 1 1 1 1
Kernel Rows 1 1 1 1 1 1 1 1 1 1 1
Img Protocol VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D
Color Format VAF_GRAY 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 FL_NONE
Max. Img Width any 自動10 自動11 自動12 自動13 自動14 自動15 自動16 自動17 自動18 自動19
Max. Img Height any 1 1 1 1 1 1 1 1 1 1

1 2 12 4 5 6 7 8 9

輸出 Bit Width 取決於物件特徵的參數設定。如果停用某個特徵,則輸出會設為一個固定為數值零的位元。

10 11 12 13 14 15 16 17 18 19

最大輸出影像寬度取決於參數 output_frame_size 的設定。

參數

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'。

output_frame_size
Type static parameter
Default specify_max_no_of_objects
Range {maximum_required, specify_max_no_of_objects}

理論上可能填滿影像的最大物件數為:輸入影像寬度 * 輸入影像高度 / 2(等於使用 4-connected 鄰域的棋盤圖案)。這種圖案不太可能發生。因此,您可以透過此參數設定影像中的最大物件數。

max_output_frame_size
Type static parameter
Default 65536
Range [1, 67108864]

選擇輸出的最大物件數量。任何由斑點分析(blob analysis)偵測到的超出數量的物件將會被捨棄。不過,在連接埠「ErrorFlagsO」上,會在第 2 個 bit 設定一個錯誤旗標。此旗標會與最後一個有效的物件一同設定。如果「ouput_frame_size」設為「maximum_required」,則此參數會停用。

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}

邊界方框(bounding box)表示適合包覆該物件的最小軸平行矩形。每個座標值皆相對於影像的左上角。Bounding Box Y0 表示每個物件的最低 y 座標。它會輸出於「BoundingY0O」。Bit Width 由輸入影像決定。如果未使用邊界方框,則 Bit Width 會設為 1,且其輸出為固定的 0。

bounding_box_y1
Type static parameter
Default used
Range {used, not_used}

邊界方框(bounding box)表示適合包覆該物件的最小軸平行矩形。每個座標值皆相對於影像的左上角。Bounding Box Y1 表示每個物件的最高 y 座標。它會輸出於「BoundingY1O」。Bit Width 由輸入影像決定。如果未使用邊界方框,則 Bit Width 會設為一個 bit,且其輸出為固定的 0。

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'。

如果選取此功能,則可根據所選的鄰域,透過 "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",則可在此處選擇表示正交連接像素之輪廓長度所需的位元。

contour_length_bits_diagonal_connected
Type static parameter
Default 16
Range [1, 31]

如果將 "contour_length_mode" 設為 "contour_length_used",則可在此處選擇表示對角連接像素之輪廓長度所需的位元。這只有在選取 8-connceted 鄰域時才可能。否則,此參數將會停用。

contour_length_overflow_flag
Type static parameter
Default not_used
Range {not_used, used}

輪廓長度可能會導致溢位。如果使用此旗標,若發生溢位,將會在連接埠 "ErrorFlagsO" 的第 7 位元設定一個錯誤旗標。

使用範例

以下範例顯示了 Blob_Analysis_2D 運算子的使用方式: