譚 亮,孫俊喜,顧播宇,曹永剛,宋立維
(1.長春理工大學 電子信息工程學院,吉林 長春130022;2.中國科學院 長春光學精密機械與物理研究所,吉林 長春130033)
目前,大多數視頻縮放系統應用于2種不同視頻格式之間的轉換,例如SVGA格式(800×600)轉換為XGA格式(1 024×768)[1],因此縮放比例不是任意的。而且這些方法是針對整幅圖像,且工作在不同的時鐘頻率。然而在定位和監視系統中,需要詳細地了解和操作截取的局部圖像時,由于顯示屏幕分辨率的限制,不能迅速并明顯地檢查每一處區域和名字的信息。同樣在基于FPGA車牌字符識別系統中,為了保證字符分割后大小不一的車牌字符圖像以一致大小進入識別階段,幾何歸一化的實現非常重要。因此,根據上面的情況,工作在同一時鐘頻率的任意比例局部視頻圖像縮放操作是必要的。目前,大多數視頻縮放操作是先進行整幅圖像的縮放,然后截取需要操作的局部圖像,這種方法既浪費時間又增加了操作的復雜性。文獻[2]提出了一種針對局部圖像縮放的方法,然而它采用的是先整體放大局部圖像,再整體縮小局部圖像來實現局部圖像的縮放,這樣增加了插值運算的復雜度,不能滿足水平放大垂直縮小或者水平縮小垂直放大的情況。根據文獻[3-4],采用一維縮放結構即水平和垂直方向分開獨立處理,不僅降低了插值運算的復雜度,而且提高了系統處理的效率。
由于FPGA內部資源的限制,文獻[5-6]提出一種采用兩片片外存儲器實現圖像乒乓緩存的方法,但是它采用一次二維縮放結構[7],即將二維塊狀圖像數據直接縮放到目標大小。這種方法會增加邏輯資源的使用和插值運算的復雜性,相比于文獻[2]采用一片片外RAM,硬件設計成本和邏輯控制復雜性也會增加。
本文提出了一個能處理RGB和YUV 4∶4∶4格式的實時局部視頻圖像縮放系統硬件設計,通過FPGA驗證,本設計能夠截取需要縮放的視頻局部圖像,并準確地縮放到規定大小,同時保留視頻圖像的重要信息。
本文提出的視頻局部圖像縮放架構如圖1所示。
縮放流程如下:

圖1 視頻局部圖像縮放架構
1)系統實現水平、垂直同時縮小或者水平放大、垂直縮小:截取模塊通過對行有效信號和時鐘信號計數來選擇局部圖像所在的區域;數據緩存模塊1交替緩存截取的圖像數據,然后輸出需要進行水平插值的數據;水平插值后的數據經過數據選擇模塊1進入數據緩存模塊2;之后連續兩行圖像數據經過數據緩存模塊2進入垂直插值模塊;片外存儲器SDRAM在控制器寫信號的控制下緩存垂直插值后的一幀數據,然后在讀信號的控制下輸出需要顯示的數據給數據選擇模塊3輸出。
2)系統實現水平、垂直同時放大或者水平縮小、垂直放大:通過對行有效信號和時鐘信號計數來選擇局部圖像所在的區域;數據緩存模塊1交替緩存截取的圖像數據,然后輸出需要進行水平插值的數據;水平插值完后的數據經過數據選擇模塊1進入片外存儲器SDRAM;片外存儲器在控制器的寫信號控制下,緩存經過水平插值后的數據,然后輸出數據到數據緩存模塊2;數據緩存模塊2在讀寫信號的控制下,緩存并輸出連續兩行需要插值的圖像數據到垂直插值模塊;完成垂直插值后的放大數據進入數據選擇模塊3輸出。
本設計中給片外存儲器配置為4端口(2讀2寫端口),因此能夠同時處理RGB或者YUV 4∶4∶4這3個通道的數據。該設計使用了一片片外存儲器來存儲圖像數據,充分利用了片外存儲器的資源,并獲得了很好的效果。
插值系數生成模塊用來計算:1)插值系數:dx,dy;2)目標圖像坐標映射到原始圖像的坐標:行坐標y、列坐標x。列坐標x是用來緩存截取圖像數據的數據緩存模塊1的讀地址。根據行坐標y,圖1所示片外存儲器控制器產生讀寫信號控制片外存儲器。水平插值系數和列坐標計算原理如圖2所示。
插值系數及列坐標計算為


圖2 水平插值系數及列坐標計算原理
式中:i是目標圖像的列坐標,范圍為(1,n);m,n為原始局部圖像和目標局部圖像的水平分辨率。由于FPGA不能計算浮點數,因此根據文獻[8],等式右邊擴大2a倍,a由計算精度決定,本設計a取12。
所以式(1)可替換為

