大多數 VisualApplets 應用程式都需要擷取相機影像、透過影像處理演算法處理影像,並將結果輸出至主機 PC。 除此之外,使用者還想監控原始監控影像。 因此我們需要兩個影像輸出。 原始監控影像與演算法實作的處理結果。 接下來我們將實作一個符合以下規格的 VisualApplets 設計:
- 使用 base 配置模式的 Camera Link 相機拍攝灰階影像
- 最大解析度 = 1024 x 1024 像素 @ 8Bit/像素
- 將影像進行緩衝處理,並將每第 10 個擷取的影像轉發至主機 PC(用於監控)
- 使用閾值處理將每個擷取的影像二值化,並將產生的影像輸出至主機 PC
- 二值化輸出影像的格式必須為:0 = 黑色,白色 = 255(8Bit/像素)
根據此規格,我們可以產生區塊圖。
如我們所見,影像會被擷取並進行緩衝處理。 緩衝處理後,處理管線會分為兩個路徑。 第一路徑負責輸出每第 10 張影像以供監控。 第二路徑包含二值化以及二值影像的輸出。
大多數 VisualApplets 實作都遵循相同的原則: 首先是影像擷取與緩衝處理。 緩衝處理之後則是影像處理邏輯。 在「Data Flow 」中,您可以找到更多關於 VisualApplets 處理管線與設計基本設定的資訊。 接下來我們將逐步介紹符合規格的 VisualApplets 設計實作。 除了 VisualApplets 實作之外,我們將使用內建模擬來驗證設計,並在真實硬體上使用該設計。
-
我們將從先前範例中使用過的基本運算子開始。 這些運算子包括相機運算子 CameraGrayAreaBase、緩衝區 ImageBuffer 以及將結果傳輸至主機 PC 的運算子,即 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 通道。 關於裝置資源使用的詳細說明,請參閱「Allocation of Device Resources」。 所有支援硬體平台的可用裝置資源清單則列於Device Resources中。
大多數裝置資源都可以透過 VisualApplets 中的資源對話方塊進行更改。 有些資源則可以使用運算子的參數來更改。 若要更改裝置資源,我們必須開啟資源對話方塊,其存取路徑為 → 或透過編輯功能表列中的圖示來開啟。

請確保 DMA 模組 DMA0_OriginalImages 配置給索引 0,且 DMA1_BinarizedImages 配置給索引 1。 相機模組應配置給代表 Camera Link 連接埠 A 的索引 0。 我們的緩衝區使用哪一個 DRAM 晶片並不重要,因此如果某些記憶體運算子之間發生衝突, 我們可以讓 VisualApplets 自動選擇索引。 一般而言,VisualApplets 總是會選擇未使用的索引。 如果您擁有兩個相機模組並刪除了使用索引 0 的模組,剩餘的相機模組將會使用索引 1。 因此,請務必在開始建置 applet 之前檢查所有裝置資源索引。 資源索引在合成後將無法更改。
-
接下來,我們需要加入影像處理演算法。 由於我們必須實作兩個不同的影像處理演算法,我們需要將管線分支為兩個路徑。 這只需透過分支運算子即可輕鬆完成。請在基本運算子庫中尋找該運算子並將其拖曳至您的設計中。 當您放開滑鼠按鈕時,將會彈出一個視窗,允許使用者指定輸出連結的數量,即 分支的數量。請選擇二並按下確定。此時您的設計中將會包含一個具有兩個輸出連結與一個輸入連結的分支模組。 將該模組移至緩衝區旁邊並將它們連接起來。

