跳至內容

應用說明:斑點分析#

本應用說明書闡述了VisualApplets 的Blob分析設計。

您將學習如何在《VisualApplets 》中將 Blob Analysis 運算子與其他運算子結合使用。範例中運用 Blob Analysis 運算子,在 FPGA 內進行基本的物件偵測與分類。一個線條小程式展示了 Blob Analysis 1D 運算子的使用方式。此外,針對這些範例也提供了 C++ SDK 專案,這些專案有助於理解 PC 端如何解讀 Blob Analysis 的結果。(應用說明 SAN011)

以下設計範例說明了如何使用VisualApplets 的 Blob 分析運算子:

  • 簡單的 Blob 分析應用程式,包含用於物件視覺化的 SDK 專案:此範例利用 Blob 分析進行基本的物件偵測。所有偵測到的物件都會傳輸至主機電腦。
  • 運用斑點分析進行分類與感興趣區域(ROI)選取:此範例展示如何在 FPGA 內運用斑點分析進行物件偵測與分類。
  • 一維斑點分析:此範例說明如何針對無限線掃描影像使用「一維斑點分析」運算子。

簡單的斑點分析應用程式,包含用於物件視覺化的 SDK 專案#

第一個範例是一個基本的斑點分析小程式。首先將相機影像二值化,接著將二值化影像傳送至 DMA 通道;在另一條路徑上則執行斑點分析,並透過第二個 DMA 通道輸出結果。

圖 1:用於簡單斑點分析應用程式的 Visual Applets 設計

本範例中使用的二值化是基於簡單的閾值處理。 斑塊分析(Blob Analysis)假設每個白色像素皆為物體像素。圖 2 顯示,透過兩個閾值選取了前景值範圍。此設計使得系統既能處理由深色像素構成物體的影像,也能處理物體相較於背景更為明亮的影像。二值化處理完成後,影像會被暫存至緩衝區。影像從緩衝區傳送至斑塊分析模組,並傳輸至主機電腦以監控二值化後的影像。

圖 2:二值化

以下圖示顯示了 Blob 分析參數的設定:

圖 3:簡易 Blob2D 小程式的斑點分析參數
圖 4:Blob2D 小程式中將 Blob 流合併為單一連結

在上圖中,您可以看到「斑點分析」資料是如何合併成單一連結的。在此範例中,這些特徵 Bounding Box 進行明確的生命週期管理即呼叫 Area 被使用。首先,將每個為 16 位元的邊界框連結合併在一起,從而形成 64 位元的連結寬度。該區域也擴展至 64 位元。使用 InsertPixel 運算子,這兩條鏈路將合併為一。因此,最終的 DMA 傳輸將採用以下格式:

簡易 Blob2D 小程式的 Blob DMA 位元組順序#

位元號 物件特徵
0 到 1 邊界框 X0
2 至 3 邊界框 X1
4 至 5 邊界框 Y0
6 至 7 邊界框 Y1
8 至 15 Area

請注意 PC 中的位元組順序有所不同。物件的位元寬度已擴充。實際上,邊界框僅使用 10 位元來表示 0 到 1023 之間的值,而面積則僅使用 21 位元。此小程式附帶一個小型 SDK C++ 專案,用以展示其功能。該專案與設計檔案一同存放於資料夾中 Examples\Processing\BlobAnalysis\Blob2D VisualApplets 的安裝路徑。

運用斑點分析進行分類與感興趣區域(ROI)選取#

此範例展示了一種基於擷取的物件特徵來裁切感興趣區域(ROI)的方法。其目的是找出面積最大的物件,並擷取該物件的重心,藉此形成感興趣區域(ROI)。

此範例展示了 Visual Applets 運用 Blob 分析結果在 Applet 內進行分類的能力,這使得幀擷取器內的影像處理功能得以大幅提升。圖 1 顯示了該設計的螢幕截圖。主要組成部分包括二值化、Blob 分析、分類以及 ROI 的擷取。以下將對這些部分進行詳細說明。

圖 1:用於選取感興趣區域 (ROI) 的斑點分析設計

本範例中使用的二值化是基於簡單的閾值處理。 斑塊分析(Blob Analysis)假設每個白色像素皆為物體像素。圖 2 顯示,透過兩個閾值選取了前景值範圍。此設計使得系統既能處理由深色像素構成物體的影像,也能處理物體相較於背景更為明亮的影像。二值化處理完成後,影像會被暫存至緩衝區。影像從緩衝區傳送至斑塊分析模組,並傳輸至主機電腦以監控二值化後的影像。

圖 2:二值化

「斑點分析」是在二值化之後進行的。在此,僅使用物體在 x 方向與 y 方向的重心,以及其面積等特徵進行後續處理。本範例中未使用其他任何特徵。

該小程式接著對「斑點分析」的結果進行分類(圖 3)。首先,將重心值除以面積以進行歸一化處理。這只需使用 DIV 運算子即可輕鬆完成。與此同時,系統會偵測面積最大的物件。在此,該運算子 FrameMax 並使用寄存器。此分類演算法的原理是,將所有面積小於迄今已分析之物件的物件予以排除。具體而言,斑點分析會輸出一個物件流。該 FrameMax 該運算子會檢測當前物件是否比迄今為止已檢查過的物件更大,並在其輸出端輸出邏輯高電平 IsMax.此值用於 Capture 寄存器的輸入。若當前物體的面積大於先前物體,則重心座標會被鎖定至輸出端。因此,第 i 幀的最後一個輸出(即斑點流)代表面積最大的物體的重心座標。圖 3 說明了此行為。

