嚴(yán) 飛,陸寶毅,劉銀萍,劉卿卿,2,陳 偉
(1.南京信息工程大學(xué) 自動化學(xué)院,江蘇 南京 210044;2.江蘇省大氣環(huán)境與裝備技術(shù)協(xié)同創(chuàng)新中心,江蘇 南京 210044;3.南京信息工程大學(xué) 大氣物理學(xué)院,江蘇 南京 210044)
數(shù)字視頻具有數(shù)據(jù)量大,實時性高等特點,如果數(shù)字視頻的處理僅僅依靠軟件算法來實現(xiàn),那么對軟件和CPU的計算能力都有較高的要求,但用硬件的方式來實現(xiàn)的話,在處理速度以及效果上都優(yōu)于前者[1]。并且在算法優(yōu)化已經(jīng)無法提高計算速度的前提下, 將部分單一、耗時的圖像處理操作用硬件來實現(xiàn)可以有效地提高算法的速度[2-5]。目前處理數(shù)字圖像常用的視頻縮放算法分別是最鄰近插值算法(Nearest interpolation),雙線性內(nèi)插值算法(Bilinear interpolation)以及雙三次插值(Bicubic interpolation)。相較于前兩種縮放算法,雙三次插值算法得出比前兩種插值算法更加平滑的圖像信息。
隨著顯示器的分辨率越來越多樣化,原有的一些視頻格式越來越滿足不了多樣化的顯示器分辨率,故需要采用相應(yīng)的視頻縮放模塊將視頻源的分辨率轉(zhuǎn)換為對應(yīng)顯示器的分辨率[6]。目前的視頻流縮放系統(tǒng)一般是基于雙線性內(nèi)插值算法進行設(shè)計,且進行縮放比例是固定倍率,這樣的系統(tǒng)的縮放圖像信息的缺失較大,且不能靈活地配置縮放信息[7-8]。本文設(shè)計了一種實時視頻流縮放系統(tǒng)設(shè)計,采用了雙三次插值的縮放算法,實現(xiàn)了視頻圖像的任意比例的縮放,且易于硬件實現(xiàn)。
圖1 實時視頻縮放系統(tǒng)硬件組成Fig.1 Hardware composition of real-time video stream scaling system
實時視頻流縮放系統(tǒng)包括兩路OV5640視頻輸入接口、DDR3存儲模塊、VGA輸出接口以及外圍電路(電源電路、配置電路和時鐘電路)模塊。系統(tǒng)的硬件組成如圖1所示,其中采用由兩個OV5640攝像頭模塊組成的OV5642模塊模擬實時的視頻流的輸入。
系統(tǒng)支持最大分辨率3 840×2 160的實時視頻流的輸入和最低分辨率100×100的視頻數(shù)據(jù)的輸出。系統(tǒng)主控芯片使用的型號為xc7a100tfgg488-2的一款FPGA,屬于Xilinx公司ARTIX7系列。
首先,F(xiàn)PGA配置OV5642分別輸出兩個分辨率為2 592×1 944的視頻,然后將輸出的視頻分別進入雙三次插值運算模塊進行縮放計算。當(dāng)FPGA檢測到有雙三次插值運算有計算結(jié)果即有實時的有效數(shù)據(jù)時,控制DDR3外部存儲將輸入的視頻緩存下來等待后端VGA模塊讀取數(shù)據(jù)進行顯示,由于有兩路的縮放視頻流,所以設(shè)計一個PIP(Picture in picture畫面疊加)模塊,讓縮放成不同分辨率的視頻數(shù)據(jù)在一個分辨率為1 920×1 080的顯示屏上進行疊加顯示,由于采集的數(shù)據(jù)為RGB格式,在進行視頻疊加時需要轉(zhuǎn)換為YUV格式進行疊加。圖像處理的流程如圖2所示。
圖2 本文圖像處理流程Fig.2 Image processing diagram of this paper
該系統(tǒng)采用模塊化的設(shè)計思路,主要包括:實時視頻流采集模塊,視頻流處理模塊以及視頻疊加輸出模塊。其中視頻流處理模塊又包括圖像的雙三次插值縮放模塊和圖像緩存模塊。
雙三次插值需要用一個4×4的模板進行計算,故需要提前準(zhǔn)備緩存至少4行的數(shù)據(jù)[9-10],為了能夠有足夠的數(shù)據(jù),且避免RAM出現(xiàn)不夠用,造成輸入和輸出不實時同步的情況,本設(shè)計用了8個RAM分別緩存了8行的數(shù)據(jù)進行乒乓操作,且為了方便進行讀寫操作,本次設(shè)計采用了分布式RAM(Distributed memory)。如圖3所示,每當(dāng)緩存一行數(shù)據(jù)結(jié)束后便有一個計數(shù)器進行計數(shù),當(dāng)寫到一行的最后一位且輸入數(shù)據(jù)有效且該計數(shù)器的值小于8時,則換一個RAM進行緩存下一行的數(shù)據(jù)。每計算出目標(biāo)圖像的一行數(shù)據(jù),需要取出源圖像的4行像素數(shù)據(jù),當(dāng)已經(jīng)緩存了4行及以上的視頻數(shù)據(jù)時便開始進行讀操作。所示每當(dāng)處理到一行的最后一個像素數(shù)據(jù)時則需要進行新的一行或者多行的數(shù)據(jù)。如果目標(biāo)圖像的下一行對應(yīng)的源圖像的行數(shù)與當(dāng)前計算的行數(shù)相差一行,則在計算目標(biāo)圖像的下一個行的輸出時只要從已經(jīng)緩存源圖像的行數(shù)據(jù)中讀取新的一行即可。但是如果目標(biāo)圖像的下一行對應(yīng)的源圖像的行數(shù)與當(dāng)前計算的行數(shù)相差大于等于4行,即檢測到RAM中緩存的行數(shù)不夠時,將停止讀操作,等待RAM中緩存的行數(shù)足夠一次運算,繼續(xù)進行讀取和計算操作。
圖3 實時視頻緩存流程圖Fig.3 Real-time video buffer flow chart
雙三次插值的主要計算是參加運算的16個像素的影響因子即權(quán)值的計算[11]。為了方便標(biāo)注,將16個像素的位置編號為a00,a01……a33,首先我們要求出這16個像素分別與目標(biāo)圖像待求的像素之間的位置關(guān)系,這里設(shè)目標(biāo)圖像對應(yīng)的源圖像的位置是P(x+u,y+v),其中u和v是小數(shù)部分,則a00的地址可以表示成(1+u,1+v),a01可以表示為(u,1+v)……。
圖4 a00位置行列系數(shù)處理流程Fig.4 Processing flow of a00 location row and column coefficient
如圖4所示,a00的地址為(1+u,1+v)將該地址的行坐標(biāo)和列坐標(biāo)分辨帶入插值基函數(shù)coef(aij)中則可以的得a00在行方向和列方向的對應(yīng)系數(shù)。因為插值基函數(shù)coef(aij)中存在著多個單流向的乘法處理單元,本設(shè)計采用了流水線的設(shè)計方法來提升了系統(tǒng)的工作效率,其中value0,value1,value2代表插值基函數(shù)coef(aij)中的系數(shù)。同理,我們可以得到其他15個像素在行和列的系數(shù)。
計算完各個像素點的影響因子用每個點的像素值乘以其對應(yīng)的影響因子,得到16個值相加便是目標(biāo)像素點的像素值。如圖5所示,在計算像素權(quán)值時a00,a03,a11,a12,a21,a22,a30,a33的權(quán)值是正數(shù),其他的像素點的像素值是負(fù)數(shù),所以在計算像素點值時需要先分開計算正數(shù)和負(fù)數(shù),其中dOut_add_0和dOut_add_1是16個像素中部分正數(shù)的和,dOut_sub_0和dOut_sub_1是部分負(fù)數(shù)的和,dOut_add是所有正數(shù)的和,dOut_sub是所有負(fù)數(shù)的和,dOut_sum是加權(quán)和,利用正數(shù)部分減去負(fù)數(shù)部分或者是負(fù)數(shù)部分減去整數(shù)部分(不算符號位)。由于整個算法中浮點數(shù)的產(chǎn)生[12],在計算初便將參與計算的數(shù)值(二進制)左移8位,所以在最終需要對最終的結(jié)果右移8位,dOut_shift便是對算出的加權(quán)和進行右移8位的操作。由于像素的值區(qū)間在0和255之間,如果輸出的像素值如果大于255便只取其七八位。
圖5 目標(biāo)像素點值計算仿真圖Fig.5 Simulation diagram of target pixel point value computation
DDR3的讀寫控制采用的是XILINX提供的MIG(Memory Interface Generator)IP核控制方案,MIG IP核控制方案位用戶提供了兩種接口總線控制模式,一種是NATIVE總線控制模式,一種是AXI4總線模式。相對與NATIVE總線控制模式,AXI4的讀寫控制時序比較復(fù)雜,且NATIVE控制總線也可以通過邏輯控制擴展多個讀寫端口,因此,本文選擇NATIVE接口總線作為本次設(shè)計的控制方案[13-16]。
如圖6所示,在NATIVE總線下的寫操作包括寫請求、寫數(shù)據(jù)、寫響應(yīng)。在DDR準(zhǔn)備好寫入數(shù)據(jù)(app_wdf_rdy = 1)的前提下,當(dāng)有寫請求(app_wdf_wren = 1)時,便開始一次寫DDR操作,將提前準(zhǔn)備好的數(shù)據(jù)寫入DDR中對應(yīng)的地址中。同樣,在NATIVE總線下的讀操作包括讀請求、讀數(shù)據(jù)、讀響應(yīng)。在DDR準(zhǔn)備好進行讀操作(app_wdf_rdy ≠ 1)且不在進行讀操作(app_wdf_wren = 1)的前提下,當(dāng)有寫請求(app_rd_data_valid = 1)時,便開始一次讀DDR操作,將數(shù)據(jù)從DDR中對應(yīng)的地址中讀出來。
圖6 Native總線下DDR讀寫操作Fig.6 DDR read-write operation under native bus
由于OV5642同時輸出兩路的2 592×1 944的視頻數(shù)據(jù),所以需要同時將這兩路視頻數(shù)據(jù)存入DDR3中,并且在后端也同樣需要同時將視頻數(shù)據(jù)從DDR3中讀出來進行縮放操作。
在程序設(shè)計時開辟了兩個通道進行讀寫操作。如圖7所示,在進行讀操作時,對兩個端口進行依次循環(huán)查詢其狀態(tài)信息,如果通道0有讀請求并且該通道的突發(fā)讀的長度不為0,進入通道0的讀操作,否則對通道1進行查詢。同樣,如果通道1有讀請求并且該通道突發(fā)讀的長度不為0,進入通道1的讀操作。
圖7 讀操作查詢流程Fig.7 Read operation query process
圖8 讀操作查詢流程Fig.8 Write operation query process
如圖8所示,在進行寫操作時,與讀操作相似,也是對每個端口進行查詢其狀態(tài)信息,若是通道0有寫請求則進入通道0的寫操作,否則對通道1進行查詢。為了避免輸出圖像變形的情況,本設(shè)計采用乒乓操作,讓DDR3的讀操作和寫操作分別在不同的BANK進行。
畫面疊加是將已經(jīng)縮放完成的視頻在一個1 920×1 080的畫布上顯示。通常一幀圖像分為有效區(qū)域和消隱區(qū)域[17],其中我們在顯示屏上看見的區(qū)域即有效區(qū)域。由于圖像是逐行掃描的,所以在到達需要顯示圖像的區(qū)域時從DDR中讀出相應(yīng)的數(shù)據(jù)顯示。
如圖9所示,在第一幅圖片的顯示有效區(qū)域時,產(chǎn)生讀信號從DDR的對應(yīng)位置中取出數(shù)據(jù)進行顯示,同樣在第二幅圖顯示有效區(qū)域時,產(chǎn)生讀信號從DDR中讀出數(shù)據(jù)進行顯示。
圖9 畫面疊加原理仿真Fig.9 Simulation of picture superposition principle
本設(shè)計的目的是為了滿足一些不是常規(guī)分辨率的顯示器,所以在上板測試時設(shè)置是將2 592×1 944分辨率的視頻圖像分別縮放至731×731和1 920×1 080。如圖10所示,顯示屏幕的背景是1 920×1 080分辨率的視頻圖像,前端窗口顯示的是731×731分辨率的視頻圖像。滿足任意比例的縮放效果。
圖10 雙三次插值算法在FPGA上實現(xiàn)效果圖Fig.10 Implementation of bicubic interpolation algorithms on FPGA
實驗結(jié)果表明,基于FPGA的雙三次插值圖像縮放系統(tǒng)能夠支持3 840×2 160的圖像進行任意比例的縮放。實際板上驗證時視頻流從ov5642輸入,經(jīng)過縮放、緩存、同步以及拼接等多個處理過程,最終通過VGA接口輸出至支持1080P的顯示器上。驗證系統(tǒng)所采用的硬件平臺是xc7a100tfgg488-1,如表1所示,其消耗的LUT(Look Up Table, 查找表)資源占FPGA總資源的69.9%,由于本設(shè)計的行緩存所消耗的片上資源LUTRAM,所以LUTRAM資源的占用為76.16%,在DDR讀寫部分用到了時鐘域的轉(zhuǎn)換,采用的是消耗BRAM資源的FIFO,BRAM資源的占用為26.3%,用來縮放計算的DSP資源占用為60.42%。
表1 FPGA資源利用情況
提出了一種實時視頻流縮放系統(tǒng)的硬件結(jié)構(gòu)設(shè)計,基于雙三次插值圖像算法,采用流水線的設(shè)計思路對算法的浮點運算進行優(yōu)化,采用乒乓操作的思想避免了視頻流輸入與輸出不同步的情況,減少了計算延時,易于FPGA的實現(xiàn),在提高系統(tǒng)的運算速度的同時減少了對硬件資源的消耗,并在VIVADO環(huán)境中對該設(shè)計進行測試驗證,實現(xiàn)了任意比例縮放。經(jīng)實際驗證,該實時視頻流縮放系統(tǒng)設(shè)計支持最高3 840×2 160分辨率的視頻輸入,最低支持縮放至100×100分辨率輸出,能夠滿足需要特殊分辨率的顯示屏的需求。