大多數VisualApplets 應用程式都需要擷取攝影機影像,透過影像處理演算法對影像進行處理 ,並將結果輸出至主機電腦。 此外,使用者還希望監看原始監控影像。 因此,我們需要兩種影像輸出。 即原始監控影像,以及演算法實作的處理結果。 以下我們將實作一個符合以下規格的VisualApplets 設計:
- 使用Camera Link 相機在基本設定模式下拍攝灰階影像
- maximum resolution = 1024 x 1024 pixel @ 8Bit/pixel
- 將影像暫存,並將每第 10 張擷取的影像傳送至主電腦(監控)
- 使用閾值處理將每張擷取的影像二值化,並將處理後的影像輸出至主機電腦
- 二值化的輸出影像必須符合以下格式:0 = 黑色,白色 = 255(8 位元/像素)
根據規格說明,我們可以繪製出方塊圖。
如我們所見,影像會被擷取並緩存。 經過緩存後,處理流程會分流為兩條路徑。 第一條路徑負責每 10 張影像輸出 1 張,供監控使用。 第二條路徑則包含二值化處理,並輸出二值化影像。
大多數VisualApplets 的實作都遵循相同的原則: 首先進行影像擷取與緩衝。 緩衝完成後,接著執行影像處理邏輯。 在「資料流」中,您可以找到更多關於VisualApplets 處理管線以及設計基本設定的資訊。 以下我們將逐步說明如何實作一個符合規格的VisualApplets 設計, 一步一腳印地進行。 除了VisualApplets 的實作外,我們還將利用內建的模擬功能驗證該設計,並將其應用於 實際硬體中。
-
我們將從前幾個範例中使用過的基本運算子開始說明。 這些包括相機運算子CameraGrayAreaBase、緩衝區ImageBuffer 以及將結果傳輸至主機電腦的運算子DmaToPC。 相較之下,這次我們需要在設計中加入第二個DmaToPC模組,用以傳輸原始影像以及二值化結果。 請依照以下設計圖所示,定位並重新命名所有運算子。

-
如您所見,我們已將 DMA 模組重新命名為 DMA0_OriginalImages 和 DMA1_BinarizedImages。因此,我們為它們賦予了索引。 這是因為每個 DMA 通道都會使用一個通道索引。 此通道索引是用來從任何 PC 軟體存取資料的。 大多數非 FPGA 內部資源都會使用索引來指定其位置。 部分使用 FPGA 外部硬體的運算元包括相機運算元、使用 DRAM 的運算元(例如 ImageBuffer)、 以及使用通用輸入輸出的運算元(例如觸發訊號和 DMA 運算元)。 事實上,目前我們設計中所有運算子皆使用外部資源,並可分配至特定索引。 攝影機運算子可分配至Camera Link 的 A 或 B 埠。 緩衝區可分配至microEnable IV VD4-CL 上的四個 DRAM 之一,而 DMA 則可分配至其中一個 DMA 通道。 有關裝置資源使用的詳細說明,請參閱「裝置資源的分配」。 所有受支援硬體平台可用的裝置資源清單,請參閱 裝置資源中。
大多數裝置資源皆可透過VisualApplets 中的資源對話方塊進行變更。 部分裝置則可透過操作員參數來變更其資源。 若要變更裝置資源,必須開啟資源對話方塊,該對話方塊可透過以下路徑存取: → ,或透過編輯選單列中的圖示開啟。

請確保 DMA 模組 DMA0_OriginalImages 被分配至索引 0,而 DMA1_BinarizedImages 被分配至索引 1。 相機模組應分配至索引 0,該索引代表Camera Link 的 A 埠。 我們其實並不介意緩衝區使用哪一顆 DRAM 晶片,因此若某些記憶體運算子之間發生 衝突,我們會讓 `VisualApplets ` 自動選擇索引 。 一般來說,`VisualApplets ` 總是會選擇一個未使用的索引。 若您有兩個相機模組,並刪除了使用索引 0 的模組,則剩餘的相機模組將使用索引 1。 因此,請務必在開始建置 Applet 之前,檢查所有裝置資源索引。 資源索引在合成後將無法變更。
-
接下來,我們需要加入影像處理演算法。 由於必須實作兩種不同的影像處理演算法,我們需要將處理流程分支為兩條路徑。 這只需透過分支運算子即可輕鬆完成。請在基礎運算子庫中找到該運算子,並將其拖曳至您的設計中。 當您放開滑鼠按鈕時,會彈出一個視窗,讓使用者指定輸出連結的數量,也就是 分支的數量。選擇「二」並按「確定」。此時您的設計中將出現一個分支模組,具有兩個輸出連結和 一個輸入連結。 將該模組移至緩衝器旁邊,並將兩者連接起來。