我們現在已經將管線分出分支,並可在分支與 DMA 模組之間實作這兩個影像處理演算法。
-
首先,我們將實作原始影像輸出路徑,在此路徑中僅需輸出每第 10 張影像。 我們將使用階層式方塊,而不是將所有必要的運算子放在主要的設計層級上。 藉由階層式模組的協助,在設計中實作階層式結構並將任意數量的運算子結合成一個新運算子是非常實用的做法。 使用階層式模組可讓工作區的概覽更加清晰。 請在您的設計中插入一個具有一個輸入和一個輸出的階層式方塊。 您可以在基本運算子庫中、從設計區域的彈出式功能表中或從 主功能表「Design」中找到階層式方塊。
將 HierarchicalBox 模組放置於分支與 DMA 之間並將它們連接起來。 您可以使用其內容選單或透過選取它並按下 F2 鍵來重新命名該模組。

若要編輯階層式模組的內容,只需按兩下它。 隨即會開啟一個新的空白設計視窗。它僅包含輸入和輸出連接器。 我們將在中間放置必要的運算子並將它們連接至連接埠。 若要結束階層式模組,請按下 Backspace 鍵或圖示
.
為了移除 10 張影像中的 9 張,我們需要如以下所示的運算子。

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

-
模組 CountFrames 輸出的連結屬性

-
Not0 模組的屬性

運作方式: CountFrames 模組會將每個影像的像素替換為 0 到 9 之間的數值。 因此,它會在每個影像中重複從 0 到 9 計數。 如果目前的計數值不等於 0,Not0 模組就會將每個影像的每個像素替換為數值 1。 如果第二個輸入「Rem」的像素值為 1,RemoveImage 模組就會刪除每個影像。 因此,編號 0、10、20、30、... 的影像將會被略過。所有其他影像都將遭到刪除。
-
-
為了實作二值化,我們將在設計中新增另一個階層式模組。

這個階層式模組中的運算子為「Is_GreaterThan」與「Scale」。

ThresholdFrom 模組代表實際的二值化。 對於大於參數 Number 所指定數值的每個輸入像素值,會輸出數值 1,否則輸出 0。 因此,該模組的輸出位元深度將會是一位元。您可以透過開啟連結屬性來檢查這一點。 由於我們不希望輸出一位元數值,因此我們需要將結果轉換為八位元數值。 非常簡單的解決方案就是將每個數值乘以 255。因此,二進位值 1 會變成 255, 而二進位值 0 則保持為 0。將 ScaleBy255 模組的參數設為下列數值。

如您所見,我們已將參數 ScaleFactor 的參數類型設為 Static。對於這個運算子而言,這非常 重要,因為與動態參數相比,它所需的 FPGA 資源會少得多。 一般來說,如果您知道在合成後不需要變更參數,請一律將參數設為靜態類型。
-
- 您實作的最後一步是檢查設計規則錯誤。執行 DRC 以檢查錯誤。 若沒有錯誤,您現在即可建置設計並在硬體中使用它。 或者,您也可以使用下一節中顯示的模擬來驗證您的實作。 請記得隨時儲存您的設計。
對於大多數設計而言,在實際 FPGA 硬體中使用之前,使用模擬來驗證實作的功能性是非常有用的。 接下來我們將使用模擬來驗證我們的設計。
-
準備作業
首先,我們需要一個用於模擬的影像。 您需要使用 TIFF 或 BMP 格式的影像檔案。 如果您想將影像資料植入使用灰階影像的影像處理管線(如我們的範例), 您必須使用具有單一色彩元件的影像。 如需有關模擬允許之影像檔案的詳細資訊,請參閱 'Simulation'。 VisualApplets 安裝資料夾中提供了一些範例影像。
-
來源與探棒
影像檔案可以使用 "simulation_source" 模組植入任何影像傳輸連結中,並可以在 任何其他連結上使用 "simulation_probe" 模組進行監控。 在我們的範例中,我們根據 下列螢幕截圖,在相機與緩衝區之間的連結新增模擬來源以及模擬探棒。 您可以從「Analysis」選單、設計視窗的右鍵功能表,或直接從 圖中標示的圖示新增模擬來源與探棒。

-
新增影像檔案
若要將影像檔案新增至模擬來源,請在設計中的 來源上按兩下以開啟 Simulation Source Viewer。 現在只需將您的影像檔案拖放至 Simulation Source Viewer 視窗,或使用 → 選單。