x的高(b-12)位是目標圖像列坐標,低12位是水平插值系數,b是x的數據位寬。
數據選擇模塊用來選擇數據進入下一個模塊:根據數據選擇信號,數據選擇模塊選擇放大或者縮小后的數據進入下一個模塊。如圖1所示,例如當系統實現垂直放大時,數據選擇信號置“1”,數據選擇模塊4選擇放大后的垂直方向數據進入片外存儲器緩存,否則選擇縮小后的數據進入數據選擇模塊3。
如圖3所示,數據緩存模塊2包含兩個存儲器。每一個存儲器由n個寄存器組成,n為原始圖像水平分辨率。控制模塊通過判斷目標圖像坐標映射到原始圖像坐標的行坐標值來產生讀寫信號控制2個存儲器,其中讀信號1控制存儲器1輸出數據到存儲器2,讀信號2控制存儲器1輸出數據到垂直插值模塊。這個坐標值代表了需要插值的連續兩行數據,將坐標值存儲在一個由r個寄存器構成的存儲器中,r是坐標值的個數。當系統實現縮小操作時,如果這個坐標值不等于0,存儲器1的讀信號2和存儲器2的讀信號置“1”,同時輸出連續兩行有效數據到垂直插值計算模塊;當系統實現放大操作時,如果第m+1個寄存器的值不小于第m個寄存器的值(m范圍為(1,r)),存儲器1的讀信號1和存儲器2的寫信號置“1”,存儲器1的讀信號2和存儲器2的讀信號同為行有效信號。而且,為了確保需要插值的兩個數據(P1和P2)和插值系數能同時進入插值計算模塊,當存儲器1的讀信號2和存儲器2的讀信號都為“1”時,兩個存儲器能在一個時鐘同時輸出相鄰兩行需要插值的兩個像素數據。

圖3 數據緩存模塊2
本文提出的基于FPGA視頻局部圖像任意比例縮放架構程序部分采用Verilog語言編寫實現,FPGA芯片選擇Altera公司的EP2C70F896C6N型號,其包含68 416個邏輯單元和1 152 000 bit存儲容量。設計資源的使用如表1所示:原始局部圖像分辨率為200×180和200×350,如圖4a所示;目標圖像分辨率為100×350和300×160,如圖4b所示。

表1 設計資源使用

圖4 實驗結果
實驗結果如圖4所示,來自攝像機的視頻局部圖像被放大或者縮小然后在VGA上顯示。VGA的分辨率為640×480,可以看出本設計工作良好,并能在顯示器上高質量地顯示縮放后的視頻圖像。證明了本文的架構在功能和時序上的正確性。
本文討論了視頻局部圖像縮放架構并用FPGA實現。系統利用了FPGA的強擴展性和重建性來實現圖像縮放,因此能夠根據實際需要來進行調整而不需要改變其硬件結構,所以系統具有較好的適用性和靈活性,而且片外存儲器有足夠的存儲資源來存儲一幀圖像數據,能夠很好地實現分辨率高達1 024×768任意比例的視頻圖像實時縮放。
實驗結果表明,算法的實現比較簡明,從而大大降低了資源的使用和設計成本,而且圖像縮放系統能夠高質量地輸出視頻圖像數據,這些都證明了本文提出的硬件架構是可行的,能夠作為幾何歸一化操作很好地融合到車牌字符識別系統中。
[1]RAMACHANDRAN S,SRINIVASAN S.Design and FPGA implementation of a video scalar with on-chip reduced memory utilization[C]//Proc.the Euromicro Symposium on Digital Systems Design.[S.l.]:IEEE Press,2003:206-213.
[2]袁杰,姚賽杰,朱毅,等.視頻圖像局部實時無級縮放裝置:中國,10025624.8[P].2009-08-19.
[3]XIANG Zuquan,ZOU Xuecheng,LIU Zhenglin.An high quality image scaling engine for large-scale LCD[C]//Proc.the International Conference on Signal Processing.Wuhan,China:IEEE Press,2006:16-20.
[4]FENG Tao,XIE Wenlu,YANG Lianxing.An architecture and implementation of image scaling conversion[C]//Proc.the International Conference on ASIC.Shanghai,China:IEEE Press,2001:409-410.
[5]王陽,趙春喜,郭山河.基于一維數據插值算法的圖像放大引擎[J].吉林大學學報:信息科學版,2010(7):410-413.
[6]張陌,程永強.基于FPGA的D1到XGA圖像放大引擎[J].太原理工大學學報,2008(5):42-44.
[7]孫紅進.FPGA實現的視頻圖像縮放顯示[J].液晶與顯示,2010(2):130-133.
[8]鄭俊杰,陸虎敏,方向忠.基于自適應插值算法的視頻圖像縮放技術及其FPGA實現[J].航空電子技術,2008(3):46-50.