龍芬
摘要摘要:采用雙線性插值和最近鄰域插值兩種算法,設(shè)計了一種實(shí)用的視頻圖像縮放器。該縮放器以較短延遲的方式改變視頻流大小,在需要配置的參數(shù)中,數(shù)據(jù)寬度、顏色通道以及最大視頻分辨率可在編譯前配置好,輸入輸出分辨率、縮放因子以及大小改變類型等參數(shù)可實(shí)時配置。
關(guān)鍵詞關(guān)鍵詞:圖像插值;視頻縮放;Verilog HDL
DOIDOI:10.11907/rjdk.171017
中圖分類號:TP319
文獻(xiàn)標(biāo)識碼:A文章編號文章編號:16727800(2017)005009303
0引言
隨著科技的進(jìn)步,顯示設(shè)備得到快速發(fā)展,特別是移動手持終端設(shè)備使得多媒體資源越來越豐富,格式多種多樣。但各種顯示設(shè)備支持的分辨率、幀率、刷新率等參數(shù)動態(tài)范圍較小,基本為固定的幾種模式,如電腦顯示器的刷新頻率一般為75Hz,而常見的消費(fèi)類視頻源信號刷新頻率一般為25或29.97幀/秒, DVD和DTV源素材可能僅僅是24幀/秒[1]。為了有效解決視頻圖像數(shù)據(jù)和顯示設(shè)備之間這一矛盾,必須進(jìn)行視頻的后期處理,即運(yùn)用現(xiàn)代數(shù)字信號處理技術(shù),在數(shù)字域內(nèi)對視頻信號進(jìn)行各種數(shù)學(xué)運(yùn)算。視頻信號在不同的顯示終端顯示時需要進(jìn)行縮放處理,而縮放質(zhì)量的好壞會直接影響到視頻播放質(zhì)量。
1圖像插值
實(shí)際操作中主要使用圖像插值來完成數(shù)字圖像縮放,因此圖像質(zhì)量和失真情況很大程度上依賴于插值算法的好壞。數(shù)字圖像的插值處理一般要滿足兩個條件:①圖像在插值像素點(diǎn)的值在二維空間是一個連續(xù)曲面;②在源圖像的采樣點(diǎn),由插值計算得出的運(yùn)算結(jié)果與源圖像的值相等[2]。本設(shè)計主要采用雙線性插值法和最鄰近插值法。
1.1雙線性插值法
雙線性插值法又稱為一階插值法,通過空間幾何變換分析,找出與目標(biāo)像素最鄰近的4個源圖像像素點(diǎn),利用對這4個點(diǎn)的像素值進(jìn)行加權(quán)運(yùn)算得出目標(biāo)像素值,每個鄰近點(diǎn)的權(quán)值與插值點(diǎn)距該鄰近點(diǎn)的距離成反比[3]。假定一個目標(biāo)像素點(diǎn)通過反向變換得到的插值點(diǎn)浮點(diǎn)坐標(biāo)為(i+Δu,j+Δv),其中i、j為非負(fù)整數(shù),Δu、Δv為區(qū)間[0,1]內(nèi)的浮點(diǎn)數(shù),源圖像中坐標(biāo)為(i,j),(i+1,j),(i,j+1),(i+1,j+1)所對應(yīng)的最鄰近4個像素值即可決定目標(biāo)像素點(diǎn)的值。
f(i+Δu,j+Δv)=(1-Δu)(1-Δv)f(i,j)+Δu(1-Δv)f(i+1,j)+(1-Δu)Δvf(i,j+1)+ΔuΔvf(i+1,j+1)(1)
如果目標(biāo)像素點(diǎn)經(jīng)過空間變換正好處在4個源像素點(diǎn)的正中間,那么它的值就是源圖像與之相鄰近的4個像素值的平均[4]。
1.2最近鄰域插值法
最近鄰域插值法又稱為零階插值法,此方法計算灰度及色度插值最簡單,只需考慮距離目標(biāo)像素點(diǎn)最近的一個源圖像像素,直接采用離插值位置最近的源像素值進(jìn)行插值[5]。通過空間幾何變換得到插值點(diǎn)的浮點(diǎn)坐標(biāo),該插值點(diǎn)像素值即等于它最鄰近源像素點(diǎn)的值。使用最近鄰域插值法等價于源圖像像素與矩形函數(shù)在空間域進(jìn)行卷積運(yùn)算[6]。
2視頻縮放器IP核架構(gòu)
本視頻縮放器系統(tǒng)框圖如圖1所示,主要由RAMFIFO、RAM填充控制、讀控制以及數(shù)據(jù)合成控制等模塊組成。
其中,RAM FIFO(RFIFO)是數(shù)據(jù)緩沖模塊,也是各種控制操作的核心。除了數(shù)據(jù)的輸入輸出是連接到塊RAM以外,RAM的操作主要利用FIFO結(jié)構(gòu)完成。RAM需要提供單寫雙讀端口控制,每個讀端口同時讀數(shù)據(jù)。若選擇雙線性插值算法,伴隨著串行的視頻行寫RAM操作,需要為雙線性插值準(zhǔn)備4個輸出值。RAM填充邏輯模塊負(fù)責(zé)根據(jù)系統(tǒng)配置來決定哪些輸入數(shù)據(jù)需要推入到RFIFO中,哪些輸入數(shù)據(jù)需要丟棄[7]。所有被輸出部分使用的行數(shù)據(jù)寫到FIFO中,而未被輸出部分使用的行則丟棄。讀控制模塊為RFIFO的RAM端口提供地址驅(qū)動和讀使能,并推動RFIFO的讀端口輸出新的視頻行, RFIFO讀出4個像素插值的混合值。數(shù)據(jù)合成控制模塊取混合值X Blend與Y Blend并產(chǎn)生4個系數(shù),將系數(shù)與從RFIFO中讀到的4個像素值相乘之后求和,得到輸出數(shù)據(jù)。而在最近鄰域算法模式中,只有一個值為1.0的系數(shù),其余的值為0.0,以上產(chǎn)生的值都基于混合值X Blend與Y Blend。
3視頻縮放器工作流程
視頻縮放器采用Verilog HDL語言實(shí)現(xiàn),在每個視頻幀開始時,起始信號start由用戶邏輯來聲明,最小為一個時鐘周期,這將在上一幀之后復(fù)位縮放器模塊。接著縮放器可以在數(shù)據(jù)輸入端口讀取視頻流數(shù)據(jù)。一旦讀取了足夠的數(shù)據(jù)就可以出現(xiàn)在輸出端口。輸入數(shù)據(jù)以標(biāo)準(zhǔn)的光柵掃描方式從左上角像素開始向右下角像素掃描讀取數(shù)據(jù),有效的視頻數(shù)據(jù)能通過縮放器。
控制信號指定哪些輸入數(shù)據(jù)是有效的。
控制信號在系統(tǒng)工作(讀寫數(shù)據(jù))時不能改變,如果改變會破壞一幀的數(shù)據(jù)輸出,控制信號的改變應(yīng)該在讀出完成之后下一幀起始信號出現(xiàn)之前這段時間。
下面以視頻圖像分辨率放大操作為例闡述視頻縮放器工作流程。
3.1數(shù)據(jù)輸入輸出
數(shù)據(jù)輸入輸出時序波形如圖2所示,在start信號之前可由用戶邏輯設(shè)置控制信號。在幀開始讀數(shù)據(jù)之前,用戶邏輯需要置位start信號一個或幾個時鐘周期。縮放器讀行數(shù)據(jù)直到緩沖區(qū)滿為止。如果控制信號指定丟棄,則輸入數(shù)據(jù)將在緩沖區(qū)填滿之前丟棄。讀入兩行后,就可以在dOut上讀到數(shù)據(jù)。為了避免提前讀數(shù)據(jù),dOutValid將一直保持低電平,直到數(shù)據(jù)有效為止。在已處理的幀被讀出之后,從縮放器連續(xù)讀數(shù)據(jù)是安全的,也不會導(dǎo)致讀入額外的數(shù)據(jù)。
3.2寫數(shù)據(jù)到dIn
寫數(shù)據(jù)到dIn波形如圖3所示。用戶邏輯用dInValid信號維持有效原始數(shù)據(jù)。nextdIn是縮放器應(yīng)答dIn的信號。當(dāng)nextdIn為高電平且dInValid有效時,用戶邏輯改變dIn到下一個值。
3.3從dOut讀數(shù)據(jù)
從dOut讀數(shù)據(jù)波形如圖4所示,用戶邏輯用nextDout請求從縮放器讀出數(shù)據(jù)。如果RFIFO數(shù)據(jù)讀完,則dOutValid將保持低電平直到緩沖區(qū)足夠滿為止。注意,從請求信號nextDout到數(shù)據(jù)出現(xiàn)在dOut總線上有4個時鐘周期延遲。
3.4輸出行切換
在輸出視頻行末尾,dOutValid將變低一個時鐘周期,以允許RFIFO切換RAMs,如果用戶邏輯在完成一行讀出之后(此時為實(shí)際顯示時的水平消隱期)使nextdOut低,dOutValid的這個跳躍周期將發(fā)生在nextdOut較低期間,不會被用戶邏輯捕捉。
如輸出視頻行的最后像素是D9,則有如圖5所示波形。
3.5控制信號
本設(shè)計的主要操作由控制信號模塊控制。若從較小的Y方向輸入分辨率切割,則由inputDiscardCnt設(shè)定,而較大的切割通過改變輸入到縮放器的數(shù)據(jù)來完成。inputDiscardCnt像素會讀入,但在圖像的開始處被丟棄。輸入分辨率信號(inputXRes,inputYRes,outputXRes,outputYRes)告知縮放器如何插值及輸出像素流。這些值必須設(shè)置為像素流分辨率-1??s放比例通過xScale及yScale控制。視頻通過1/xScale和1/yScale放大。
4測試
為了更好地讀取和顯示raw文件,采用MATLAB進(jìn)行raw文件與bmp文件轉(zhuǎn)換,以方便對縮放器處理之后的數(shù)據(jù)進(jìn)行測試,并查看到由視頻縮放器處理之后的圖像效果。
測試前先對軟件進(jìn)行例化,以便對不同大小的輸入輸出圖像進(jìn)行處理。測試軟件包括縮放器的例化、部分參數(shù)設(shè)置、工作時鐘產(chǎn)生、raw文件數(shù)據(jù)的讀寫等。采用ModelSim軟件進(jìn)行仿真測試,仿真波形如圖6所示。
5結(jié)語
本設(shè)計針對圖像處理中的縮放問題,提出了雙線性插值和最近鄰域插值的圖像縮放器結(jié)構(gòu)。系統(tǒng)采用Verilog HDL語言加以實(shí)現(xiàn),經(jīng)過MATLAB對處理后的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,仿真測試采用ModelSim軟件實(shí)現(xiàn)。測試結(jié)果表明該設(shè)計思路能滿足視頻質(zhì)量要求,具有一定的可移植性,為高清圖像視頻縮放器的后續(xù)研究提供一定的參考價值。
參考文獻(xiàn)參考文獻(xiàn):
[1]李然.視頻圖像縮放算法的研究與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2012.
[2]呂榮國,蔣林,楊飛.圖像縮放的研究與FPGA設(shè)計[J].計算機(jī)技術(shù)與發(fā)展,2011(12):205208.
[3]張洋.基于雙線性插值法的圖像縮放算法的設(shè)計與實(shí)現(xiàn)[J].電子設(shè)計工程,2016(3):169170.
[4]鄧林華,柳光乾.基于插值算法的圖像縮放的應(yīng)用研究[J].微計算機(jī)信息,2010(31):2324.
[5]汪穎,陳濤.視頻圖像縮放的設(shè)計及實(shí)現(xiàn)[J].電視技術(shù),2004(6):3638.
[6]陳錦華.數(shù)字視頻信號縮放器的設(shè)計及芯片實(shí)現(xiàn)[D].上海:復(fù)旦大學(xué),2008.
[7]胡小龍,馮彬.基于FPGA的高分辨實(shí)時監(jiān)控圖像縮放設(shè)計[J].液晶與顯示,2009(12):882885 .
責(zé)任編輯(責(zé)任編輯:杜能鋼)