使用Simulink快速搭建視頻處理硬件加速仿真平臺(tái)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
前言:這一講我們使用Simulink來(lái)快速搭建圖像/視頻處理硬件加速平臺(tái)。以簡(jiǎn)單的RGB2GREY算法為例。我們主要使用的Toolbox為HDL Coder和Vision HDL兩個(gè),以后會(huì)加上相關(guān)的Hardware Support Package。大家可以在Simulink的Library Brower中以及官網(wǎng)里熟悉一下他們所支持的功能。
正文:
首先我們新建一個(gè)Simulink模型,并且按照上一講所講到的設(shè)置配置完成。
然后在空白處雙擊,輸入并添加以下模塊:
-
Image From File
-
Frame To Pixels
-
Pixels to Frame
-
Video Reviewer
-
Embedded Subsystem
將Video Reviewer放入Enabled Subsystem中,如下圖
然后按照下圖連接所有模塊。此處每個(gè)模塊的輸入都包含兩個(gè):pixel和ctrl。Pixel表示對(duì)應(yīng)的像素值,ctrl信號(hào)會(huì)indicate行開(kāi)始和結(jié)束,列開(kāi)始和結(jié)束,以及valid信號(hào)。不了解的同學(xué)可以參考Mathwork關(guān)于視頻接口控制總線的說(shuō)明https://www.mathworks.com/help/visionhdl/ug/pixelcontrol-bus.html。
之后我們需要設(shè)置Image From File模塊,雙擊它。如下圖設(shè)置File Name,Sample time。
下面設(shè)置Frame To Pixels和Pixels To Frame模塊,由于我們使用的圖片格式是RGB240p,所以我們?cè)陔p擊模塊之后彈出的配置窗口里選擇Video Format為240p,RGB有3個(gè)通道,所以Number of components填3。Pixels To Frame同理。對(duì)于視頻格式不太了解的同學(xué),我建議閱讀一下Matlab的Frame To Pixels文檔的Video format部分,鏈接如下
https://www.mathworks.com/help/visionhdl/ref/frametopixels.html
接下來(lái)我們?cè)O(shè)置仿真參數(shù),在空白處單擊右鍵,選擇Model Properties
然后我們?cè)贑allbacks中的InitFcn(初始化函數(shù))填寫(xiě)以下代碼,這樣我們只要改變VideoFormat的格式就可以自動(dòng)獲取圖像長(zhǎng)寬等參數(shù)。
完成之后我們?cè)赟imulink Model的配置欄設(shè)置仿真時(shí)間為totalPixels(也就是上一步中配置的),仿真模式選擇為Accelerator模式。
至此,我們可以測(cè)試一下仿真通路了,保存之后使用ctrl+D來(lái)驗(yàn)證模型完整性。如果沒(méi)有報(bào)錯(cuò)即可點(diǎn)擊開(kāi)始按鈕,開(kāi)始仿真。如果不出意外,我們將會(huì)看到以下圖片
既然視頻通路搭建成功,我們就可以開(kāi)始添加自己的RGBGREY模塊了。
熟悉數(shù)字圖像處理的同學(xué)一定知道,RGB圖像轉(zhuǎn)換成灰度圖像的公式如下
GREY=0.299*R+0.587*G+0.114*B。因此我們搭建轉(zhuǎn)換模塊如下
Delay模塊功能相當(dāng)于寄存器模塊,RGB信號(hào)通過(guò)pixelIn輸入,通過(guò)乘法器與對(duì)應(yīng)的常數(shù)相乘,并且使用Sum of Element模塊求和,后面的Data Type Conversion模塊截取了小數(shù)點(diǎn)之前的8位,也就是轉(zhuǎn)換成uint8的類(lèi)型。Control Bus也要有相應(yīng)的延遲,以保證時(shí)序不變。(關(guān)于為什么使用2個(gè)寄存器延遲,以及乘法器的替代,將會(huì)在以后提到。)我們將這部分模塊封裝在一個(gè)subsystem中(選中想要封裝的模塊并點(diǎn)擊右鍵,選中Create Subsystem from Selection)。至此,我們的算法搭建已經(jīng)完成,如下圖。由于灰度圖像是單通道的,別忘記將Pixel To Frame中的通道數(shù)改為1。
開(kāi)始仿真,Video Reviewer會(huì)顯示以下圖像,說(shuō)明我們的轉(zhuǎn)換算法驗(yàn)證成功。
說(shuō)明:1. 細(xì)心的同學(xué)可能會(huì)發(fā)現(xiàn),在實(shí)現(xiàn)RGBGREY算法,雙擊添加模塊時(shí),所有的模塊都出自HDL Coder Toolbox,大家可以去官網(wǎng)查看更多實(shí)例以及熟悉支持功能。2.MathWorks提供了一套對(duì)應(yīng)于上面模型的硬件框架來(lái)使用戶(hù)可以快速的搭建算法驗(yàn)證測(cè)試平臺(tái),主要來(lái)自Xilinx Zynq Support from Computer Vision Toolbox。前圖模型中顯示綠色和黃色的部分并不能綜合成硬件代碼,但應(yīng)該適配到對(duì)應(yīng)的Zynq框架之后,只要用戶(hù)按照接口,也就是pixel和ctrl,來(lái)開(kāi)發(fā)算法,就可以很容易的使用該硬件支持包來(lái)布置到FPGA中。
在Github中,我還添加了軟件部分的驗(yàn)證部分,并且計(jì)算硬件和軟件的PSNR。歡迎大家下載并且在自己的電腦上驗(yàn)證,如果有問(wèn)題和任何建議也可以與我聯(lián)系。
以下為模型地址https://github.com/linbaiwpi/matlab_visionhdl/tree/master/rgb2grey
下集預(yù)告:之后,我們還會(huì)了解到哪些模塊是可以被轉(zhuǎn)換成HDL代碼的,如何將模型部署到硬件之上,以及實(shí)現(xiàn)算法的時(shí)候?qū)?huì)用到的技巧等。
下一講我將會(huì)實(shí)現(xiàn)以上模型的HDL代碼,并且在Zedboard+FMC-HDMI-CAM板卡上進(jìn)行驗(yàn)證。之后我們會(huì)講解如何使用Line Buffer,如何生成patch,實(shí)例為將照片轉(zhuǎn)換成素描風(fēng)格(測(cè)試圖片摘自Github-wyfunique/Convert-Photo-to-sketch,如有侵權(quán),煩請(qǐng)告知,我會(huì)立刻刪除)。實(shí)現(xiàn)結(jié)果如下(右邊是輸入圖像,左邊是硬件實(shí)現(xiàn)的結(jié)果)