圖 3:找出面積最大的物體
表格:尋找最大面積物體的演算法範例

分類模組現在會輸出影像中偵測到的最大物體的重心座標。接著,必須將這些座標轉換為 ROI 座標 XOffset, XLength, YOffset 進行明確的生命週期管理即呼叫 YLength. 圖 4 顯示了此轉換的設計。該 XLength 進行明確的生命週期管理即呼叫 YLength 被設定為一個常數,而重心座標則減去 ROI 大小的一半。

圖 4:興趣區座標的生成

現在利用這四個 ROI 值,透過 DynamicROI 運算子從原始影像中擷取 ROI。如前所述,分類模組會輸出面積最大且位於幀的最後一個位置的物件。這點相當有利,因為 DynamicROI 該運算子僅會考量最後接收到的 ROI 座標。因此,系統會採用正確的座標,並從原始影像中擷取出最大的物件。此VisualApplets 專案的設計檔案可於資料夾中找到 Examples\Processing\BlobAnalysis\Blob2D_ROI_select 位於VisualApplets 的安裝路徑中。該小程式可在 microDisplay 中執行,並能直接查看結果。此外,範例中還新增了一個小型 SDK 專案。若要使用該 SDK 專案,必須將 ROI 的 DMA 大小修改為模組所設定的 DMA 大小 ROIsizeX 進行明確的生命週期管理即呼叫 ROIsizeY. 使用 顯示 microDisplay 中的設定,或 widht1 進行明確的生命週期管理即呼叫 height1 SDK 專案中的參數,以進行調整。

一維斑點分析#

「Blob Analysis 1D」範例說明了如何在VisualApplets 環境中使用一維 Blob 運算子。

「1D 斑點分析」範例是一個基於基準線相機的簡易小程式。該相機僅搭配線觸發器使用,因此此小程式是基於真實的 1D 影像。為了進行 DMA 傳輸,原始影像會被轉換成由連續行組成的小片段,進而形成 2D 影像。以下將詳細說明此小程式的各個部分。圖 1 顯示了該設計的主畫面。

圖 1:Blob 分析一維設計

在影像擷取方面,一名線性攝影機操作員連接至一臺 ImageBuffer 被使用。此緩衝區可對一維影像行進行緩衝。接著,在「階層式方塊」中 Binarize 執行簡單的閾值處理,將像素轉換為前景像素與背景像素。透過一個選擇器,可將原始影像與二值影像切換至影像輸出路徑。這只需透過一個 IF 運算子與一個 CONST 運算子。該 dynamic 的參數 CONST 此運算子允許修改 IF 透過運算子的條件輸入來切換其輸入。因此,在執行期間,可以於原始灰階影像與二值化影像之間切換。

圖 2:在灰階影像與二值影像之間切換

由於此小程式的應用目的在於將原始影像中的物件進行視覺化呈現,因此必須讓電腦中的兩個 DMA 通道能夠同步運作。系統會使用線條標記來標示原始影像的每一行以及每個斑點。因此,會使用一個計數器來統計每一行。該行計數器包含在「階層式方塊」中 1DBlobAnalysis 連同斑點分析運算子與行數值,透過上方的連結 O000 傳出。該計數器的量程為 10 位元。因此,當數值達到 1024 時會發生溢出,計數器將重新從零開始計數。

在 ReplaceFirstPixelByLineNo 每一行前四個像素將被行號取代。為此,並行度會進行調整,使運算以 32 位元為單位進行。x 座標即為行號,每當 x 座標為零時,系統便會傳送行號(擴展為 32 位元),而非原始的像素值。

圖 3:依行號替換首位像素

除了行標記之外,還必須為「Blob 分析」操作產生一個清空條件。此清空操作可透過觸發器輸入來實現;或者,如本例所示,每行產生一次清空條件。因此,「Blob 分析」將每行結束一次其輸出(Eof)。然而,「Blob 分析」僅在透過參數設定確保輸出幀不為空時,才會配置為此行為。 supres_empty_output_frames. 此外,Blob 分析功能已設定為最大物件高度為 10 位元,即 1024 像素。該運算子的最大輸出幀大小設定為 20。若需輸出更多物件且未發生清空狀況,該運算子將產生一個新幀。這些小型輸出幀可將物件被偵測的時間以及在電腦上進行分析的時間降至最低。

圖 4:線數計數與斑點分析
圖 5:Blob 1D 範例的配置參數

11 個 Blob Analysis 輸出流被合併為一個流,並連接至 DMA。這可透過以下方式輕鬆實現: MergePixel 進行明確的生命週期管理即呼叫 InsertPixel 運算子。物件特徵的順序如以下表格所示。

圖 6:Blob1D 小程式中將 Blob 流合併為單一連結
位元號 物件特徵
0 至 3 線標
4 至 5 邊界框 X0
6 至 7 邊界框 X1
8 至 11 重心 Y
12 至 15 重心 Y
16 至 17 邊界框 Y0
18 至 19 邊界框 Y1
20 至 23 Area
24 至 25 輪廓長度對角線
26 至 27 等高線長度(正交)
28 至 31 錯誤標記

此專案在硬體層面的運作,需要一套配備線性攝影機與觸發式編碼器系統的特殊硬體配置。設計檔案可於資料夾中找到 Examples\Processing\BlobAnalysis\Blob1D 位於 Visual Applets 的安裝路徑中。設計中新增了一個複雜的 SDK 專案,該專案主要展示物件的顯示方式。