鄧亞斌,陳 立,方志宏,高志勇
(上海交通大學(xué) 圖像通信與網(wǎng)絡(luò)工程研究所,上海200240)
目前在消費(fèi)電子領(lǐng)域,隨著視頻技術(shù)的發(fā)展,人們對(duì)于視頻圖像的清晰度要求越來越高,從以前的標(biāo)清到現(xiàn)在的高清、超高清。為用戶提供越來越好的觀看體驗(yàn)時(shí),對(duì)于視頻的傳輸和處理技術(shù)提出了更高的要求。近些年來流行的4K 超高清電視給予人們非常震撼的體驗(yàn),然而包括互聯(lián)網(wǎng)和傳統(tǒng)媒體中仍然存在著大量的高清視頻,高清視頻就要轉(zhuǎn)化成超高清4K 視頻進(jìn)行播放。所以,為解決這一問題,可以在接收端對(duì)視頻進(jìn)行超分辨率處理。
目前的圖像超分辨率算法有很多種,比較經(jīng)典的有基于插值的領(lǐng)域插值,bilinear 插值和bicubic 插值[1]。現(xiàn)在主流的圖像超分辨率算法主要是基于機(jī)器學(xué)習(xí)類的算法,即基于圖像間的相似性來進(jìn)行放大。但是基于外部數(shù)據(jù)庫的機(jī)器學(xué)習(xí)類的算法對(duì)于訓(xùn)練數(shù)據(jù)庫的依賴性較強(qiáng),算法的魯棒性不足。例如,在進(jìn)行文字的超分辨的過程中,放置大量的文字的數(shù)據(jù)庫得到的效果比用大量的人臉的數(shù)據(jù)庫要好得多。目前流行的算法的數(shù)據(jù)來自于圖像本身,利用圖像的自相似性訓(xùn)練的可靠性強(qiáng)并且效果明顯。
自相似性算法[2]可以產(chǎn)生邊緣清晰的圖像,有比較出色的效果。該算法的中心思想是:采用傳統(tǒng)雙線性插值(bilinear)方法,對(duì)原始圖像進(jìn)行小倍數(shù)放大得到初步放大圖像,對(duì)原始圖像進(jìn)行下采樣和上采樣后得到原始圖像的低頻圖像和高頻圖像;然后根據(jù)圖像的自相似性通過塊匹配添加相應(yīng)的高頻信息到初步放大圖像中,改善視覺效果,完成一次超分辨率。
圖像自相似性的假設(shè)認(rèn)為單幀圖像的不同位置,同內(nèi)容的不同分辨率的圖像之間存在著相似性。超分辨率放大的倍數(shù)不同會(huì)導(dǎo)致圖像相似性存在著差異,經(jīng)過大量的實(shí)驗(yàn)表明,圖像相似性的誤差和圖像超分辨率放大倍數(shù)之間并不是簡單的線性的關(guān)系,在進(jìn)行1.25 倍超分辨率放大的時(shí)候,圖像相似性的誤差接近于0,表明超分辨率前后存在著很強(qiáng)的自相似性。隨著超分辨率放大倍數(shù)的增加,圖像自相似性也會(huì)相應(yīng)的減弱,放大過程丟失了更多的圖像信息。實(shí)驗(yàn)證明,對(duì)于較大倍數(shù)的超分辨率過程,多次逐步地進(jìn)行超分辨率相比于一次一步的放大會(huì)取得更好的效果。筆者基于自相似的超分辨率算法采用小倍數(shù)、多次超分辨、每次超分辨率的結(jié)果作為輸入,進(jìn)行下一次超分辨率,最終得到需要的超分辨率放大圖像。下面以將圖像進(jìn)行2 倍超分辨率為例說明算法具體實(shí)現(xiàn)過程(見圖1)。
圖1 基于自相似超分辨率算法流程圖
算法流程[3]為:
1)用雙線性插值對(duì)原始的圖像I0超分辨率得到1.25 倍的放大的圖像IB,IB=upsample(I0,1.25),其中upsample 表示采用bilinear 放大;I0表示原始圖像,IB表示經(jīng)過1.25 倍超分辨率后的圖像。
2)對(duì)原始圖像采用雙線性插值得到0.8 倍的圖像,然后進(jìn)行雙線性插值放大1.25 倍得到與原始圖像IB相同圖幅的低頻圖像Ilow,然后由原始圖像I0與低頻圖像Ilow得到高頻圖像Ihigh=I0-Ilow;其中Ilow表示原始圖像的低頻層,I0為原始圖像,Ihigh表示原始圖像的高頻層。
3)根據(jù)局部自相似的假設(shè),Ilow和IB都含有低頻信息,有很強(qiáng)的自相似性。在Ilow中尋找與IB匹配的塊,匹配準(zhǔn)則為SAD(絕對(duì)誤差和)最小,找到后確定該匹配塊在Ilow中的位置,并將Ihigh中相應(yīng)位置的高頻分量加到IB中。
4)對(duì)IB中所有的像素點(diǎn)對(duì)應(yīng)的塊進(jìn)行操作后得到第一次超分辨率的圖像Ifinal1。
5)將Ifinal1作為輸入I0,重復(fù)步驟1)~4),可以得到再次放大的圖像Ifinal2。如此循環(huán)迭代,直到達(dá)到相應(yīng)的超分辨率倍數(shù),最終得到經(jīng)超分辨率后的圖像。
基于自相似性的超分辨率算法實(shí)現(xiàn)的總體硬件框架如圖2 所示。
本設(shè)計(jì)基于模塊化處理,每個(gè)模塊的大小為16×16 像素,處理開始時(shí)根據(jù)外部的系統(tǒng)總線配置圖像大小和超分辨率倍數(shù)的參數(shù),同時(shí)接收視頻數(shù)據(jù)并通過AXI(Advanced eXtensible Interface)總線存儲(chǔ)到外存DDR3 中,啟動(dòng)超分辨率引擎內(nèi)核,從外部讀取一個(gè)圖像塊(16×16)的像素信息,根據(jù)自相似性超分辨率算法原理得到放大圖像的數(shù)據(jù)信息并將其像素信息存儲(chǔ)到外部存儲(chǔ)器中。最后將數(shù)據(jù)進(jìn)行輸出顯示。
圖2 算法實(shí)現(xiàn)硬件總體框架
硬件框架各模塊的設(shè)計(jì)功能如下:
1)輸入數(shù)據(jù)緩存模塊。作為視頻流入的主要通道,主要功能是將輸入的數(shù)據(jù)信息處理成為AXI 總線可接受的格式,將視頻數(shù)據(jù)存儲(chǔ)到外存DDR3 中,帶寬要求較高。
2)地址管理模塊。地址管理模塊主要功能是管理輸入的視頻數(shù)據(jù)在DDR3 中的存儲(chǔ)地址、超分辨率引擎內(nèi)核模塊讀取原始視頻數(shù)據(jù)的基址和向外部DDR3 中寫入超分辨率后視頻數(shù)據(jù)的基址。
3)系統(tǒng)寄存器模塊。作為超分辨率引擎內(nèi)核和外部通訊的媒介,主要用于對(duì)超分辨率引擎內(nèi)核進(jìn)行配置及運(yùn)行控制??蓪⒊直媛室鎯?nèi)核配置成1.5 倍或者2.0 倍兩種超分辨率比例,可應(yīng)用于將720p 超分辨率成1 080p(1.5 倍),1 080p超分辨率成4K(2.0 倍)或者720p 超分辨率成4K(1.5倍+2.0 倍)等。
4)超分辨率引擎內(nèi)核。作為本設(shè)計(jì)的主要運(yùn)行單元,由寄存器控制啟動(dòng),通過AXI 總線從外部存儲(chǔ)器讀取圖像塊數(shù)據(jù),根據(jù)自相似算法對(duì)圖像塊進(jìn)行遞歸超分辨率,控制數(shù)據(jù)流向,并控制超分辨率結(jié)果寫回到DDR3 中。
5)輸出數(shù)據(jù)緩存模塊。主要負(fù)責(zé)將超分辨率后的數(shù)據(jù)從DDR3 中讀取并組織成輸出接口的時(shí)序輸出到顯示器中顯示超分辨率后的視頻。
超分辨率引擎內(nèi)核是一個(gè)遞歸超分辨率內(nèi)核,每次超分辨率都調(diào)用同一個(gè)超分辨率內(nèi)核scale core,通過多次調(diào)用實(shí)現(xiàn)超分辨率的目的。對(duì)于不同的超分辨率比例,遞歸次數(shù)和每一次遞歸的超分辨率比例都不一樣,例如,對(duì)于2 倍超分辨率,3 次遞歸把16×16 圖像放大到32×32。對(duì)于1.5 倍放大,需要兩次遞歸把16×16 圖像放大到24×24。但是輸入尺寸和輸出尺寸都一致,為32×32 的像素塊,輸出模塊需要通過系統(tǒng)配置判斷輸出圖像中哪部分是有效的,無效部分不輸出到內(nèi)存。
超分辨率引擎內(nèi)核在接收到寄存器模塊的start 信號(hào)后,外存請(qǐng)求管理模塊計(jì)算外存數(shù)據(jù)的地址,并且向外存發(fā)送數(shù)據(jù)請(qǐng)求,超分辨率引擎內(nèi)核接收到數(shù)據(jù)后開始處理第一個(gè)色彩分量,從源地址處一行一行的讀取像素,當(dāng)一個(gè)模塊的像素都讀取完后啟動(dòng)scale core 開始第一輪超分辨率運(yùn)算。由于運(yùn)算對(duì)外緣數(shù)據(jù)的需求,實(shí)際輸入圖像是以實(shí)際須放大的16×16 圖像為核心,4 方向外延8 像素得到的32×32 圖像區(qū)塊。所以需要用塊數(shù)據(jù)緩存模塊對(duì)于輸入的數(shù)據(jù)進(jìn)行緩存和重新的組織。
每次遞歸需要把運(yùn)算結(jié)果緩存到內(nèi)核數(shù)據(jù)緩存模塊,此模塊將作為下一次遞歸運(yùn)算的數(shù)據(jù)源。所以遞歸的第一次運(yùn)算,數(shù)據(jù)源來自于外部內(nèi)存,之后的遞歸運(yùn)算,數(shù)據(jù)源都來自于內(nèi)核數(shù)據(jù)緩存模塊,而遞歸運(yùn)算的結(jié)果,除了最后一次運(yùn)算輸出到外部內(nèi)存外,其他都直接輸出到內(nèi)核數(shù)據(jù)緩存模塊。
當(dāng)3 個(gè)色彩分量全部依次處理完畢后,超分辨率引擎內(nèi)核返回待命狀態(tài),超分辨率引擎內(nèi)核結(jié)構(gòu)如圖3 所示。
圖3 超分辨率引擎內(nèi)核結(jié)構(gòu)圖
2.2.1 Scale core
Scale core 是圖像超分辨率設(shè)計(jì)的核心模塊,該模塊接收32×32 的10 bit 圖像塊(16×16 的圖像塊經(jīng)過4 方向外延得到)數(shù)據(jù)經(jīng)過基于自相似性超分辨率得到32×32 的圖像塊數(shù)據(jù)并且存入RAM 中。如圖4 為Scale core 的結(jié)構(gòu)圖。
圖4 Scale core 結(jié)構(gòu)圖
圖像塊經(jīng)過下采樣上采樣得到低頻圖像塊L1 存放在RAM 中,I1 經(jīng)bilinear 放大得到的圖像塊L2 也放入RAM 中,逐點(diǎn)掃描L2 中像素?cái)?shù)據(jù),設(shè)當(dāng)前點(diǎn)為IL2(i,j),確定3×3 的待匹配塊match,計(jì)算在RAM 中的地址從RAM 中讀取出數(shù)據(jù)。
與此同時(shí)地址映射模塊根據(jù)圖像的映射關(guān)系計(jì)算出L1中對(duì)應(yīng)圖像塊的中心點(diǎn)坐標(biāo)IL2(e,f),在L1 對(duì)應(yīng)坐標(biāo)中心點(diǎn)周圍4×4 的搜索窗內(nèi)對(duì)每一點(diǎn)進(jìn)行3×3 的塊的SAD 計(jì)算尋找匹配塊,取其中的SAD 值最小的(e,f)作為匹配塊的中心位置。然后計(jì)算H1RAM 中的匹配塊的地址取出H1 中對(duì)應(yīng)的高頻分量數(shù)據(jù)。重復(fù)以上過程得到超分辨率圖像的高頻圖像數(shù)據(jù)。將放大圖像L2 的數(shù)據(jù)與超分辨率圖像高頻數(shù)據(jù)H2 相加得到超分辨率圖像塊I2 的數(shù)據(jù)并且存入RAM 中,完成一次超分辨率。
整個(gè)設(shè)計(jì)將圖像分為16×16 的塊,對(duì)于不同的視頻圖像帶寬也會(huì)不一樣,下面分析將1 080p 放大到4K 圖像的帶寬。對(duì)于每一個(gè)16×16 的塊,每個(gè)塊每一輪運(yùn)算約耗費(fèi)100個(gè)clk。
1 080p 放大到4k×2k@60 Hz,YUV422,block 總數(shù)為
總時(shí)鐘頻率為
內(nèi)存讀取帶寬(10 bit 視頻)為
內(nèi)存寫入帶寬(10 bit 視頻)為
采用Kintex7-325T 芯片,使用Verilog[4]語言實(shí)現(xiàn),使用ISE 對(duì)于整個(gè)驗(yàn)證系統(tǒng)綜合得到資源使用情況如表2 所示,完成了設(shè)計(jì)的實(shí)現(xiàn)和驗(yàn)證。驗(yàn)證系統(tǒng)經(jīng)HDMI 接口實(shí)時(shí)輸入1 080p@25 Hz,YUV422 的視頻,經(jīng)過視頻超分辨率引擎后通過HDMI 接口實(shí)時(shí)輸出4K@25 Hz,YUV422 的視頻到顯示器端進(jìn)行顯示。
內(nèi)核的時(shí)鐘頻率為111.375 MHz,DDR3 的時(shí)鐘頻率為200 MHz。對(duì)于每一個(gè)16×16 的塊,每一輪的超分辨率運(yùn)算約耗費(fèi)100 個(gè)clk。對(duì)于1 080p@25 Hz,YUV422 的視頻,block 總數(shù)為
表2 系統(tǒng)FPGA 資源使用情況
為達(dá)到實(shí)時(shí)處理的要求,理論上需要的時(shí)鐘頻率ftheory為
這表明現(xiàn)在的設(shè)計(jì)能夠滿足實(shí)習(xí)處理的要求。
對(duì)于內(nèi)存讀取帶寬(10 bit 視頻)為
內(nèi)存寫入帶寬(10 bit 視頻)為
對(duì)于本設(shè)計(jì)的DDR3,在頻率為200 MHz 情況下的理論帶寬Bandwidth 為
系統(tǒng)驗(yàn)證平臺(tái)及結(jié)果見圖6。
圖5 FPGA 驗(yàn)證系統(tǒng)(照片)
本文給出了基于自相似性原理的超分辨率算法的FPGA實(shí)現(xiàn),對(duì)于視頻圖像進(jìn)行分塊的處理,給出了硬件設(shè)計(jì)的整體框架,并詳細(xì)地?cái)⑹隽烁髂K的功能和設(shè)計(jì),最后在Xilinx 的K7 FPGA 進(jìn)行了硬件驗(yàn)證。在現(xiàn)有的設(shè)計(jì)下實(shí)現(xiàn)了1 080p@25 Hz,YUV422 視頻到4K@25 Hz,YUV422 視頻的實(shí)時(shí)超分辨率。
該算法在FPGA 上實(shí)現(xiàn)了從高清到超高清的實(shí)時(shí)超分辨率處理,并且取得了很好的主觀效果,并且該設(shè)計(jì)有很大的靈活性,根據(jù)不同的視頻圖像超分辨率需求進(jìn)行配置;缺點(diǎn)是對(duì)于低質(zhì)量的視頻圖像的超分辨率可能會(huì)強(qiáng)化圖像的噪點(diǎn),可以考慮在處理完之后再進(jìn)行去噪處理。
[1]KEYS R G. Cubic convolution interpolation for digital image processing[J].IEEE Trans. Acoustics Speech&Signal Processing,1981,29(6):1153-1160.
[2]FREEDMAN G,F(xiàn)ATTAL R.Image and video upscaling from local self-examples[J].ACM Trans.Graphics,2011,30(2):474-484.
[3]JIANG H,CONG Z,GAO Z,et al.Image super-resolution with facet improvement and detail enhancement based on local self examples[C]//Proc.2013 International Conference on Wireless Communications& Signal Processing (WCSP).[S. l.]:IEEE Press,2013:1-6.
[4]PALNITKAR S. Verilog HDL 數(shù)字設(shè)計(jì)與綜合[M].2 版.夏聞?dòng)?,譯.北京:電子工業(yè)出版社,2009.