Operator Blob_Analysis_1D

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 對話方塊中設定的物件最大高度。清除條件會在輸出端產生畫格結束旗標。

Blob Analysis 1D 運算子的行為

圖 404. Blob Analysis 1D 運算子的行為


與 2D 運算子類似,Blob Analysis 1D 運算子屬於「M」類型,其中所有輸出皆為同步。與 2D 相比,1D 運算子具有三個輸入。前兩個輸入「ImageI」和「LineMarkerI」是同步的,必須由相同的 M 類型運算子提供來源。輸入 link「FlushI」與影像非同步,因此不需要任何同步化。下圖說明其中一種可能的組態(還有許多其他組態)。

在 VisualApplets 網路中同步化 Blob 1D 運算子

圖 405. 在 VisualApplets 網路中同步化 Blob 1D 運算子


輸出影格的產生 - 清除、空白影格、捨棄資料

如上所述,清除用於完成輸出畫格,亦即產生畫格結束旗標。根據清除輸入的時序以及影像中的物件,可能會產生空白畫格以及包含大量資料的輸出畫格。為了控制此行為,會使用參數 output_frame_size_overflow_handling 與 suppress_empty_output_frames(請參閱下方的參數說明)。下列波形圖顯示參數設定、資料與清除輸入之各種組合的草圖。「Blob Data」代表輸出時序。

第一個範例顯示達到最大畫格大小後新畫格的產生。blob 運算子會在輸出完成輸出畫格的最後一個 blob 之後產生畫格結束。清除訊號將會產生額外的畫格結束:

Blob 1D 時序 - 產生新畫格

圖 406. Blob 1D 時序 - 產生新畫格


下一個範例顯示空白輸出畫格的抑制。如您所見,第一個清除遭到忽略。第二個清除會延遲,直到有可供輸出的 blob 為止。透過這種方式,運算子可以延遲清除輸出:

Blob 1D Timing - Suppression of Empty Frames

圖 407. Blob 1D Timing - Suppression of Empty Frames


在第三個範例中,我們可以看到 flush 輸入為常數 1時的行為。由於 suppress_empty_output_frame 設為 "yes",算子將在每個 blob 輸出後產生影格結算 (End of Frame)。警告:如果不小心將 suppress_empty_output_frame 設為 "no",常數 1 可能會導致數以百萬計的影格結算。如果此輸出連接到 VisualApplets 輸出(DMA 算子),可能會導致 PC 過載!

Blob 1D Timing - Constant Flush

圖 408. Blob 1D Timing - Constant Flush


最後一個範例顯示了物件的捨棄,因為參數 "output_frame_size_overflow_handling" 設為 "discard_exceeding_objects"。

Blob 1D Timing - Discarding of Objects

圖 409. Blob 1D Timing - Discarding of 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 訊號的一些特殊條件。

    Simulation Scenario 1 - Flush and Y0 Relation

    圖 410. Simulation Scenario 1 - Flush and Y0 Relation


    Simulation Scenario 2 - Flush Pixel Position

    圖 411. Simulation Scenario 2 - Flush Pixel Position


    Simulation Scenario 3 - Discarded Flush Pixel at End of Frame

    圖 412. Simulation Scenario 3 - Discarded Flush Pixel at End of Frame


    Simulation Scenario 4 - Multiple Blobs

    圖 413. Simulation Scenario 4 - Multiple Blobs


Input Ports

Blob Analysis 的 ImageI 輸入表示為二元一維影像,亦即位元寬度為 1 bit、具備指定寬度且高度無限的影像。可選擇最高達 32 像素的 Parallelism。前景值假設為 ONE,背景值則必須為 ZERO。在二值化過程中必須考量這一點。

由於 LineMarkerI 輸入與影像資料輸入同步,因此這些連結必須具備相同的影像尺寸與 Parallelism。不過,該連結可以具有任何 Bit Width。每一條影像行中的 LineMarker 值必須保持常數。

輸入連結 "FlushI" 與其他輸入連結非同步。它可具備任何 Bit Width、Parallelism 與影像尺寸。如果任一平行元件的其中一個輸入位元遭到設定,Blob Analysis 輸出便會被清除。

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

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

表 38. Blob 錯誤旗標說明


I/O Properties

Property Value
Operator Type M
輸入連結 ImageI,影像資料輸入
LineMarkerI,資料輸入
FlushI,資料輸入
輸出連結 LineMarkerO,資料輸出
BoundingX0O,資料輸出
BoundingX1O,資料輸出
BoundingY0O,資料輸出
BoundingY1O,資料輸出
AreaO,資料輸出
CenterXO,資料輸出
CenterYO,資料輸出
ContourOrthoO,資料輸出
ContourDiaO,資料輸出
ErrorFlagsO,資料輸出

同步與非同步輸入

  • 同步群組:ImageI、LineMarkerI
  • FlushI 與此群組非同步。

支援的 Link 格式

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

1 2 3 4 5 6 7 8 9 10

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

11 12 13 14 15 16 17 18 19 20 21

最大輸出影像寬度取決於參數 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'。

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 算子的使用方式顯示在以下範例中: