張曉晶



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