隨著(zhù)多媒體和通信技術(shù)的發(fā)展,視頻圖像處理的實(shí)時(shí)性成為人們關(guān)注的熱點(diǎn)。視頻圖像處理一般都是用數字信號處理器(digital signal processor,DSP)來(lái)完成的。為了滿(mǎn)足實(shí)時(shí)性要求,往往采用多DSP或DSP陣列的方法,使系統在成本、重量、功耗等方面都會(huì )快速升高,F場(chǎng)可編程門(mén)陣列(FPGA)運算的并行性和內嵌DSP核等特點(diǎn),能夠提高運算速度滿(mǎn)足視頻處理的實(shí)時(shí)性要求。在視頻圖像顯示、處理時(shí),采用的顏色空間主要有RGB,YCrCb兩種。RGB基于三基色原理,顏色實(shí)現簡(jiǎn)單,在計算機、電視機顯示系統中應用廣泛,YCrCb將顏色的亮度信號與色度信號分離,易于實(shí)現壓縮,方便傳輸和處理。在視頻壓縮、傳輸等應用中經(jīng)常需要實(shí)現RGB與YCbCr顏色空間的相互變換。這里推導出一種適合在FPGA上實(shí)現從RGB到YCbCr。顏色空間變換的新算法,采用單片FPGA完成電路設計,利用FPGA內嵌DSP核實(shí)現乘法運算,提高了轉換算法的運行速度。 1 顏色空間 在RGB顏色空間中,自然界所有顏色都可以用紅(R)、綠(G)、藍(B)三種顏色的不同強度組合而重現。RGB的取值范圍分別為0~255,表1列出了幾種顏色對應的R,G,B取值。 RGB生成顏色容易實(shí)現,被廣泛應用在計算機、彩色電視機的顯示系統中。但是RGB表示顏色的效率并不是很高,3個(gè)顏色分量同等重要,而且亮度信息存在于所有顏色分量中,當需要對像素點(diǎn)的亮度或者色度值進(jìn)行修改時(shí),必須同時(shí)改變RGB三者的值。 YCrCb顏色空間是在開(kāi)發(fā)世界范圍數字分量食品標準過(guò)程中作為ITU-R BT.601標準的一部分而開(kāi)發(fā)出來(lái)的。在YCRCb顏色空間中,Y表示亮度信號,取值范圍為16~235;Cr,Cb表示色度信號,取值范圍為16~240,亮度信號與色度信號相互獨立。這種顏色表示方法可以利用人眼的特性降低數字彩色圖像的存儲空間。人眼視覺(jué)系統(HVS)對亮度細節的敏感度高于顏色細節,適當減少色度分辨率不會(huì )明顯影響圖像的畫(huà)質(zhì),易于實(shí)現數據壓縮。 2 RGB到YCrCb的轉換 在ITU-R BT.601標準中給出了RGB與YCrCb的轉換關(guān)系式如下: 式中:R’,G’,B’表示Garoma校正后的R,G,B值。該轉換關(guān)系式是一個(gè)3×3乘法矩陣,電路實(shí)現時(shí)需要9個(gè)乘法器和9個(gè)加法器,在FPGA中直接實(shí)現時(shí)將會(huì )占用較多邏輯資源。 為了減少邏輯資源的使用,需要對該算法做進(jìn)一步改進(jìn),簡(jiǎn)化運算過(guò)程,從而以較少的邏輯資源實(shí)現轉換電路。首先對Cb,Cr做如下化簡(jiǎn): Cb=0.148 2(B’-R’)+0.291 0(B’-G’)+128 Cr=0.367 8(R’-G’)-0.071 4(B’-R’)+128 對y的計算公式進(jìn)行化簡(jiǎn)時(shí),令Y’=0.256 8R’+0.501 4G’+0.097 9B’,Cb’ =-0.148 2R’-0.291 0G’+0.439 2B’,有0.577 2Y’+Cb’=0.495 7B’。為了計算方便,近似值為0.5B’。此時(shí),有Y’=1.732 5(0.5B’-Cb’),與原式誤差為△Y’=0.007 4B’,其范圍為0~1.887。當以Y’表示Y時(shí),需要對誤差作補償。計算公式可表示為: Y=1.732 5(0.5B’-Cb’)+offset 式中:offset=16-0.007 4B’,化簡(jiǎn)后的轉換公式如下: Y=1.732 5(0.5B’-Cb’)+offset Cb=0.148 2(B’-R’)+0.291 0(B’-G’)+128 (2) Cr=0.367 8(R’-G’)-0.071 4(B’-R’)+128 式中:Cb’=0.148 2(B’-R’)+0.291 0(B’-G’), offset=16-0.007 4B’。 根據B’的取值不同,offset的取值取整后為14,15,16。在計算過(guò)程中,可以用一個(gè)數據選擇器根據B’值的不同選擇offset的值。0.5B’的計算可以用移位實(shí)現;(jiǎn)后的轉換算法,對Y,Cb,Cr的計算將比原來(lái)節省4個(gè)乘法器。在FPGA中,加法器、數據選擇器和移位算法的實(shí)現比乘法器簡(jiǎn)單,該化簡(jiǎn)將利于減少邏輯資源的應用,簡(jiǎn)化實(shí)現電路,提高運算速度。 轉換電路結構如圖1所示。 3 基于FPGA的實(shí)現 在FPGA中,對乘法的實(shí)現比較復雜,可以采用如下幾種方法: (1)直接用編程語(yǔ)言描述乘法運算,由綜合工具自動(dòng)實(shí)現,用該方法描述,實(shí)現簡(jiǎn)單,但是耗用比較多的邏輯資源。 (2)利用查找表的方式實(shí)現乘法運算,事先把要相乘數據的所有結果算出來(lái)存到ROM中,根據輸入數據的值讀取相應的結果,當用該方法相乘數據位數比較多時(shí),會(huì )占用大量的存儲空間。 (3)用FPGA中內嵌的乘法器實(shí)現,該方法實(shí)現簡(jiǎn)單,當用VHDL語(yǔ)言實(shí)現時(shí),調用相應的乘法模塊即可。 本文采用第三種方法,用專(zhuān)用乘法器來(lái)實(shí)現轉換公式中的乘法運算。Xilinx的Virtex 4系列FPGA芯片內嵌的乘法器為Xtreme DSPTM Slice-DSP48 Slice其工作頻率高達500 MHz,支持多種獨立的功能,包括乘法器、乘累加器(MAC)、后接加法器的乘法器、三輸入加法器、桶形移位寄存器、寬路線(xiàn)多路復用器、大小及比較器或寬計數器。本文將運用DSP48 Slice模塊實(shí)現乘加運算,在電路結構圖的虛線(xiàn)框中,乘法和加法的運算將用單個(gè)DSP48 Slice模塊實(shí)現。這樣將會(huì )減少轉換關(guān)系式中加法器的數量,節約邏輯資源,在程序中可以用元件例化語(yǔ)句調用DSP48 Slice模塊,實(shí)現方法簡(jiǎn)單,程序簡(jiǎn)潔。為了滿(mǎn)足浮點(diǎn)數和運算精度的要求,適合在FPGA中實(shí)現,將式(2)改寫(xiě)為: 式中的除法運算可以通過(guò)截斷低位數據的方法實(shí)現,在截斷數據時(shí),對截去小數部分判斷,采用4舍5人的方法,當截去部分的最高位是1時(shí),有進(jìn)位,最高位是0時(shí),直接舍去。用VHDL語(yǔ)言描述式(3)的轉換算法,輸入R’,G’,B’是8位無(wú)符號二進(jìn)制數,進(jìn)行加減運算時(shí),需要做符號位補位。 在每個(gè)運算部件(包括乘法和加減法器)的輸出以及系統的輸入/輸出之間加上緩存寄存器,實(shí)現流水線(xiàn)設計,能提高資源利用率,加快運算速度,寄存器級數由運算延時(shí)大小決定。在輸出端用計數器控制運算開(kāi)始時(shí)的噪音輸出。箝位電路控制輸出數據范圍滿(mǎn)足顏色空間的要求。 4 仿真結果 在Xilinx的Virtex4-FX平臺實(shí)現現圖1的電路結構,用ISE軟件仿真。資源使用情況如下: 時(shí)序仿真結果如圖2所示。 通過(guò)圖2可以驗證轉換算法的正確性。在使能信號en有效后,經(jīng)過(guò)6個(gè)時(shí)鐘的運算時(shí)延,輸出端有轉換結果輸出,輸出結果四舍五入,誤差0.5,比以往算法提高了變換結果的精度。 5 結 語(yǔ) 通過(guò)對轉換算法的研究,推導出適合在FPGA上實(shí)現的新算法,算法優(yōu)點(diǎn)突出。算式中乘法器采用DSP48 Slice模塊實(shí)現,提高了轉換算法的運算速度。從綜合報告可以看出,除了使用5個(gè)DSP48s外,其他資源使用的比較少。運算速度最大能夠達到189 MHz,能夠充分滿(mǎn)足運算量大,實(shí)時(shí)性要求高的應用。 |