影像檔案現已新增至模擬來源。您只需將更多檔案 拖曳至該模組或視窗上,即可將其新增至來源。 在 Simulation Source Viewer 視窗的底部,您可以檢視序列中的所有影像。
-
啟動模擬
我們現在準備好啟動模擬。請選取 → ( F9 ) 以開啟主要的 Simulation 視窗。 每次開啟此視窗時,系統都會自動執行設計規則檢查。 無法模擬未通過設計規則檢查的設計。
在 VisualApplets 中,模擬是以循環(cycles)方式處理的。 每個循環代表從設計中的所有模擬來源植入影像。 只需按一下 即可啟動模擬。 VisualApplets 現在將會執行模擬。 根據設計的複雜度,這可能需要幾秒鐘的時間。
-
檢查結果
我們現在可以檢查模擬結果。 關閉 Simulation 視窗。 模擬探棒此時應已填入結果。

如果您開啟二值化後方探棒的 Simulation Probe Viewer,就可以立即查看 模擬是否成功運作。影像應包含數值為 0 與 255 的像素。

Results can now be saved to disk, if required.
-
序列模擬
我們可以在上一個步驟中驗證二值化。 然而,單一模擬影像不足以驗證監控輸出,因為預期只有每 10 個影像中的 1 個會 傳輸至主機 PC。 因此,我們需要模擬影像序列。
-
再次開啟 Simulation 視窗。
-
按一下 以重設先前模擬的序列。 一般來說,如果您想要啟動新的模擬,最好一律重設模擬以避免使用者發生錯誤。
-
點擊 來模擬一張影像。 我們將在每個模擬探針中獲得一個結果。 現在不需要關閉 Simulation 視窗。 您可以透過查看設計視窗中模組的編號來取得模擬探針中的目前影像數量。
-
現在點擊 執行另一個循環。 這次,除了 DMA0 模組的探針外,所有模擬探針的影像數量應該都已增加到兩個。
重複此步驟,直到總共模擬 11 個循環。 DMA 0 處的探針現在應該包含兩個影像。這顯示了我們實作的正確功能。

-
您不用點擊 11 次,而是可以使用 Simulation 視窗中的微調方塊來設定處理循環次數。 模擬結果將會相同。 此外,您可以設定 10 個模擬循環,啟動它們,然後再啟動接下來的 10 個循環。隨您的喜好...
-
在驗證了我們實作的功能後,我們可以在硬體中進行測試和使用。 您需要建置您的設計以取得硬體 applet 檔案 HAP。(使用者手冊:'Build') 確保您的設計符合硬體平台,例如我們範例中的 mE4VD4-CL。 此外,確保您的專案使用正確的架構,例如 Windows 64 Bit。 它必須與安裝的 Framegrabber SDK 相同。 透過以下方式開始建置 → ( F7 )。 VisualApplets 現在將使用 FGPA 製造商工具將您的設計轉換為 FPGA 位元串流。
綜合的結果是一個 HAP 檔案。 它包含 FPGA 位元串流以及用於存取資料和參數的軟體介面。 HAP 檔案位於 Framegrabber SDK 安裝目錄中的「Hardware Applets」子目錄中,或者, 如果未安裝 Framegrabber SDK 或您選擇了其他目標執行階段,則該檔案位於系統設定中指定的資料夾中(請參閱 'System Settings')。
我們將在 Framegrabber SDK 工具 microDisplay 中測試我們的設計。microDisplay 是用於對 applet 進行初步測試的工具。 開啟 microDisplay 並載入 applet。 microDisplay 將顯示兩個 DMA 影像視窗, 即僅顯示每第 10 個影像的原始影像視窗,以及顯示二值化影像的第二個 DMA 視窗。 有關在 Framegrabber SDK 中使用 applet 的詳細說明,請參閱 Framegrabber SDK 說明文件。



上一頁