我們現在已將管線進行分支,並能在分支模組與 DMA 模組之間實作這兩項影像處理演算法。
-
首先,我們將實作原始影像的輸出路徑,其中僅需每 10 張影像輸出 1 張。 與其將所有必要的運算子都放置在主設計層級,我們將使用階層式方塊。 透過階層式模組,您可將階層結構實作至設計中,並 將任意數量的運算子組合成一個新的運算子。 使用階層式模組可使建構區域的整體概況更為清晰。 請在您的設計中插入一個具有一個輸入和一個輸出的階層式方塊。 您可以在基礎運算子庫中、透過設計區域的彈出式選單,或從 「設計」主選單中找到階層式方塊。
將 HierarchicalBox 模組放置在分支與 DMA 之間,並將兩者連接起來。 您可以透過模組的右鍵選單,或選取模組後按下 F2 鍵來重新命名該模組。

要編輯階層式模組的內容,只需雙擊該模組即可。 系統將開啟一個新的空白設計視窗,其中僅包含輸入與輸出連接器。 我們將在兩者之間放置所需的運算子,並將其連接至各連接埠。 若要退出階層式模組,請按下 Backspace 鍵或點擊圖示
.
若要移除 10 張圖片中的 9 張,我們需要如下所示的操作符。

以及參數化:
-
CountFrames 模組的屬性

-
模組 CountFrames 輸出項目的連結屬性

-
模組 Not0 的屬性

運作原理: CountFrames 模組會將每張影像的像素替換為 0 到 9 之間的數值。 因此,它會針對每張影像重複進行 0 到 9 的計數。 模組 Not0 會將每張圖片的每個像素替換為值 1,前提是當前的計數值不為 0。 模組 RemoveImage 會刪除每張圖片,前提是第二個輸入參數「Rem」的像素值為 1。 因此,編號為 0、10、20、30、... 的圖片將被跳過。其餘所有圖片都會被刪除。
-
-
為了實現二值化,我們將在設計中新增另一個階層式模組。

此階層式模組中的運算子為「Is_GreaterThan」和「Scale」。

「ThresholdFrom」模組負責實際的二值化處理。 對於每個大於參數「Number」所指定數值的輸入像素值,將輸出 1;否則輸出 0。 因此,該模組的輸出位元深度將為 1 位元。您可以開啟連結屬性來確認這一點。 由於我們不希望輸出 1 位元值,因此需要將結果轉換為 8 位元值。 一個非常簡單的解決方案,是將每個值乘以 255。如此一來,二進位值 1 將變成 255, 而二進位值 0 則維持為 0。請將 ScaleBy255 模組的參數設定為以下數值。

如您所見,我們已將參數 ScaleFactor 的參數類型設定為「靜態」。對於此運算子而言,這點非常 重要,因為相較於動態參數,此設定所需的 FPGA 資源將少得多。 一般而言,若您確定在合成後無需變更參數,請務必將參數設定為靜態類型。
-
- 實作的最後一步是檢查設計規則錯誤。執行 DRC 以檢查是否有錯誤。 若無錯誤,您現在即可編譯設計並在硬體中使用。 此外,您也可以透過下一節所述的模擬來驗證您的實作。 請記得不時儲存您的設計。
對於大多數設計而言,在將其應用於 實際的 FPGA 硬體之前,透過模擬來驗證實作的功能是非常有幫助的。 接下來,我們將透過模擬來驗證我們的設計。
-
準備工作
首先,我們需要一張用於模擬的圖片。 您需要使用TIFF或 BMP格式的圖片檔案。 若您希望將圖片資料注入圖片處理管線中 並像本範例一樣使用灰階圖片,則必須使用僅含單一顏色成分的圖片。 有關模擬時允許使用的影像檔案的更多資訊,請參閱「模擬」。 在VisualApplets 的安裝資料夾中,有一些範例影像。
-
光源與探針
可透過「simulation_source」模組將影像檔案注入任何影像傳輸鏈路,並可透過 「simulation_probe」模組在 任何其他鏈路上進行監控。 在本範例中,我們依照 以下螢幕截圖所示,在攝影機與緩衝區之間的鏈路上新增一個模擬來源,並新增模擬探針。 您可以透過「分析」選單、設計視窗的快顯選單,或直接 點擊圖中標示的圖示,來新增模擬來源與探針。

