譚 亮,孫俊喜,顧播宇,曹永剛,宋立維
(1.長(zhǎng)春理工大學(xué) 電子信息工程學(xué)院,吉林 長(zhǎng)春130022;2.中國(guó)科學(xué)院 長(zhǎng)春光學(xué)精密機(jī)械與物理研究所,吉林 長(zhǎng)春130033)
目前,大多數(shù)視頻縮放系統(tǒng)應(yīng)用于2種不同視頻格式之間的轉(zhuǎn)換,例如SVGA格式(800×600)轉(zhuǎn)換為XGA格式(1 024×768)[1],因此縮放比例不是任意的。而且這些方法是針對(duì)整幅圖像,且工作在不同的時(shí)鐘頻率。然而在定位和監(jiān)視系統(tǒng)中,需要詳細(xì)地了解和操作截取的局部圖像時(shí),由于顯示屏幕分辨率的限制,不能迅速并明顯地檢查每一處區(qū)域和名字的信息。同樣在基于FPGA車牌字符識(shí)別系統(tǒng)中,為了保證字符分割后大小不一的車牌字符圖像以一致大小進(jìn)入識(shí)別階段,幾何歸一化的實(shí)現(xiàn)非常重要。因此,根據(jù)上面的情況,工作在同一時(shí)鐘頻率的任意比例局部視頻圖像縮放操作是必要的。目前,大多數(shù)視頻縮放操作是先進(jìn)行整幅圖像的縮放,然后截取需要操作的局部圖像,這種方法既浪費(fèi)時(shí)間又增加了操作的復(fù)雜性。文獻(xiàn)[2]提出了一種針對(duì)局部圖像縮放的方法,然而它采用的是先整體放大局部圖像,再整體縮小局部圖像來(lái)實(shí)現(xiàn)局部圖像的縮放,這樣增加了插值運(yùn)算的復(fù)雜度,不能滿足水平放大垂直縮小或者水平縮小垂直放大的情況。根據(jù)文獻(xiàn)[3-4],采用一維縮放結(jié)構(gòu)即水平和垂直方向分開獨(dú)立處理,不僅降低了插值運(yùn)算的復(fù)雜度,而且提高了系統(tǒng)處理的效率。
由于FPGA內(nèi)部資源的限制,文獻(xiàn)[5-6]提出一種采用兩片片外存儲(chǔ)器實(shí)現(xiàn)圖像乒乓緩存的方法,但是它采用一次二維縮放結(jié)構(gòu)[7],即將二維塊狀圖像數(shù)據(jù)直接縮放到目標(biāo)大小。這種方法會(huì)增加邏輯資源的使用和插值運(yùn)算的復(fù)雜性,相比于文獻(xiàn)[2]采用一片片外RAM,硬件設(shè)計(jì)成本和邏輯控制復(fù)雜性也會(huì)增加。
本文提出了一個(gè)能處理RGB和YUV 4∶4∶4格式的實(shí)時(shí)局部視頻圖像縮放系統(tǒng)硬件設(shè)計(jì),通過(guò)FPGA驗(yàn)證,本設(shè)計(jì)能夠截取需要縮放的視頻局部圖像,并準(zhǔn)確地縮放到規(guī)定大小,同時(shí)保留視頻圖像的重要信息。
本文提出的視頻局部圖像縮放架構(gòu)如圖1所示。
縮放流程如下:
圖1 視頻局部圖像縮放架構(gòu)
1)系統(tǒng)實(shí)現(xiàn)水平、垂直同時(shí)縮小或者水平放大、垂直縮小:截取模塊通過(guò)對(duì)行有效信號(hào)和時(shí)鐘信號(hào)計(jì)數(shù)來(lái)選擇局部圖像所在的區(qū)域;數(shù)據(jù)緩存模塊1交替緩存截取的圖像數(shù)據(jù),然后輸出需要進(jìn)行水平插值的數(shù)據(jù);水平插值后的數(shù)據(jù)經(jīng)過(guò)數(shù)據(jù)選擇模塊1進(jìn)入數(shù)據(jù)緩存模塊2;之后連續(xù)兩行圖像數(shù)據(jù)經(jīng)過(guò)數(shù)據(jù)緩存模塊2進(jìn)入垂直插值模塊;片外存儲(chǔ)器SDRAM在控制器寫信號(hào)的控制下緩存垂直插值后的一幀數(shù)據(jù),然后在讀信號(hào)的控制下輸出需要顯示的數(shù)據(jù)給數(shù)據(jù)選擇模塊3輸出。
2)系統(tǒng)實(shí)現(xiàn)水平、垂直同時(shí)放大或者水平縮小、垂直放大:通過(guò)對(duì)行有效信號(hào)和時(shí)鐘信號(hào)計(jì)數(shù)來(lái)選擇局部圖像所在的區(qū)域;數(shù)據(jù)緩存模塊1交替緩存截取的圖像數(shù)據(jù),然后輸出需要進(jìn)行水平插值的數(shù)據(jù);水平插值完后的數(shù)據(jù)經(jīng)過(guò)數(shù)據(jù)選擇模塊1進(jìn)入片外存儲(chǔ)器SDRAM;片外存儲(chǔ)器在控制器的寫信號(hào)控制下,緩存經(jīng)過(guò)水平插值后的數(shù)據(jù),然后輸出數(shù)據(jù)到數(shù)據(jù)緩存模塊2;數(shù)據(jù)緩存模塊2在讀寫信號(hào)的控制下,緩存并輸出連續(xù)兩行需要插值的圖像數(shù)據(jù)到垂直插值模塊;完成垂直插值后的放大數(shù)據(jù)進(jìn)入數(shù)據(jù)選擇模塊3輸出。
本設(shè)計(jì)中給片外存儲(chǔ)器配置為4端口(2讀2寫端口),因此能夠同時(shí)處理RGB或者YUV 4∶4∶4這3個(gè)通道的數(shù)據(jù)。該設(shè)計(jì)使用了一片片外存儲(chǔ)器來(lái)存儲(chǔ)圖像數(shù)據(jù),充分利用了片外存儲(chǔ)器的資源,并獲得了很好的效果。
插值系數(shù)生成模塊用來(lái)計(jì)算:1)插值系數(shù):dx,dy;2)目標(biāo)圖像坐標(biāo)映射到原始圖像的坐標(biāo):行坐標(biāo)y、列坐標(biāo)x。列坐標(biāo)x是用來(lái)緩存截取圖像數(shù)據(jù)的數(shù)據(jù)緩存模塊1的讀地址。根據(jù)行坐標(biāo)y,圖1所示片外存儲(chǔ)器控制器產(chǎn)生讀寫信號(hào)控制片外存儲(chǔ)器。水平插值系數(shù)和列坐標(biāo)計(jì)算原理如圖2所示。
插值系數(shù)及列坐標(biāo)計(jì)算為
圖2 水平插值系數(shù)及列坐標(biāo)計(jì)算原理
式中:i是目標(biāo)圖像的列坐標(biāo),范圍為(1,n);m,n為原始局部圖像和目標(biāo)局部圖像的水平分辨率。由于FPGA不能計(jì)算浮點(diǎn)數(shù),因此根據(jù)文獻(xiàn)[8],等式右邊擴(kuò)大2a倍,a由計(jì)算精度決定,本設(shè)計(jì)a取12。
所以式(1)可替換為
x的高(b-12)位是目標(biāo)圖像列坐標(biāo),低12位是水平插值系數(shù),b是x的數(shù)據(jù)位寬。
數(shù)據(jù)選擇模塊用來(lái)選擇數(shù)據(jù)進(jìn)入下一個(gè)模塊:根據(jù)數(shù)據(jù)選擇信號(hào),數(shù)據(jù)選擇模塊選擇放大或者縮小后的數(shù)據(jù)進(jìn)入下一個(gè)模塊。如圖1所示,例如當(dāng)系統(tǒng)實(shí)現(xiàn)垂直放大時(shí),數(shù)據(jù)選擇信號(hào)置“1”,數(shù)據(jù)選擇模塊4選擇放大后的垂直方向數(shù)據(jù)進(jìn)入片外存儲(chǔ)器緩存,否則選擇縮小后的數(shù)據(jù)進(jìn)入數(shù)據(jù)選擇模塊3。
如圖3所示,數(shù)據(jù)緩存模塊2包含兩個(gè)存儲(chǔ)器。每一個(gè)存儲(chǔ)器由n個(gè)寄存器組成,n為原始圖像水平分辨率??刂颇K通過(guò)判斷目標(biāo)圖像坐標(biāo)映射到原始圖像坐標(biāo)的行坐標(biāo)值來(lái)產(chǎn)生讀寫信號(hào)控制2個(gè)存儲(chǔ)器,其中讀信號(hào)1控制存儲(chǔ)器1輸出數(shù)據(jù)到存儲(chǔ)器2,讀信號(hào)2控制存儲(chǔ)器1輸出數(shù)據(jù)到垂直插值模塊。這個(gè)坐標(biāo)值代表了需要插值的連續(xù)兩行數(shù)據(jù),將坐標(biāo)值存儲(chǔ)在一個(gè)由r個(gè)寄存器構(gòu)成的存儲(chǔ)器中,r是坐標(biāo)值的個(gè)數(shù)。當(dāng)系統(tǒng)實(shí)現(xiàn)縮小操作時(shí),如果這個(gè)坐標(biāo)值不等于0,存儲(chǔ)器1的讀信號(hào)2和存儲(chǔ)器2的讀信號(hào)置“1”,同時(shí)輸出連續(xù)兩行有效數(shù)據(jù)到垂直插值計(jì)算模塊;當(dāng)系統(tǒng)實(shí)現(xiàn)放大操作時(shí),如果第m+1個(gè)寄存器的值不小于第m個(gè)寄存器的值(m范圍為(1,r)),存儲(chǔ)器1的讀信號(hào)1和存儲(chǔ)器2的寫信號(hào)置“1”,存儲(chǔ)器1的讀信號(hào)2和存儲(chǔ)器2的讀信號(hào)同為行有效信號(hào)。而且,為了確保需要插值的兩個(gè)數(shù)據(jù)(P1和P2)和插值系數(shù)能同時(shí)進(jìn)入插值計(jì)算模塊,當(dāng)存儲(chǔ)器1的讀信號(hào)2和存儲(chǔ)器2的讀信號(hào)都為“1”時(shí),兩個(gè)存儲(chǔ)器能在一個(gè)時(shí)鐘同時(shí)輸出相鄰兩行需要插值的兩個(gè)像素?cái)?shù)據(jù)。
圖3 數(shù)據(jù)緩存模塊2
本文提出的基于FPGA視頻局部圖像任意比例縮放架構(gòu)程序部分采用Verilog語(yǔ)言編寫實(shí)現(xiàn),F(xiàn)PGA芯片選擇Altera公司的EP2C70F896C6N型號(hào),其包含68 416個(gè)邏輯單元和1 152 000 bit存儲(chǔ)容量。設(shè)計(jì)資源的使用如表1所示:原始局部圖像分辨率為200×180和200×350,如圖4a所示;目標(biāo)圖像分辨率為100×350和300×160,如圖4b所示。
表1 設(shè)計(jì)資源使用
圖4 實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)結(jié)果如圖4所示,來(lái)自攝像機(jī)的視頻局部圖像被放大或者縮小然后在VGA上顯示。VGA的分辨率為640×480,可以看出本設(shè)計(jì)工作良好,并能在顯示器上高質(zhì)量地顯示縮放后的視頻圖像。證明了本文的架構(gòu)在功能和時(shí)序上的正確性。
本文討論了視頻局部圖像縮放架構(gòu)并用FPGA實(shí)現(xiàn)。系統(tǒng)利用了FPGA的強(qiáng)擴(kuò)展性和重建性來(lái)實(shí)現(xiàn)圖像縮放,因此能夠根據(jù)實(shí)際需要來(lái)進(jìn)行調(diào)整而不需要改變其硬件結(jié)構(gòu),所以系統(tǒng)具有較好的適用性和靈活性,而且片外存儲(chǔ)器有足夠的存儲(chǔ)資源來(lái)存儲(chǔ)一幀圖像數(shù)據(jù),能夠很好地實(shí)現(xiàn)分辨率高達(dá)1 024×768任意比例的視頻圖像實(shí)時(shí)縮放。
實(shí)驗(yàn)結(jié)果表明,算法的實(shí)現(xiàn)比較簡(jiǎn)明,從而大大降低了資源的使用和設(shè)計(jì)成本,而且圖像縮放系統(tǒng)能夠高質(zhì)量地輸出視頻圖像數(shù)據(jù),這些都證明了本文提出的硬件架構(gòu)是可行的,能夠作為幾何歸一化操作很好地融合到車牌字符識(shí)別系統(tǒng)中。
[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]袁杰,姚賽杰,朱毅,等.視頻圖像局部實(shí)時(shí)無(wú)級(jí)縮放裝置:中國(guó),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]王陽(yáng),趙春喜,郭山河.基于一維數(shù)據(jù)插值算法的圖像放大引擎[J].吉林大學(xué)學(xué)報(bào):信息科學(xué)版,2010(7):410-413.
[6]張陌,程永強(qiáng).基于FPGA的D1到XGA圖像放大引擎[J].太原理工大學(xué)學(xué)報(bào),2008(5):42-44.
[7]孫紅進(jìn).FPGA實(shí)現(xiàn)的視頻圖像縮放顯示[J].液晶與顯示,2010(2):130-133.
[8]鄭俊杰,陸虎敏,方向忠.基于自適應(yīng)插值算法的視頻圖像縮放技術(shù)及其FPGA實(shí)現(xiàn)[J].航空電子技術(shù),2008(3):46-50.