摘 要:本文選擇了一種新穎的圖像縮放算法進(jìn)行FPGA硬件實(shí)現(xiàn)。該算法基于奇偶分解的思想,具有復(fù)雜度低、硬件需求小和縮放效果良好等突出優(yōu)點(diǎn)。首先利用MATLAB對(duì)該算法進(jìn)行了功能驗(yàn)證,然后用縮放耗時(shí)、PSNR、邊緣模糊等級(jí)和脈沖噪聲等指標(biāo)評(píng)估基于該算法圖像處理效果。與傳統(tǒng)時(shí)域算法作對(duì)比,對(duì)比結(jié)果表明該算法在處理效果和運(yùn)算速度上的優(yōu)異性?;赯edboard開(kāi)發(fā)板,運(yùn)用Vivado HLS高級(jí)綜合工具將算法的C程序綜合成硬件IP,并搭建了包含ARM處理器和VGA等模塊的軟硬協(xié)同驗(yàn)證系統(tǒng)。實(shí)驗(yàn)驗(yàn)證了圖像縮放算法硬件設(shè)計(jì)的正確性和實(shí)用性。
?
1. 引言
數(shù)字圖像處理因其廣泛應(yīng)用于社會(huì)生活的各個(gè)領(lǐng)域,而成為了研究的熱點(diǎn)。圖像縮放是數(shù)字圖像處理中的一項(xiàng)基本而又關(guān)鍵的操作,多數(shù)圖像與視頻幀都是以壓縮的格式進(jìn)行存儲(chǔ)和傳送,以降低存儲(chǔ)資源的占用,提高數(shù)據(jù)傳輸?shù)男省a槍?duì)不同的應(yīng)用,用戶通常需要不同分辨率的圖像。例如,在圖像數(shù)據(jù)傳輸過(guò)程中為節(jié)省帶寬,則通常需要發(fā)送低分辨率的圖像,而當(dāng)接收到圖像后,進(jìn)行顯示時(shí)又很希望看到高分辨率的圖像。盡管存在各種數(shù)據(jù)壓縮軟件,但數(shù)據(jù)的壓縮仍是有限的,而且數(shù)據(jù)的壓縮很可能已經(jīng)對(duì)圖片造成了一定的損壞,并不能確保圖片關(guān)鍵信息的保留。圖像縮放算法有很多,總體可分為基于時(shí)域和頻域兩大類算法,在時(shí)域圖像縮放方法中,主要有最近鄰域算法、雙線性插值算法和雙三次線性插值等。雖然它們?cè)诟纳茍D像縮放處理后的失真度上逐漸增強(qiáng),但其不斷下降的運(yùn)算速度也成為了不容忽視的問(wèn)題(特別在視頻幀放大中,圖片的切換頻率限制了縮放算法的可執(zhí)行時(shí)間)。
這些算法中,有的通過(guò)PC機(jī)上的MATLAB、C等高級(jí)語(yǔ)言實(shí)現(xiàn),有的基于ARM等嵌入式處理器實(shí)現(xiàn),而有的則是基于FPGA這類芯片進(jìn)行硬件的實(shí)現(xiàn)。由于PC機(jī)和ARM屬于多任務(wù)的操作系統(tǒng),通過(guò)軟件編程實(shí)現(xiàn)縮放算法是其常用的圖像縮放處理手段。系統(tǒng)代碼解析和串行執(zhí)行,以及多任務(wù)的切換等因素會(huì)嚴(yán)重降低圖像縮放效率和實(shí)時(shí)數(shù)據(jù)顯示,頻繁的圖像縮放會(huì)給系統(tǒng)的正常運(yùn)行造成相當(dāng)大的負(fù)擔(dān)。因此,本文重點(diǎn)研究第三種圖像縮放實(shí)現(xiàn)方法,充分利用FPGA的并行運(yùn)算、高集成度、可編程和低成本特性,編程實(shí)現(xiàn)縮放算法的硬件結(jié)構(gòu)和IP生成,為進(jìn)一步實(shí)現(xiàn)專用圖像縮放處理芯片的開(kāi)發(fā)和應(yīng)用提供幫助,以釋放處理器,提高圖像縮放質(zhì)量和效率。
在綜合考慮圖片處理效果、運(yùn)算速度和硬件資源需求后,本文選擇了由Hoon Yoo和Byong-Deok Choi共同提出的算法[1] ——基于奇偶分解的分段加權(quán)插值的圖像縮放算法(簡(jiǎn)稱WLI算法)進(jìn)行硬件實(shí)現(xiàn)。
WLI算法借助于奇偶分解的理論,基于16個(gè)相關(guān)點(diǎn)實(shí)現(xiàn)了圖像中新點(diǎn)值的確立。本課題基于Xilinx的全可編程器件Zedboard,利用vivado hls高級(jí)綜合工具編寫可綜合的c程序,實(shí)現(xiàn)了WLI縮放算法的硬件IP設(shè)計(jì),利用開(kāi)發(fā)板實(shí)際縮放操作驗(yàn)證了硬件縮放的高效率和低時(shí)間耗用特征,并通過(guò)圖像縮放的VGA對(duì)比顯示實(shí)驗(yàn)對(duì)設(shè)計(jì)進(jìn)行了驗(yàn)證。同時(shí),設(shè)計(jì)實(shí)現(xiàn)的IP也可以為圖像處理的SoC復(fù)用,降低SoC的開(kāi)發(fā)難度。
2. 圖像插值算法及MATLAB仿真
2.1. 傳統(tǒng)插值算法
本文分別選取了最簡(jiǎn)單的、基于四個(gè)相關(guān)點(diǎn)的最近鄰插值算法;有二階線性運(yùn)算參與的雙線性插值算法;以及最復(fù)雜多浮點(diǎn)運(yùn)算的雙三次插值運(yùn)算作為對(duì)比算法,通過(guò)多種圖像質(zhì)量和效率評(píng)價(jià)方法,來(lái)評(píng)估WLI算法的優(yōu)劣性(具體算法實(shí)現(xiàn)參考 [2] 相關(guān)內(nèi)容)。
2.2. WLI算法
WLI算法應(yīng)用奇偶分解的思想,將一維縮放中相關(guān)的四個(gè)點(diǎn)進(jìn)行奇偶分解(奇部和偶部的相關(guān)點(diǎn)值分解后的關(guān)系示例見(jiàn)圖1)。從定義上分析,奇部向量在頻域圖像數(shù)據(jù)處理中是一個(gè)高通濾波結(jié)構(gòu),相比于偶部向量,它具有更強(qiáng)的噪聲。而噪聲和高頻信號(hào)對(duì)該部分的影響往往會(huì)掩蓋該部分對(duì)正確縮放的像素點(diǎn)取值的貢獻(xiàn),所以為盡量避免奇部向量中攜帶的噪聲等參量對(duì)縮放質(zhì)量造成損害,對(duì)它進(jìn)行簡(jiǎn)單的線性化操作,得出公式(1)的處理方案。
因?yàn)榕疾肯蛄繉?duì)稱的特性,其對(duì)縮放點(diǎn)的最終取值具有很大的影響度。直接的線性擬合雖然具有運(yùn)算簡(jiǎn)單的特點(diǎn),但正如圖2所示,這會(huì)使得圖片點(diǎn)值的變化太快,影響視覺(jué)效果。為使該部分的取值具有緩慢變化的特征,基于平滑曲線的原型方程是一個(gè)很好的選擇,但曲線的復(fù)雜運(yùn)算帶來(lái)的資源耗用往往使算法縮放得不償失。因此,引文對(duì)此部分的曲線公式進(jìn)行分析討論,巧妙的引入w參數(shù)完成了運(yùn)算方法的降次和近似,如圖2所示,最終得出同樣是一次方程的擬合曲線圖像插值計(jì)算公式(2)。
最終由圖3表示出了WLI算法基本單元的信號(hào)流處理流程,通過(guò)串行移位得到四個(gè)相關(guān)點(diǎn),利用加/減操作和移位操作分別得到奇部向量和偶部向量。在s參量的調(diào)節(jié)下,取w = 0.5時(shí),僅通過(guò)兩個(gè)乘法器便可實(shí)現(xiàn)最核心的操作,最后加和奇部和偶部,便得出最終的縮放結(jié)果。該結(jié)構(gòu)僅包括6次加法和6次移位操作,并伴有3次延時(shí)和兩個(gè)乘法操作,總體硬件資源耗用較少,延時(shí)也較低,具備硬件化條件。
2.3. 算法的MATLAB仿真及評(píng)估
運(yùn)用MATLAB語(yǔ)言,編寫程序?qū)崿F(xiàn)縮放算法。將常用的幾種算法 [3] 進(jìn)行了縮放耗時(shí) [4] 、PSNR (Peak Signal to Noise Ratio)比較以及邊沿模糊度、脈沖噪聲兩種無(wú)參考圖像評(píng)測(cè),并對(duì)結(jié)果進(jìn)行了比較分析。
PSNR [5] 也叫峰值信噪比,它是最普遍、最廣泛使用的評(píng)鑒畫質(zhì)的客觀測(cè)量方法,意指到達(dá)噪音比率的頂點(diǎn)信號(hào),是衡量經(jīng)過(guò)處理后的影像品質(zhì)的客觀方法,用MATLAB實(shí)現(xiàn)的計(jì)算公式如(3)所示。
其中,MSE是原圖像與處理圖像之間均方誤差。
邊緣模糊度 [6] 是指階躍邊緣點(diǎn)占總邊緣點(diǎn)的個(gè)數(shù)的比例值,其值越小說(shuō)明圖片邊緣更清晰,圖像質(zhì)量越好。一般邊緣點(diǎn)的檢測(cè)是利用robel算子得到的,而在圖像中根據(jù)相關(guān)函數(shù)也可以判斷并統(tǒng)計(jì)出階躍邊緣點(diǎn),由此便可計(jì)算出各個(gè)圖像的比例值,使用不同算法對(duì)多個(gè)圖片放大兩倍后計(jì)算出的邊緣模糊度結(jié)果如表1。
類似的,脈沖噪聲 [6] 是指圖像中噪聲像素點(diǎn)占總像素點(diǎn)的個(gè)數(shù)比例,圖像噪聲點(diǎn)是指根據(jù)局部圖片判斷出的本不該出現(xiàn)的點(diǎn)值,即該區(qū)域有一定的取值范圍,當(dāng)超過(guò)該范圍后即認(rèn)為該點(diǎn)是噪聲點(diǎn)。本文采用最小二乘法的預(yù)測(cè)模型進(jìn)行容限計(jì)算,同時(shí)判斷和統(tǒng)計(jì)總的噪聲點(diǎn)個(gè)數(shù),進(jìn)而計(jì)算出不同圖片的脈沖噪聲值結(jié)果變化如圖4所示。
圖1. 奇偶分解相關(guān)點(diǎn)示意圖
圖2. WLI算法偶部線性擬合示意圖
圖3. WLI算法基本結(jié)構(gòu)數(shù)據(jù)流處理結(jié)構(gòu)
圖4. 多種算法放大2倍的圖片脈沖噪聲對(duì)比
表1. 多種算法放大2倍的圖片邊緣模糊度
根據(jù)MATLAB的相關(guān)仿真數(shù)據(jù),得出WLI算法不僅具有高PSNR值,低耗時(shí)等特征,從表1和圖4中的對(duì)比結(jié)果亦見(jiàn),其邊緣模糊度和脈沖噪聲也相對(duì)較低,充分體現(xiàn)了該算法的優(yōu)異性。
3. 硬件系統(tǒng)平臺(tái)的搭建
針對(duì)Xilinx可編程器件開(kāi)發(fā)板Zedboard [7] ,進(jìn)行算法的硬件實(shí)現(xiàn)和IP生成,同時(shí)對(duì)軟硬協(xié)同驗(yàn)證系統(tǒng)平臺(tái)的設(shè)計(jì)和功能進(jìn)行軟件和硬件劃分。如圖5所示,上位機(jī)中計(jì)算機(jī)(PC)負(fù)責(zé)把新的圖片數(shù)據(jù)傳送到開(kāi)發(fā)板,或者從開(kāi)發(fā)板接收縮放后的圖片數(shù)據(jù),并打印各種處理信息和狀態(tài)值。顯示器顯示不同算法的縮放圖片直觀效果。而下位機(jī)(Zedboard)則主要完成控制信息編碼輸入,軟件或硬件圖像縮放算法實(shí)現(xiàn),以及內(nèi)部模塊間的圖片數(shù)據(jù)傳輸?shù)裙δ?。其中,輸入檢測(cè)和控制信息生成、執(zhí)行,以及對(duì)比軟件縮放算法的實(shí)現(xiàn)等部分是分配給ARM處理器通過(guò)軟件完成的。
3.1. ZEDBOARD的控制輸入IP
該IP設(shè)計(jì)主要完成對(duì)5個(gè)按鍵以及2個(gè)開(kāi)關(guān)狀態(tài)的檢測(cè)及編碼,使產(chǎn)生8位編碼數(shù)據(jù),用以傳送給XPS構(gòu)建的子系統(tǒng)的8位GPIO,以axi_lite相關(guān)協(xié)議映射編碼數(shù)據(jù),從而將編碼輸入傳送到了PS (Processing System: ARM處理器)部分,用以軟件編程檢測(cè)和處理。
該設(shè)計(jì)的實(shí)現(xiàn)原理如圖6所示,通過(guò)計(jì)數(shù)模塊Count實(shí)現(xiàn)按鍵狀態(tài)的去抖檢測(cè),兩個(gè)按鍵用于縮放算法選擇,并用三個(gè)Led的二進(jìn)制實(shí)時(shí)顯示,另兩個(gè)按鍵用于選擇縮放倍數(shù),一個(gè)按鍵用于錄入狀態(tài)與完成錄入狀態(tài)間的切換;兩個(gè)開(kāi)關(guān)則分別控制放大/縮小、顯示使能。
3.2. WLI算法IP
3.2.1. Axi4接口
Axi4 [8] 是由Xilinx和ARM合作提出的便于全可編程器件內(nèi)部ARM和FPGA之間數(shù)據(jù)的高速通信的總線標(biāo)準(zhǔn)。Zedboard內(nèi)部使用Axi4,可細(xì)分為Axi_lite、Axi4、Axi_stream三大類,包含地址、數(shù)據(jù)和反饋通道。能實(shí)現(xiàn)ARM和FPGA內(nèi)部的高速并行數(shù)據(jù)通信,并支持DMA (direct memory access)通信。
3.2.2. 符合Axi4接口的WLI算法IP
Vivado HLS是Xilinx針對(duì)其全可編程器件而推出的高級(jí)綜合組件,該軟件可以實(shí)現(xiàn)對(duì)C語(yǔ)言編寫的程序的直接硬件化,并能很好的綜合出符合Axi標(biāo)準(zhǔn)的IP [9] - [12] 。本文的設(shè)計(jì)采用這種設(shè)計(jì)方法,借助OpenCV的MAT的相關(guān)內(nèi)容、要求,編寫可綜合算法程序,圖7是WLI算法的實(shí)現(xiàn)流程。
映射策略確定新圖中的一行在原圖的行位置,通過(guò)每次縮放一行新圖數(shù)據(jù)的基本策略,用四個(gè)數(shù)組(Bram存儲(chǔ))緩存與映射行相關(guān)的四行原圖點(diǎn)值,從而實(shí)現(xiàn)算法的二維縮放。WLI子模塊實(shí)現(xiàn)對(duì)一維4個(gè)相關(guān)點(diǎn)的算法縮放,通過(guò)先行后列的策略實(shí)現(xiàn)個(gè)相關(guān)點(diǎn)的圖像縮放目的。
圖5. 縮放算法硬件系統(tǒng)架構(gòu)
圖6. 控制輸入IP結(jié)構(gòu)框圖
圖7. WLI算法流程
3.3. 硬件系統(tǒng)搭建
HLS綜合出算法的硬件IP后,通過(guò)Planahead環(huán)境完成整個(gè)硬件系統(tǒng)的搭建。圖8為系統(tǒng)結(jié)構(gòu)示意圖,該系統(tǒng)包括PS子系統(tǒng)、內(nèi)存間以HP通道(DDR內(nèi)存和FPGA間的高寬帶、高速數(shù)據(jù)通道)直接進(jìn)行數(shù)據(jù)通信的VDMA、GPIO等IP,以及自主設(shè)計(jì)的WLI算法IP和VGA顯示IP [13] 。
4. 軟硬協(xié)同驗(yàn)證實(shí)驗(yàn)
4.1. 軟件原理
在硬件系統(tǒng)搭建完成以后,借助于Xilinx的SDK集成環(huán)境進(jìn)行軟件設(shè)計(jì)。圖9是整個(gè)軟件設(shè)計(jì)運(yùn)行的流程圖,主要分為初始化、原始圖片選擇接收存儲(chǔ)、GPIO初始化、縮放倍數(shù)檢測(cè)統(tǒng)計(jì)、按鍵狀態(tài)檢測(cè)判斷和相應(yīng)算法處理及對(duì)比顯示等。
軟件設(shè)計(jì)中,通過(guò)接收PC的選擇信號(hào),選擇使用預(yù)定義的圖片,或接收從PC傳來(lái)的新圖片。然后進(jìn)入循環(huán)檢測(cè)和縮放處理過(guò)程,便于演示。同時(shí),通過(guò)顯示使能控制端,可以再次更新PC的顯示數(shù)據(jù)。而縮放顯示模式不僅決定縮放的算法選擇(軟件或硬件),還決定顯示模式(單一還是對(duì)比顯示)。
當(dāng)檢測(cè)到GPIO為倍數(shù)錄入狀態(tài)時(shí),應(yīng)當(dāng)進(jìn)入倍數(shù)的檢測(cè)和相應(yīng)操作模式,由此可實(shí)現(xiàn)0.1精度的任意倍數(shù)圖像縮放效果,并能夠?qū)诓煌s放算法得到的圖片進(jìn)行對(duì)比顯示。
4.2. 軟硬件協(xié)同驗(yàn)證
通過(guò)SDK將編譯好的bootloader程序、FPGA配置bit文件和裸機(jī)程序封裝成boot.bin文件,以SD卡實(shí)現(xiàn)Zedboard的脫機(jī)演示系統(tǒng)。其驗(yàn)證實(shí)驗(yàn)的系統(tǒng)如圖10所示,右圖是雙三次插值算法軟件縮放結(jié)果,而左圖則是WLI算法硬件縮放圖。
各縮放算法在ARM裸機(jī)上縮放圖片所耗用時(shí)間 [14] 的對(duì)比結(jié)果如圖11所示。其中最近鄰(Near)、雙線性(Biline)、雙三次(Bcubic)和CCI等為軟件縮放算法,WLI算法為硬件實(shí)現(xiàn)算法。
盡管軟件縮放算法在約667 MHz的Cortex A9處理器上運(yùn)行,而通過(guò)FPGA硬件化的WLI算法的運(yùn)行時(shí)鐘僅為100 MHz,但圖11的結(jié)果表明,其縮放耗時(shí)仍同最近鄰算法相當(dāng)(Near幾乎被WLI覆蓋了),可見(jiàn)在相同時(shí)鐘條件下,其計(jì)算效率將會(huì)大幅提高,體現(xiàn)硬件實(shí)現(xiàn)的并行特征。
圖8. 硬件系統(tǒng)結(jié)構(gòu)
圖9. 軟件處理流程圖
圖10. 圖像縮放對(duì)比顯示演示系統(tǒng)
圖11. 各縮放算法不同倍數(shù)耗時(shí)對(duì)比
5. 結(jié)論
本文主要研究了時(shí)域圖像縮放算法中比較常用的幾種縮放算法,并基于一種稱為WLI的圖像縮放算法,在Xilinx的全可編程器件開(kāi)發(fā)板Zedboard上實(shí)現(xiàn)了算法的硬件化,并構(gòu)建了軟硬協(xié)同驗(yàn)證系統(tǒng),實(shí)現(xiàn)了脫機(jī)演示。
本文設(shè)計(jì)的IP實(shí)現(xiàn)了硬件圖像縮放,并與基于軟件實(shí)現(xiàn)的圖像縮放具有相同效果,而計(jì)算效率提高了至少一個(gè)數(shù)量級(jí),充分體現(xiàn)了硬件實(shí)現(xiàn)圖像縮放的優(yōu)異性和可行性。
參考文獻(xiàn) (References)
1. Choi, B.-D. and Yoo, H. (2009) Design of piecewise weighted linear interpolation based on even-odd decomposition and its application to image resizing. IEEE Transactions on Consumer Electronics, 55, 2280-2286.
2. 劉婧 (2009) 圖像縮放算法的研究與FPGA設(shè)計(jì). 碩士論文, 上海大學(xué), 上海.
3. 李秀英, 袁紅 (2012) 幾種圖像縮放算法的研究. 現(xiàn)代電子技術(shù), 35, 48-51.
4. Wang, J. (2011) MATLAB三種程序耗時(shí)算法.
5. 心海 (2013) PSNR定義與計(jì)算.
6. Li, X. (2002) Blind image quality assessment. IEEE ICIP, 1, 449-452.
7. Xilinx (2014) Zynq-7000 all programmable SoC. Xilinx數(shù)據(jù)手冊(cè).
8. Xilinx (2011) Xilinx, AXI reference guide UG761 (v13.1) March 7. Xilinx數(shù)據(jù)手冊(cè).
9. 馬建國(guó), 孟憲元 (2011) FPGA現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì). 清華大學(xué)出版社, 北京.
10. 仆居 (2013) AXI-Stream接口開(kāi)發(fā)詳細(xì)流程.
11. 何賓 (2011) 基于AX14的可編程SOC系統(tǒng)設(shè)計(jì). 清華大學(xué)出版社, 北京.
12. 何賓 (2011) Xilinx all programmable Zynq-7000 SOC設(shè)計(jì)指南. 清華大學(xué)出版社, 北京.
13. 開(kāi)源硬件社區(qū) (2009) VGA驅(qū)動(dòng)及實(shí)現(xiàn).
14. Cuter (2013) 如何在SDK中計(jì)算某段程序的執(zhí)行時(shí)間.
評(píng)論