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