張曉晶
摘要:利用Altera公司CycloneⅢ系列的FPGA作為主控芯片,通過VHDL語言編程,設(shè)計(jì)實(shí)現(xiàn)了一個實(shí)時的視頻縮放系統(tǒng)。本文將雙線性插值算法分解成兩個一維插值算法,先實(shí)現(xiàn)行方向的插值,再實(shí)現(xiàn)列方向的插值,大大簡化了FPGA實(shí)現(xiàn)視頻縮放的處理過程。實(shí)驗(yàn)結(jié)果表明,處理后圖像無明顯鋸齒現(xiàn)象,達(dá)到了預(yù)期效果。
關(guān)鍵詞:圖像縮放;雙線性插值;FPGA
中圖分類號:TP391.41 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2019)11-0118-02
0 引言
實(shí)時視頻處理是圖像處理領(lǐng)域的研究熱點(diǎn)之一,廣泛應(yīng)用于可視電話、視頻會議,監(jiān)控、通信等領(lǐng)域中。圖像縮放又是圖像處理的一個基本問題,隨著顯示器分辨率的提高,原有的視頻源需要采用視頻縮放的方法才可以在不同的顯示器中逐點(diǎn)顯示。本文基于FPGA實(shí)現(xiàn)了一個實(shí)時視頻處理系統(tǒng)。FPGA的優(yōu)點(diǎn)在于其靈活的可編程性和強(qiáng)大的并行處理能力,可以把很多圖像處理功能集成在一個FPGA芯片上,這里主要闡述基于FPGA的視頻縮放的實(shí)現(xiàn)??s放采用的幾何變換是雙線性內(nèi)插法。
1 系統(tǒng)整體設(shè)計(jì)
本系統(tǒng)的硬件需求如:FPGA型號為EP3C55F484,A/D芯片TVP5150,D/A芯片ADV7123和ADV7171,兩塊16bit數(shù)據(jù)線的SRAM。系統(tǒng)板如圖1所示。
1.1 信號采集
在系統(tǒng)前端,先利用攝像頭取得光學(xué)圖像。攝像頭的輸出為一路PAL制復(fù)合視頻信號,完成光信號到模擬電信號的轉(zhuǎn)變。之后通過TVP5150視頻解碼芯片將模擬信號轉(zhuǎn)變?yōu)閿?shù)字信號。利用FPGA對TVP5150進(jìn)行I2C配置,選擇輸出格式為ITU-RBT.656,即時鐘頻率為27mhz的4:2:2取樣格式的YCrCb信號。
1.2 場解碼
一幀完整的PAL制式ITU-RBT656數(shù)據(jù)分為奇偶兩場,23-311行為偶數(shù)場有效數(shù)據(jù),366-624行為奇數(shù)場有效數(shù)據(jù),其余為行場控制信號或無效數(shù)據(jù)。每行前288byte為行控制信號,其中最前面的4byte為EAV (有效視頻結(jié)束)信號,最后面的4byte是SAV(有效視頻起始)信號[1]。
EAV信號和SAV信號均有3byte的前導(dǎo):FF,00,00。最后1byte為XY。F為奇偶標(biāo)志位,V為垂直消隱標(biāo)志位,H為水平消隱標(biāo)志位,P3,P2,P1,P0為保護(hù)比特位。首先通過連續(xù)判斷FF,00,00和XY來進(jìn)行F、V、H的提取與檢測。若H為0,即為SAV,再去判斷F,若F為0,即為奇數(shù)場,若F為1,即為偶數(shù)場。每當(dāng)F從1跳變到0,則為一幀的幀頭。之后去判斷V,若V為0,則為場正程。由于我們只處理有效數(shù)據(jù),所以在檢測到幀頭的情況下,若H=0且V=0,則此行為有效數(shù)據(jù)。
1.3 幀緩存
因?yàn)镮TU-RBT.656是隔行數(shù)據(jù),需要利用兩塊SRAM進(jìn)行乒乓存儲實(shí)現(xiàn)逐行與隔行之間的轉(zhuǎn)換。在本實(shí)驗(yàn)的設(shè)計(jì)中,將以一幀數(shù)據(jù)為單位進(jìn)行存儲。當(dāng)向SRAM1中寫當(dāng)前幀時,讀的是SRAM2中存儲的前一幀,當(dāng)SRAM1中存好一幀后,才會進(jìn)行乒乓切換,讀取SRAM1中的數(shù)據(jù)。
一幀中的有效數(shù)據(jù)為720×576個像素,開始時寫地址指針位于(0,78),當(dāng)檢測到幀頭且H=0、V=0后,第一行有效數(shù)據(jù)的SAV中的FF、00會寫入(0,78),隨后的00、XY會寫入(0,79),隨后的第一個有效像素會被寫入(0,80),第一行的最后一個像素寫入(0,719)。由于需要逐行變隔行,而進(jìn)來的下一行數(shù)據(jù)依舊為奇數(shù)場,所以寫地址的指針跳轉(zhuǎn)到(2,78),然后重復(fù)第一行的存儲方式。存儲時,若發(fā)現(xiàn)SAV中的F從0跳變到1時,意味著奇數(shù)場結(jié)束,進(jìn)來的將是偶數(shù)場的數(shù)據(jù),寫地址指針將跳到(1,78),進(jìn)行偶數(shù)場的存儲。當(dāng)F從1跳變到0,即為新的一幀幀頭,寫地址指針會重新位于(0,78),如此循環(huán),周而復(fù)始[2]。
2 雙線性插值的圖像縮放在FPGA上實(shí)現(xiàn)
2.1 雙線性內(nèi)插法
雙線性插值是利用圖像像素點(diǎn)周圍四個點(diǎn)的相關(guān)性,即目標(biāo)坐標(biāo)的像素值f(i+u,j+v)是由原圖像中四個坐標(biāo)分別為(i,j),(i+1,j),(i,j+1)和(i+1,j+1)的像素值決定。公式為:f(i+u,j+v)=(1-u)(1-v)f(i,j)+(1-u)vf(i,j+1)+u(1-
這是一個二維算法,既要考慮圖像行的信息又要考慮列的信息。本文為了FPGA編程實(shí)現(xiàn)的簡單,把二維插值算法分解為兩個一維插值算法:
(1)先進(jìn)行行方向上的插值:
在數(shù)據(jù)存入時實(shí)現(xiàn)行插值算法,然后數(shù)據(jù)存入RAM中,在數(shù)據(jù)讀出時實(shí)現(xiàn)列插值算法,從而大大簡化了FPGA實(shí)現(xiàn)雙線性插值的過程。
2.2 縮放算法在FPGA上實(shí)現(xiàn)
基于FPGA實(shí)現(xiàn)圖像縮放時,無論是逆向映射方式還是順向映射方式??刂颇K的設(shè)計(jì)都比較復(fù)雜。為了發(fā)揮FPGA的優(yōu)勢,降低設(shè)計(jì)難度。本文把圖像縮放過程設(shè)計(jì)為一個單元體的循環(huán)過程。在單元體內(nèi)部,可以事先計(jì)算出縮放的比例系數(shù)。例如,把每行720個像素.放大到768個像素,相當(dāng)于每輸入15個像素,輸出16個像素。此時可以把15個像素作為一個單元體.事先計(jì)算出每個輸入像素周期的系數(shù),在FPGA中設(shè)計(jì)一個包含15種情況的狀態(tài)機(jī)即可。各種圖像縮放倍率情況下,相應(yīng)個數(shù)的輸入像素都可以作為一個合適的單元體[3]。
3 實(shí)驗(yàn)結(jié)果
通過以上步驟,完成了各個系統(tǒng)模塊的設(shè)計(jì),實(shí)現(xiàn)了攝像頭采集視頻的實(shí)時縮放顯示,結(jié)果如圖2、3、4所示。
4 結(jié)語
本文實(shí)現(xiàn)了基于FPGA的視頻縮放系統(tǒng),整個系統(tǒng)分為場解碼模塊、4:2:2到4:4:4模塊、幀緩存(乒乓存儲)模塊和縮放插值模塊,通過將二維雙線性插值分解成兩次一維插值,大大簡化了FPGA的設(shè)計(jì)過程。實(shí)驗(yàn)結(jié)果表明了本方法的可行性。
參考文獻(xiàn)
[1] 張虎軍.基于FPGA的視頻采集輸出系統(tǒng)的實(shí)現(xiàn)[D].大連海事大學(xué),2011.
[2] 俞彬杰.基于FPGA的全彩色LED同步顯示屏控制系統(tǒng)的設(shè)計(jì)[D].上海交通大學(xué),2008.
[3] 林媛.圖像縮放算法研究及其FPGA實(shí)現(xiàn)[D].廈門大學(xué),2006.