摘要:隨著人們對圖像信息處理的要求不斷提高,圖像上采樣算法的研究成為當(dāng)前熱點,而算法的硬件化實時性發(fā)展趨勢,使得提升圖像處理質(zhì)量的同時減少硬件開銷成為一個難點問題。本文通過對基于FPGA的雙線性插值上采樣算法進(jìn)行優(yōu)化,實現(xiàn)了圖像的4倍放大功能,實驗結(jié)果表明,上采樣算法功能正確,開發(fā)板資源消耗較少,為圖像放大實時性要求高的應(yīng)用場合提供了解決方案。
關(guān)鍵詞:FPGA;圖像上采樣;雙線性插值算法
中國分類號:TP391.41 文獻(xiàn)標(biāo)識碼: A
文章編號:1009-3044(2024)17-0043-03 開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID) :
0 引言
隨著電子技術(shù)的飛速發(fā)展,人們對視頻圖像質(zhì)量的要求不斷提升,如何處理超大數(shù)據(jù)量的圖像數(shù)據(jù)并提高響應(yīng)速度已成為圖像處理領(lǐng)域研究的熱點。圖像縮放技術(shù)通過將高分辨率(High-Resolution, HR) 圖像下采樣為低分辨率(Low-Resolution, LR) 圖像,減少系統(tǒng)處理的數(shù)據(jù)量和響應(yīng)時間,然后通過上采樣技術(shù)還原HR圖像顯示。目前,圖像縮放技術(shù)已在GPU中廣泛應(yīng)用,從NVIDIA的DLSS到AMD的FSR,上采樣算法成為其研究重點,并在無人機、智能駕駛、安防監(jiān)控、遙感、醫(yī)療等領(lǐng)域有著廣泛的應(yīng)用。
為了滿足圖像處理的實時性需求,越來越多的圖像處理算法采用硬件系統(tǒng)實現(xiàn)。FPGA以其并行性和可重構(gòu)特點,為圖像處理算法的硬件實現(xiàn)提供了更好的靈活性。本文基于FPGA技術(shù),以Zedboard開發(fā)板為硬件平臺,通過對幾種插值算法的分析比較,實現(xiàn)了雙線性插值圖像上采樣算法IP核設(shè)計。最終,以將960×540分辨率圖像放大4倍至3 840×2 160分辨率為例,驗證了該IP核的有效性及性能。
1 圖像上采樣算法
圖像上采樣也稱為超分辨率重建技術(shù),即將低分辨率(LR) 圖像經(jīng)過處理轉(zhuǎn)換成高分辨率(HR) 圖像的方法[1]。目前,國內(nèi)外對上采樣算法的研究主要分為三類:基于插值、基于重構(gòu)和基于學(xué)習(xí)的算法[2]?;诓逯档纳喜蓸铀惴ㄍㄟ^在原始LR圖像像素點間插入新像素點補充成HR圖像,主要包括最近鄰插值、雙線性插值、雙三次插值等線性插值算法,以及邊緣導(dǎo)向插值、小波變換插值等非線性插值算法;基于重構(gòu)的上采樣算法利用多幅LR圖像與未知HR圖像提取所需的圖像特征信息,估計HR圖像特征信息后重建HR 圖像,主要包括非均勻內(nèi)插法、迭代反向投影法、凸集投影法、最大后驗概率法等空域法和頻域法;基于學(xué)習(xí)的上采樣算法通過對給定圖像數(shù)據(jù)集中特征信息的集中學(xué)習(xí),建立LR和HR圖像序列的先驗關(guān)系,再通過超分辨率圖像重建算法實現(xiàn)圖像重建,目前主要包括基于卷積神經(jīng)網(wǎng)絡(luò)的SRCNN[3]和對抗神經(jīng)網(wǎng)絡(luò)SRGAN[4]算法等。
由于FPGA本身的LUT門數(shù)資源限制,在處理復(fù)雜算法時存在算力不足的問題,當(dāng)前主要采用基于插值的上采樣算法。因此,本文在VS2019環(huán)境下,以C 語言編程實現(xiàn)了最近鄰插值、雙線性插值、雙三次插值等插值算法的軟件模擬。結(jié)果表明:最近鄰插值算法簡單,但放大后圖片肉眼可見的鋸齒感和塊狀模糊現(xiàn)象嚴(yán)重;雙三次插值較雙線性插值在PSNR和SSIM 參數(shù)上略有提高,但在LPIPS參數(shù)上略有不足。雖然雙三次插值的圖片質(zhì)量較好,并且邊緣失真現(xiàn)象有所緩解,但算法復(fù)雜性明顯增大,運行時間約增長20倍;雙線性插值算法相對簡單,圖片質(zhì)量基本得到保證。因此,選用雙線性插值算法作為本設(shè)計的實現(xiàn)算法。
雙線性插值算法如圖1所示,其基本思想是利用周圍最近四個點的值做三次線性插值。首先在水平方向做兩次線性插值得到兩個點的像素值R1和R2,然后利用R1和R2在豎直方向做一次線性插值,即可估算出P點處的值作為新插入的像素點。P點處的線性插值計算公式如式(1) 所示。
2 基于FPGA 的圖像上采樣系統(tǒng)設(shè)計與實現(xiàn)
2.1 總體架構(gòu)圖
本系統(tǒng)的主要功能部件包括ARM Cortex-A9核、 上采樣IP核模塊、DDR3控制器、AXI SmartConnect總線模塊、SD卡及Fat文件管理系統(tǒng)、按鍵檢測模塊、HDMI顯示模塊等,系統(tǒng)總體架構(gòu)如圖2所示。
本系統(tǒng)的SoC整體部署在Zedboard開發(fā)平臺,并在SDK環(huán)境下創(chuàng)建板級支持包和FAT文件管理系統(tǒng)。PS端利用文件管理函數(shù)從SD卡中讀取圖片像素矩陣數(shù)據(jù)并存儲在DDR3中。當(dāng)外部按鍵被按下時,上采樣IP核開始工作,通過datamover模塊和總線模塊從DDR3中獲取像素數(shù)據(jù)進(jìn)行處理,處理完成后再將像素數(shù)據(jù)寫入DDR3中。其中,datamover和IP接口遵循AXI-Stream 協(xié)議。當(dāng)一張圖片處理完畢后,通過HDMI接口協(xié)議將處理后的圖像顯示在顯示器上,并存儲在SD卡中。
2.2 上采樣IP 核設(shè)計
雙線性插值算法的硬件實現(xiàn)面臨兩個問題:1) P 值運算涉及大量除法和乘法操作;2) 當(dāng)兩個像素之間的距離視為1時,公式(1) 中的分子都是浮點數(shù)。在FPGA中實現(xiàn)乘除法運算和浮點數(shù)運算非常浪費資源,設(shè)計也較為復(fù)雜。因此,從以下兩個方面進(jìn)行優(yōu)化。
2.2.1 雙線性插值算法公式化簡
首先,相鄰兩個像素點之間距離視為1,即x2-x1=1,y2-y1=1,則消除了分母,減少除法;其次,在權(quán)重表示上如x2-x 和x-x1可以分別用u 和1-u 代替,y2-y 和y-y1分別用v 和1-v 代替,如圖3所示。
公式簡化結(jié)果如式(2) 所示:
R(i,j ) = P00(1 - u)(1 - v)+P01u (1 - v)+P10(1 - u)v+P11uv (2)
2.2.2 FPGA 自動生成權(quán)重
本文擬在上采樣部分將圖片分辨率放大4被,即相當(dāng)于目標(biāo)圖片到原始圖片縮小4倍。如果目標(biāo)圖片某一個像素點(i,j) 在原始圖片中對應(yīng)的位置為(x,y) ,則x=i×1/4,y=j×1/4。因為放大在水平方向和豎直方向放大倍數(shù)一樣,此處以水平方向為例進(jìn)行說明,水平方向原始圖片與目標(biāo)圖片像素值的對應(yīng)關(guān)系如圖4 所示。
水平方向上目標(biāo)圖片像素點到對應(yīng)原始圖片最左邊像素點的距離,隨著目標(biāo)圖片像素點的遞增存在周期為4的變化規(guī)律0à1/4à2/4à3/4à0à1/4à…,即式(2) 中u 的變化規(guī)律,豎直方向變化規(guī)律相同。而此時u 和v 雖然都是分母為4的浮點數(shù),將分母4提到公式前得到最終化簡結(jié)果,如公式(3) 所示。此時u、v變化規(guī)律為0à1à2à3à0à1,乘法變成了整數(shù)與整數(shù)相乘,而分母4×4則可利用右移寄存器實現(xiàn),簡化了計算步驟。
插值計算模塊設(shè)計如圖5所示,模塊整體輸入為四個像素點的像素值P00/P01/P10/P11和權(quán)重u/v,每個像素點由R、G、B三基色組成,設(shè)置RED、GREEN、BLUE三個通道利用雙線性插值算法分別計算R、G、像素值,最后通過信號合并把R、G、B像素值合并成新像素點result輸出。
2.2.3 IP 核實現(xiàn)架構(gòu)
上采樣模塊IP 核微架構(gòu)如圖6所示,主要包括stream 模塊、控制原始圖片數(shù)據(jù)行緩存模塊sur_row_ctrl、插值計算模塊ctrl_pixel、控制目標(biāo)圖片行緩存模塊des_row_ctrl和目標(biāo)圖片行緩存狀態(tài)模塊state。
按鍵按下時,sur_row_ctrl模塊向stream模塊發(fā)起讀數(shù)據(jù)請求,隨后stream 模塊向總線發(fā)起讀數(shù)據(jù)請求,從總線讀取到的數(shù)據(jù)被返回給sur_row_ctrl模塊。該模塊按一定順序?qū)?shù)據(jù)存儲在片上存儲資源sur_row_bram 中。存儲完兩行原始圖片數(shù)據(jù)后,sur_row_ctrl模塊向ctrl_pixel模塊發(fā)出開始計算信號。ctrl_pixel模塊接收開始計算信號后,從sur_row_bram 中讀取這兩行數(shù)據(jù),開始插值計算,并將計算結(jié)果寫入des_row_ctrl模塊。在插值計算過程中,ctrl_pixel模塊和des_row_ctrl模塊既可以更改state模塊狀態(tài),也受state模塊的約束。des_row_ctrl模塊中目標(biāo)圖片的行緩存按乒乓原理存儲[5],state模塊表示目標(biāo)圖片行緩存的狀態(tài)。當(dāng)des_row_ctrl 模塊存儲完四行數(shù)據(jù)后,向stream模塊發(fā)起寫數(shù)據(jù)請求。stream模塊接收請求后,向總線發(fā)起寫數(shù)據(jù)請求,總線收到請求后將目標(biāo)圖片行緩存中的數(shù)據(jù)存儲到DDR3中。整個上采樣IP核一邊從DDR3中讀取數(shù)據(jù)并處理,一邊將處理好的數(shù)據(jù)寫入DDR3中,直到處理完一張圖片后結(jié)束。
2.3 系統(tǒng)仿真驗證
設(shè)計了testbench文件來驗證上采樣IP核。該IP 核的接口部分主要采用AXI-Stream協(xié)議,除一個執(zhí)行信號外。testbench 文件通過設(shè)置合理的輸入,觀察datamover 端口信號的變化情況,以驗證結(jié)果的正確性。
3 實驗結(jié)果分析與總結(jié)
3.1 實驗結(jié)果
將生成的BMP格式LR圖片保存在SD卡中,并通過上采樣IP核在FPGA板上進(jìn)行驗證。圖像分辨率由原始的960×540放大到3 840×2 160。放大后的圖像與原始圖像一致,如圖7所示,實驗結(jié)果正確。
3.2 總結(jié)
基于雙線性插值算法的FPGA上采樣IP核實現(xiàn)了原始圖像的4倍放大功能,放大后的圖像內(nèi)容一致。該IP核在Zedboard開發(fā)板上的硬件實現(xiàn),在工作頻率為250 MHz的情況下,處理一張圖片需要24 ms,板上資源消耗為6 528 個LUT、7 890 個FF 和41.5 個BRAM36K 儲存資源。該系統(tǒng)通過對雙線性插值公式簡化和計算權(quán)重去浮點處理,減少了系統(tǒng)運算量,加快了運行頻率,實現(xiàn)了圖像上采樣功能。該方案為圖像放大實時性要求高的應(yīng)用場合提供了解決方案,但仍存在邊緣模糊問題,有待進(jìn)一步解決。
參考文獻(xiàn):
[1] 張芳,趙東旭,肖志濤,等.單幅圖像超分辨率重建技術(shù)研究進(jìn)展[J].自動化學(xué)報,2022,48(11):2634-2654.
[2] 鐘夢圓,姜麟.超分辨率圖像重建算法綜述[J].計算機科學(xué)與探索,2022,16(5):972-990.
[3] DONG C,LOY C C,HE K M,et al.Learning a deep convolutional network for image super-resolution[C]//European Conference on Computer Vision.Cham:Springer,2014:184-199.
[4] LEDIG C,THEIS L,HUSZáR F,et al.Photo-realistic single im?age super-resolution using a generative adversarial network[C]//2017 IEEE Conference on Computer Vision and Pattern Recog?nition (CVPR).Honolulu,HI,USA.IEEE,2017:105-114.
[5] 張弘.基于FPGA的視頻圖像處理的研究與實現(xiàn)[D].成都:電子科技大學(xué),2020.
【通聯(lián)編輯:梁書】
基金項目:湖北工業(yè)大學(xué)大學(xué)生創(chuàng)新創(chuàng)業(yè)項目(S202310500110) ;湖北工業(yè)大學(xué)教學(xué)研究項目(校2018027)