-
新增圖片檔案
若要將影像檔案新增至模擬來源,請在 您的設計中雙擊該來源,以開啟「模擬來源檢視器」。 現在只需將您的影像檔案拖放至「模擬來源檢視器」視窗中,或使用 → 選單。

該影像檔案現已新增至模擬來源。您只需將更多檔案拖曳至 模組或視窗上,即可將其新增至來源。 在「模擬來源檢視器」Windows 的底部,您可以看到序列中的所有影像。
-
模擬開始
現在我們已經準備好開始執行模擬了。請選取 → ( F9 ) 以開啟主要「模擬」視窗。 每次開啟此視窗時,系統都會自動執行設計規則檢查。 若設計規則檢查未通過,則無法對該設計進行模擬。
在VisualApplets 中,模擬會以週期為單位進行處理。 每個週期代表從設計中所有模擬來源導入一張影像。 只需點擊 即可啟動模擬。 VisualApplets 隨即會執行模擬。 視設計的複雜程度而定,此過程可能需要數秒鐘。
-
查看結果
現在我們可以檢查模擬結果了。 關閉「模擬」視窗。 此時,模擬探針應已填入結果。

若您開啟位於二值化處理後方的探針之「模擬探針檢視器」,即可立即確認 模擬是否成功。該影像應包含值為 0 和 255 的像素。

如有需要,現在可以將結果儲存至磁碟。
-
序列模擬
我們可以驗證前一步驟的二值化結果。 然而,單張模擬影像並不足以驗證監控輸出,因為理論上僅有每第 10 張影像 才會傳輸至主機電腦。 因此,我們需要模擬一組連續的影像序列。
-
請再次開啟「模擬」視窗。
-
點擊 以重設先前模擬的序列。 一般而言,若要開始新的模擬,建議始終重設模擬設定,以避免使用者操作錯誤。
-
點擊 以模擬一張影像。 每個模擬探針都會顯示一個結果。 目前無需關閉「模擬」視窗。 您可以透過查看設計視窗中各模組的編號, 來得知當前模擬探針中的影像數量。
-
現在請點擊以下按鈕,執行另一個循環: 。 這次,除了位於 DMA0 模組的那個探針之外,所有模擬探針的影像編號都應已增加至二。
請重複此步驟,直到總共模擬了 11 個週期為止。 此時,位於 DMA 0 的探針應包含兩張影像。這顯示了我們的實作功能運作正常。

-
與其點擊 ,您也可以透過「模擬」視窗中的旋轉方塊來設定處理週期數。 模擬結果將完全相同。 此外,您也可以先設定 10 個模擬週期並執行,隨後再開始下一個 10 個週期。隨您喜歡……
-
在驗證實作的功能後,我們便可在硬體上進行測試並使用。 您需要建置您的設計,以取得硬體小程式檔案 HAP。(使用者手冊:'建置') 請確保您的設計與硬體平台相符,例如本範例中的 mE4VD4-CL。 此外,請確保您的專案使用正確的架構,例如「Windows 64 Bit」。 該架構必須與已安裝的「Framegrabber SDK 」相同。 透過以下方式開始建置: → ( F7 )。 VisualApplets 現將使用 FPGA 製造商的工具,將您的設計轉換為 FPGA 位元流。
合成結果為一個 HAP 檔案。 該檔案包含 FPGA 位元流,以及用於存取資料與參數的軟體介面。 HAP 檔案位於您的Framegrabber SDK 安裝目錄中的「Hardware Applets」子目錄內;或者, 若未安裝Framegrabber SDK 或您選擇了其他目標執行環境,則該檔案位於系統設定中指定的 資料夾內(請參閱「系統設定」)。
我們將在Framegrabber SDK 工具「microDisplay」中測試我們的設計。microDisplay 是一款用於對小程式進行初步測試的工具。 開啟 microDisplay 並載入該小程式。 microDisplay 將顯示兩個 DMA 影像視窗, 分別是僅顯示每第 10 張影像的原始影像視窗,以及顯示二值化影像的第二個 DMA 視窗。 關於在Framegrabber SDK 中使用 Applet 的詳細說明,可參閱Framegrabber SDK 的文件。



上一頁

