基于FPGA的可變規(guī)模多格式Y(jié)CbCr到RGB快速轉(zhuǎn)換模塊設(shè)計
摘要:文章介紹了YCbCr色彩空間和RGB色彩空間之間的轉(zhuǎn)換的方法,實現(xiàn)了不同規(guī)模以及不同數(shù)據(jù)結(jié)構(gòu)的YCbCr到RGB的快速硬件轉(zhuǎn)換。采用數(shù)據(jù)重排列和數(shù)據(jù)分離等方法,不僅支持QCIF到HDTV多種分辨率的視頻轉(zhuǎn)換,而且支持YCbCr444、YCbCr422和YCbCr420等多種打包或平面YCbCr格式。本設(shè)計方案已用VerilogHDL語言實現(xiàn),并在FPGA平臺驗證通過,轉(zhuǎn)換后的RGB視頻可直接輸出到顯示器顯示,并能實現(xiàn)視頻控制,存儲,回放等功能。
0 引言
色彩空間是通過數(shù)值的形式來描述顏色,在數(shù)字電視和計算機領(lǐng)域最常用到的為RGB(Red,Green,Blue)色彩空間和YCbCr(Luminance,
Chroma Blue,Chroma Red)色彩空間。RGB是最常見的色彩空間,通過紅、綠、藍三種基色相互疊加從而產(chǎn)生其它顏色。由于其設(shè)備的獨立性,它被廣泛應(yīng)用于計算機圖形、成像系統(tǒng)和彩色電視之中,如現(xiàn)在普遍的計算機顯示器用的VGA接口所需要的數(shù)據(jù)類型就是RGB。YCbCr色彩空間則是灰度和色差的疊加,這種色彩空間因易于壓縮和處理,廣泛應(yīng)用于廣播、電視系統(tǒng)和圖像處理。
由于不同色彩空間在視頻設(shè)備的使用,使色彩空間的相互轉(zhuǎn)換成為必需。隨著計算機、互聯(lián)網(wǎng)和多媒體技術(shù)的飛速發(fā)展,對色彩空間轉(zhuǎn)換的要求也越來越高,這更突顯出色彩空間轉(zhuǎn)換的重要性。
色彩空間轉(zhuǎn)換的主要目的是令所有的輸入數(shù)據(jù)在進行運算和處理或者顯示前都基于相同的色彩空間。對于YCbCr轉(zhuǎn)RGB而言,主要的問題在于兩個方面,一個是視頻格式的規(guī)模,也就是我們所說的分辨率,高的分辨率意味著需要更多的硬件資源和更快速的計算過程;另一個是YCbCr本身具有很多不同的格式,而目前的轉(zhuǎn)換器一般都是基于其中一種固定的格式,對于其他格式的YCbCr數(shù)據(jù)并不支持,所以為了支持多種YCbCr數(shù)據(jù)格式,必須把不同的YCbCr數(shù)據(jù)統(tǒng)一到一種格式來實現(xiàn)轉(zhuǎn)換。
1 YCbCr與RGB色彩空間
1.1 YCbCr色彩空間
在常見的消費類視頻產(chǎn)品中,常用的色彩空間是YCbCr。人眼對視頻的Y分量更敏感,因此可以在采樣時適當減少Cb和Cr分量從而實現(xiàn)視頻的壓縮,因此YCbCr格式有三種不同格式:4:2:0、4:2:2和4:4:4。這三種格式又分為打包模式和平面模式兩大類,區(qū)別在于不同像素的Cb和Cr位于Y分量之間還是之后。
移動視頻設(shè)備是以YCbCr4:2:0的方式記錄,隨著H.264視頻解碼標準的推廣和良好的壓縮比率,YCbCr4:2:0應(yīng)用越來越多。4:2:0表示每4個像素有4個亮度分量,2個色彩分量,以8個像素點為例,數(shù)據(jù)格式如下:
4:2:2表示每4個像素有4個亮度分量,4個色彩分量,是數(shù)字電視、有線視頻傳輸設(shè)備的最常用格式。以8個像素點為例,數(shù)據(jù)格式如下:
4:4:4是最接近RGB的采用格式,每一個像素都有三個分量,應(yīng)用于需要高質(zhì)量視頻采集的專業(yè)視頻產(chǎn)品。以8個像素點為例,數(shù)據(jù)格式如下:
由這三種數(shù)據(jù)格式分析可知,他們僅在采樣點和采樣點分布上有所不同,Y分量是每個像素都需要采樣的,而Cr、Cb分量可以根據(jù)對數(shù)據(jù)格式和視頻質(zhì)量要求的不同而自主選擇。這三種數(shù)據(jù)格式因為排列順序不同又叮分為不同的類型,所以實現(xiàn)可變規(guī)模的多格式轉(zhuǎn)換首先要把不同的YCbCr格式轉(zhuǎn)換成一個易于統(tǒng)一的格式,三個數(shù)據(jù)格式的對比如表1所示。
綜上所述,YCbCr的采樣格式將直接影響到圖像數(shù)據(jù)存取空間大小,以及讀取和存儲圖像的速率。要實現(xiàn)YCbCr4:2:0,YCbCr4:2:2與YCbCr4:4:4三種格式都能夠成功地轉(zhuǎn)換為RGB信號,就必須把這三種格式轉(zhuǎn)換為同一種格式,然后再轉(zhuǎn)換為RGB信號的格式。為最大限度保留各種圖像質(zhì)量,選用YCbCr4:4:4平面格式為統(tǒng)一格式。通過邏輯排列電路把不同格式的YCbCr序列轉(zhuǎn)換成YCbCr4:4:4序列,并把YCbCr信號分別存在三個不同的FIFO中,再由YCbCr—RGB轉(zhuǎn)換模塊讀取三個并行FIFO中的序列進行轉(zhuǎn)換。實現(xiàn)邏輯結(jié)構(gòu)如圖4所示。
1.2 YCrCb到RGB色彩空間變換原理
YCrCb色彩空間與RGB色彩空間的對應(yīng)關(guān)系如下:
人眼能夠分辨的顏色數(shù)量遠小于256,所以一般都使用8bit的位寬來描述顏色,其中R、G、B、Y、Cr、Cb都為0~255的整數(shù)。為最大程度減少變換過程產(chǎn)生的誤差,轉(zhuǎn)化成公式(2)計算。
R=1.164(Y-16)+1.596(Cr-128)
G=1.164(Y-16)-0.813(Cr-128)-0.392(Cb-128) (2)
B=1.164(Y-16)+2.017(Cr-128)
注意到等式中包含的7個因式,其中有3個是相同的,該因式只需計算1次,送到相應(yīng)的加法器進行之后的運算。
由于在硬件實現(xiàn)時,計算過程不支持浮點計算,所以要把計算過程進行取整,如式(3)。
R=1.164Y+1.596Cr-223
G=1.164Y-0.813Cr-0.392Cb-173 (3)
B=1.164Y+2.017Cb-277
硬件實現(xiàn)框圖如圖5所示。
2 YCrCb到RGB變換的FPGA實現(xiàn)
2.1 硬件實現(xiàn)方法和優(yōu)化
根據(jù)視頻格式轉(zhuǎn)換的特點和需求,本文采用FPGA硬件系統(tǒng)來實現(xiàn)多種視頻格式的YCbCr格式轉(zhuǎn)換和RGB顯示。在FPGA設(shè)計中由色彩空間YCrCb到RGB的轉(zhuǎn)換有三種方法。第一種是利用嵌入式處理器,采用軟件的辦法實現(xiàn)轉(zhuǎn)換,這樣做一來硬件消耗大,另一方面在FPGA上處理器的運算速度達不到大數(shù)據(jù)實時顯示的要求。第二種是用Verilog代碼來表達轉(zhuǎn)換公式,這種方法需用到5個乘法器,而且YCbCr到RGB的轉(zhuǎn)化均是通過大量的浮點運算來實現(xiàn)的,每個像素點都要進行一次計算,所以如果是高清視頻,用100MHz時鐘每幀圖像的轉(zhuǎn)換將為此耗費近54ms的時間,而如果要達到30f/m的顯示要求,這個時間不能超過33ms。第三種方法是利用查找表法,把乘法結(jié)果用查找表的形式取得。這種方法不僅減小了浮點運算的誤差,也使得計算速度比前兩種方法快了一個數(shù)量級,并且YCbCr的值都在0~255之間,所以每個查找表項目都只有256項,并不會過多地占用硬件資源。
查找表中預(yù)存的數(shù)值是各個因式的值,為提高的內(nèi)部計算精度,又不占用過多的RAM資源,綜合考慮可將各個因式數(shù)值擴大2倍進行存儲,RAM的數(shù)據(jù)寬度可設(shè)定為9位。由查找表讀出的數(shù)值經(jīng)過加減運算后再右移一位的簡單運算就可以把數(shù)值縮小到原先的位數(shù),再經(jīng)過鉗位運算限制在0~255之間,計算公式如下:
R=(2.328Y+3.192Cr-446)>>1
G=(2.328Y-1.626Cr-0.784Cb+346)>>1 (4)
B=(2.328Y+4.034Cr-554)>>1
用查表法實現(xiàn)轉(zhuǎn)換中的乘法計算,在硬件實現(xiàn)YCbCr轉(zhuǎn)RGB的實時視頻顯示有著重要的意義,表2是YCbCr轉(zhuǎn)RGB不同方法的實驗數(shù)據(jù),本文用于驗證該模塊的器件是Altera公司的Cvclone2-EP2C70F896C6。占用的綜合工具為Design Compiler,通過時序約束最快時鐘頻率可以達到102MHZ。
浮點乘法是影響轉(zhuǎn)換效率的關(guān)鍵,而使用查找表法避免了浮點乘法的運算,使轉(zhuǎn)換效率提高了1個數(shù)量級。要支持高清格式30f/s實時轉(zhuǎn)換,轉(zhuǎn)換時間要低于33ms,加之數(shù)據(jù)存儲的延時,用查找表構(gòu)造轉(zhuǎn)換模塊是必要的。用查找表法實現(xiàn)的模塊結(jié)構(gòu)如圖6所示。
通過構(gòu)造RAM1~RAM5五個查找表映射單元,把輸入的信號分別按式(4)的方式計算出RGB相應(yīng)的結(jié)果,直接送給顯示緩存寄存器。本文用的測試平臺是Altera DE2-70開發(fā)板,系統(tǒng)結(jié)構(gòu)如圖7所示,內(nèi)部主要分為數(shù)據(jù)重組模塊、查找表模塊、控制模塊和顯示模塊。數(shù)據(jù)重組模塊能通過設(shè)置不同的分辨率和YCbCr格式把YCbCr數(shù)據(jù)分別提取儲存在三個FIFO中,查找表模塊負責(zé)通過FIFO中Y、Cr、Cb的值輸出浮點乘法的運算結(jié)果,再加減運算后輸出轉(zhuǎn)換后RGB24位的值??刂颇K負責(zé)控制碼流的播放、暫停和存儲回放等擴展功能。顯示模塊負責(zé)驅(qū)動碼流到VGA顯示。
2.2 系統(tǒng)驗證
2.2.1 數(shù)據(jù)驗證
系統(tǒng)驗證包含兩個部分,首先要驗證不同格式的YCbCr轉(zhuǎn)換為YCbCr444的碼流是正確的,這部分可以先用ModelSim把轉(zhuǎn)換邏輯進行仿真,分別把Y、Cb、Cr三個數(shù)據(jù)按順序存在對應(yīng)的三個FIFO中。
之后通過MATLAB的數(shù)據(jù)比較命令strcmp,將FIFO中的YCbCr444數(shù)據(jù)與MATLAB轉(zhuǎn)換的數(shù)據(jù)進行比較。分別使用QCIF、CIF、HDTV三種分辨率進行隨機一幀碼流的驗證,返回值都為1,證明轉(zhuǎn)換系統(tǒng)可靠。
系統(tǒng)整體通過ModelSim仿真結(jié)果如圖8所示。
在圖8中,adr_y、adr_u、adr_v,為數(shù)據(jù)重組后的YCbCr地址,y_in、Cb_in、cr_in分別為待轉(zhuǎn)換的數(shù)據(jù),R_out、G_out、B_out為轉(zhuǎn)換后的輸出結(jié)果。ena_in和ena_out為輸入使能和輸出使能信號,這兩個信號可以控制視頻轉(zhuǎn)換的啟動和停止,在2個時鐘周期之后就可以有顯示結(jié)果出現(xiàn),這僅僅需要6 μs,人眼根本感覺不到延遲,可以用在對轉(zhuǎn)換速度要求較高的系統(tǒng)上。像素計數(shù)器為cn,在一幀圖像完全轉(zhuǎn)換后幀計數(shù)器counter會計數(shù)一次,通過這個可以提取完整的一幀圖像進行檢驗。
2.2.2 FPGA系統(tǒng)驗證
將整個系統(tǒng)燒錄到FPGA中進行硬件驗證,輸入的視頻編碼通過SD卡讀入系統(tǒng),進行YCbCr格式的重組,這里選用了三種格式三種分辨率的視頻編碼,如圖9所示分別為YCbCr420格式OCIF分辨率、YCbCr422格式CIF分辨率和YCbCr444采樣格式HDTV分辨率通過YCbCr-RGB轉(zhuǎn)換后某一幀圖像的顯示結(jié)果。顯示結(jié)果表明該方法可以正確實現(xiàn)30f/s的不同規(guī)模和不同格式的YCbCr-RGB實時轉(zhuǎn)換。
3 結(jié)語
本文基于FPGA構(gòu)建硬件平臺,實現(xiàn)不同分辨率和不同格式的YCbCr視頻數(shù)據(jù)的存儲、處理和VGA輸出,具有結(jié)構(gòu)緊湊、功能完善、配置靈活、系統(tǒng)穩(wěn)定的特點。視頻格式轉(zhuǎn)換方法適用于大部分視頻圖像處理的通用平臺,滿足視頻圖像高精度快速實吋轉(zhuǎn)換和顯示的要求??蓱?yīng)用于多種制式視頻采樣數(shù)據(jù)與輸出接口數(shù)據(jù)格式不匹配的場合,具有一定的應(yīng)用價值。