專利名稱:一種顏色空間變換的子字并行方法
技術(shù)領(lǐng)域:
本發(fā)明涉及利用計(jì)算機(jī)處理器的子字并行指令對YCbCr與RGB顏色空間相互變換過程進(jìn)行并行優(yōu)化的方法,可應(yīng)用于計(jì)算機(jī)圖像處理與視頻處理程序中。
背景技術(shù):
顏色空間也稱色彩模型(又稱色彩空間或色彩系統(tǒng))它的用途是在某些標(biāo)準(zhǔn)下用通??山邮艿姆绞綄ι始右哉f明。本質(zhì)上,色彩模型是坐標(biāo)系統(tǒng)和子空間的闡述。YCbCr是DVD、攝像機(jī)、數(shù)字電視等消費(fèi)類視頻產(chǎn)品中常用的色彩編碼方案。其中Y是指亮度分量,Cb指藍(lán)色色度分量,而Cr指紅色色度分量。人的肉眼對視頻的Y分量更敏感,因此在通過對色度分量進(jìn)行子采樣來減少色度分量后,肉眼將察覺不到圖像質(zhì)量的變化。主要的子采樣格式有YCbCr4:2:0,YCbCr4:2:2和YCbCr4:4: 4。RGB是通過紅綠藍(lán)三原色來描述顏色的顏色空間(R = Red、G = Green、B = Blue)。它是最通用的面向硬件的彩色模型。該模型`用于彩色監(jiān)視器和一大類彩色視頻攝像。YCbCr與RGB之間的顏色空間變換被廣泛用于計(jì)算機(jī)圖像與視頻編解碼程序中。在通常的計(jì)算機(jī)圖像與視頻處理程序中,YCbCr顏色空間到RGB顏色空間的轉(zhuǎn)換公式為:R = Y+1.40200 X CrG = Y-0.34414 X Cb-0.71414 X CrB = Y+1.77200 X Cb而RGB顏色空間到Y(jié)CbCr顏色空間的轉(zhuǎn)換公式為:Y = 0.29900 X R+0.58700 X G+0.11400 X BCb = -0.16874XR-0.33126XG+0.50000XB+CENTERJSAMPLECr = 0.50000XR-0.41869XG-0.08131 X B+CENTERJSAMPLE其中,RGB與YCbCr取值均為整數(shù),RGB取值最小為0,將RGB取值的最大值記作MAXJSAMPLE, MAXJSAMPLE的值通常為255,將RGB取值最大值的一半記作CENTERJSAMPLE,若 MAXJSAMPLE 為奇數(shù),則 CENTERJSAMPLE 為 MAXJSAMPLE+1 的一半,若 MAXJSAMPLE 為偶數(shù),則 CENTERJSAMPLE 為 MAXJSAMPLE 的一半。子字并行是當(dāng)今大多數(shù)處理器所支持的一種數(shù)據(jù)并行處理方式,它將多個(gè)短的數(shù)據(jù)封裝進(jìn)一個(gè)寄存器,然后進(jìn)行并行處理,以充分利用處理器的數(shù)據(jù)通路寬度。因此,子字并行可看作一種小規(guī)模的SMD(單指令多數(shù)據(jù))處理方式。處理器通常通過子字并行指令集來實(shí)現(xiàn)對子字并行的支持。如Intel處理器的MMX、SSE系列,AMD的3D Now !系列,SPARC架構(gòu)處理器的VIS系列等均是用于支持子字并行處理的子字并行指令集。在子字并行中,一個(gè)字就是一個(gè)數(shù)據(jù)集。子字是包含在字中的更低精度的數(shù)據(jù)單元。由于可將同樣的指令應(yīng)用于一個(gè)字中的所有子字,因此原來需要若干條指令才能完成的操作,可通過一條子字并行指令來實(shí)現(xiàn)。例如,如果一個(gè)字長是64位,則一個(gè)子字的大小可以是8位,16位和32位。這樣,一條指令可以并行處理八個(gè)8位子字,四個(gè)16位子字,或兩個(gè)32位子字。由于在圖像視頻處理等多媒體算法中出現(xiàn)了大量的低精度數(shù)據(jù)并行,因此,子字并行可在圖像視頻處理等多媒體算法中發(fā)揮重要作用。到目前為止,利用子字并行方法對顏色空間變換進(jìn)行并行優(yōu)化的方法尚未見報(bào)道。
發(fā)明內(nèi)容
本發(fā)明的目的在于利用處理器子字并行指令提升YCbCr與RGB顏色空間相互變換的效率。本發(fā)明一種顏色空間變換的子字并行方法的步驟如下:(I)YCbCr顏色空間到RGB顏色空間變換的子字并行化方法:I) YCbCr顏色空間到RGB顏色空間的變換公式為:R = Y+1.40200 X CrG = Y-0.34414 X Cb-0.71414 X Cr ①B = Y+1.77200 X Cb其中,RGB與YCbCr取值均為整數(shù),RGB最小取值為0,RGB最大取值MAXJSAMPLE通常為255 ;將RGB最大取值MAXJSAMPLE的一半記作CENTERJSAMPLE,若MAXJSAMPLE為奇數(shù),則 CENTERJSAMPLE 為 MAXJSAMPLE+1 的一半,若 MAXJSAMPLE 為偶數(shù),則 CENTERJSAMPLE為 MAXJSAMPLE 的一半;依據(jù)公式①,用子字并行的方法分別建立1.40200XCr,0.34414XCb、
0.71414XCr 與 L 77200XCb 的查值表,記 4 個(gè)查值表依次為 Cr_R_tab,Cb_G_tab, Cr_G_tab與Cb_B_tab,以1.40200XCr為例,在進(jìn)行顏色空間變換時(shí),不用計(jì)算1.40200XCr的值,而是直接從Cr_R_tab中取出位置為Cr+CENTERJSAMPLE的值作為1.40200X Cr的計(jì)算結(jié)果,這四個(gè)查值表的構(gòu)建方法一樣,以構(gòu)建1.40200XCr的查值表為例,其構(gòu)建方法是:(a)將1.40200乘以215后取整,記為FIX_1_40200,由于FIX_1_40200的值不超過216,將4個(gè)FIX_1_40200的值存放在一個(gè)64位的變量中,記為f ix_vec,取4個(gè)不同的Cr值放入一個(gè)64位變量中,記為Cr_vec,用處理器子字并行乘法操作計(jì)算fix_vec X Cr_vec的值,將計(jì)算結(jié)果記為fix_Cr_vec, fix_Cr_vec的字長為64位,存放4個(gè)16位的計(jì)算結(jié)果,在支持子字右移操作的處理器上,用子字右移操作將fiX_Cr_vec中的4個(gè)值右移7位;若處理器不支持子字右移操作,則用常規(guī)右移操作分別將fiX_Cr_vec中的4個(gè)值右移7位,最后將結(jié)果放置Cr_R_tab的相應(yīng)位置;(b)每次取不同的Cr_VeC,即取與上次計(jì)算不同的4個(gè)Cr值,將步驟(a)不斷重復(fù),直至Cr_R_tab的所有項(xiàng)均計(jì)算完畢;2)在經(jīng)過步驟I)之后,將一組YCbCr值轉(zhuǎn)換成RGB值的方法是:將Y值加上Cr_R_tab [Cr]的值得到R,將Y值減去Cb_G_tab[Cb]與Cr_G_tab [Cr]的值得到G,將Y值加上Cb_B_tab [Cb]的值得到B ;最后將得到的RGB值限定在至MAXJSAMPLE之內(nèi),若RGB中的某個(gè)值小于O則將該值改為0,若大于MAXJSAMPLE則將值改為MAXJSAMPLE ;⑵RGB顏色空間到Y(jié)CbCr顏色空間變換的子字并行化方法:I) RGB顏色空間到Y(jié)CbCr顏色空間的變換公式為:Y = 0.29900 X R+0.58700 X G+0.11400 X B
Cb = -0.16874 X R-0.33126 X G+0.50000 X B+CENTERJSAMPLE ②Cr = 0.50000XR-0.41869XG-0.08131 X B+CENTERJSAMPLE依據(jù)公式②,用子字并行的方法,分別建立0.29900XR,0.58700XG.0.11400XB、
0.16874XR、0.33126XG、0.50000XB、0.50000XR、0.41869XG、0.08131XG 的查值表,依次記為 R_Y_tab、G_Y_tab、B_Y_tab、R_Cb_tab、G_Cb_tab、B_Cb_tab、R_Cr_tab、G_Cr_tab、B_Cr_tab,與前述YCbCr顏色空間到RGB顏色空間的變換方法類似,在進(jìn)行顏色空間變換時(shí)不用計(jì)算 0.29900XR、0.58700XG、0.11400XB、0.16874XR、0.33126XG、0.50000XB、
0.50000XR,0.41869XG、0.08131XG的值,而是從查值表中直接取出相應(yīng)的值;9個(gè)查值表的構(gòu)建方法一樣,以構(gòu)建查值表R_Y_tab為例,其構(gòu)建方法是:(a)將0.29900乘以216后取整,記為FIX_29900,由于FIX_29900的值不超過216,將4個(gè)FIX_29900的值存放在一個(gè)64位的變量中,記為f ix_vec,取4個(gè)不同的R值放入一個(gè)32位或64位變量中,記為R_vec,用處理器子字并行乘法操作計(jì)算f ix_vec X R_vec的值,將計(jì)算結(jié)果記為fix_R_vec, fix_R_vec的字長為64位,存放4個(gè)16位的計(jì)算結(jié)果,在支持子字右移操作的處理器上,利用子字右移操作將f ix_R_vec中的4個(gè)值右移8位;若處理器不支持子字右移操作,則用常規(guī)右移操作分別將f ix_R_vec中的4個(gè)值右移8位,最后將結(jié)果放置R_Y_tab的相應(yīng)位置;(b)每次取不同的R_vec,即取與上次計(jì)算不同的4個(gè)R值,將步驟(a)不斷重復(fù),直至R_Y_tab的所有項(xiàng)均計(jì)算完畢;2)在經(jīng)過步驟I)之后,將一組RGB值轉(zhuǎn)換成YCbCr值的方法是:R_Y_tab[R]加 G_Y_tab[G]加 B_Y_tab[B]得到 Y, -R_Cb_tab[R]減 G_Cb_tab[G]加 B_Cb_tab[B]再加上 CENTERJSAMPLE 得到 Cb,R_Cr_tab [R]減 G_Cr_tab[G]減 B_Cr_tab[B]再加上CENTERJSAMPLE 得到 Cr。將該方法用在支持子字并行指令的處理器上,比未采用子字并行指令的顏色空間變換速度提升40 % 120 %。
具體實(shí)施例方式下面以支持SPARC v9指令集的處理器(如國產(chǎn)飛騰系列處理器、Oracle公司UltraSPARC TUUltraSPARC T2,UltraSPARC T4處理器等)為例,說明本發(fā)明的具體實(shí)施方式
(編程實(shí)現(xiàn)方法采用C語言),其中MAXJSAMPLE的值為255,CENTERJSAMPLE的值為128:1、YCbCr顏色空間到RGB顏色空間變換的子字并行化實(shí)施方法:(I)聲明大小為 MAXJSAMPLE+1 的 4 個(gè) short 類型數(shù)組 Cr_r_tab、Cb_b_tab、Cr_g_tab、Cb_g_tab作為查值表;(2)將1.40200 乘以 215 后取整,記為 FIX_1_40200,將 4 個(gè) FIX_1_40200 的值存放在一個(gè)64位的變量中,記為fix_vec0。同樣地,將0.34414,0.71414、1.77200分別乘以215取整后得到 3 個(gè) 64 位變量 fix_vecl、fix_vec2、fix_vec3 ;(3)聲明一個(gè) unsigned int 變量 x,其值為 0x807f7e7d,及一個(gè) unsigned int 變量 incr,值為 0x01010101 ;(4)建立一個(gè)循環(huán),循環(huán)變量i從O遞增至124,每次遞增4,在該循環(huán)中執(zhí)行以下操作:
(a)用內(nèi)建子字并行函數(shù)_builtin_vis_fmul8xl6使X乘以fix_vec0,將64位乘積結(jié)果放在起始地址為&Cr_r_tab[i]的內(nèi)存空間中;(b)用內(nèi)建子字并行函數(shù) _builtin_vis_fmul8xl6 使 x 分別乘以 fix_vecl、fix_vec2、fix_vec3,將 64 位乘積結(jié)果分別放在起始地址為 &Cb_b_tab[i]、&Cr_g_tab [i]、&Cb_g_tab[i]的內(nèi)存空間中;(c)將 Cb_r_tab [i]、Cb_r_tab [i + 1]、Cb_r_tab [i+2]、Cb_r_tab [i+3]、Cb_b_tab [i]、Cb_b_tab [i+1]、Cb_b_tab [i+2]、Cb_b_tab [i+3]、Cr_g_tab [i]、Cr_g_tab [i+1]、Cr_g_tab [i+2]、Cr_g_tab [i+3]、Cb_g_tab [i]、Cb_g_tab [i+1]、Cb_g_tab [i+2]、Cb_g_tab [i+3]分別右移7位取負(fù);(d)令 X 減去 incr。(5)令 X 等于 0x00010203 ;(6)建立一個(gè)循環(huán),循環(huán)變量i從128遞增至252,每次遞增4,在該循環(huán)中執(zhí)行以下操作:(a)用內(nèi)建子字并行函數(shù)_builtin_vis_fmul8xl6使X乘以fix_vec0,將64位乘積結(jié)果放在起始地址為&Cr_r_tab[i]的內(nèi)存空間中;(b)用內(nèi)建子字并行函數(shù) _builtin_vis_fmul8xl6 使 x 分別乘以 fix_vecl、fix_vec2、fix_vec3,將 64 位乘積結(jié)果分別放在起始地址為 &Cb_b_tab[i]、&Cr_g_tab [i]、&Cb_g_tab[i]的內(nèi)存空間中;(c)將 Cb_r_tab [i]、Cb_r_tab [i + 1]、Cb_r_tab [i+2]、Cb_r_tab [i+3]、Cb_b_tab [i]、Cb_b_tab [i+1]、Cb_b_tab [i+2]、Cb_b_tab [i+3]、Cr_g_tab [i]、Cr_g_tab [i+1]、Cr_g_tab [i+2]、Cr_g_tab [i+3]、Cb_g_tab[i]、Cb_g_tab [i+1]、Cb_g_tab [i+2]、Cb_g_tab [i+3]分別右移7位;(d)令 X 加上 incr。(7)以上完成了查值表的建立,將一組YCbCr值轉(zhuǎn)換成RGB值的方法是,將Y值加上Cr_R_tab [Cr]的值得到R,將Y值減去Cb_G_tab [Cb]與Cr_G_tab [Cr]的值得到G,將Y值加上Cb_B_tab [Cb]的值得到B,最后將得到的RGB值限定在至MAXJSAMPLE之內(nèi),若RGB中的某個(gè)值小于O則將該值改為0,若大于MAXJSAMPLE則將值改為MAXJSAMPLE ;2、RGB顏色空間到Y(jié)CbCr顏色空間變換的子字并行化實(shí)施方法:(I)聲明大小為 MAXJSAMPLE+1 的 9 個(gè) short 類型數(shù)組 R_Y_tab、G_Y_tab、B_Y_tab、R_Cb_tab、G_Cb_tab、B_Cb_tab、R_Cr_tab、G_Cr_tab、B_Cr_tab 作為查值表;(2)將 0.29900 乘以 216 后取整,記為 FIX_0_29900,將 4 個(gè) FIX_0_29900 的值存放在一個(gè)64位的變量中,這里記為fix_vec0。同樣地,將0.58700、0.11400,0.16874、
0.33126,0.50000,0.50000,0.41869,0.08131 分別乘以 216 取整后得到 8 個(gè) 64 位變量 fix_vecl、fix_vec2> fix_vec3> fix_vec4> fix_vec5> fix_vec6> fix_vec7> fix_vec8 ;(3)聲明一個(gè) unsigned int 變量 x,其值為 0,及一個(gè) unsigned int 變量 incr,值為 0x01010101 ;(4)建立一個(gè)循環(huán),循環(huán)變量i從O遞增至252,每次遞增4,在該循環(huán)中執(zhí)行以下操作:(a)用內(nèi)建子字并行函數(shù)_builtin_vis_fmul8xl6使X乘以fix_vec0,將64位乘積結(jié)果放在起始地址為&R_Y_tab[i]的內(nèi)存空間中;(b)同樣地,用內(nèi)建子字并行函數(shù)_builtin_vis_fmul8xl6使X分別乘以fix_vecl、fix_vec2> fix_vec3> fix_vec4> fix_vec5> fix_vec6> fix_vec7> fix_vec8,將 64 位乘積結(jié)果分別放在起始地址為 &G_Y_tab [i]、&B_Y_tab [i]、&R_Cb_tab [i]、&G_Cb_tab [i]、&B_Cb_tab [i]、&R_Cr_tab [i]、&G_Cr_tab [i]、&B_Cr_tab [i]的內(nèi)存空間中;(c)將 R_Y_tab [i]、G_Y_tab [i]、B_Y_tab [i]、R_Cb_tab [i]、G_Cb_tab [i]、B_Cb_tab [i]、R_Cr_tab [i]、G_Cr_tab [i]、B_Cr_tab [i]、R_Y_tab [i+1]、G_Y_tab [i+1]、B_Y_tab [i + 1]、R_Cb_tab [i + 1]、G_Cb_tab [i + 1]、B_Cb_tab [i + 1]、R_Cr_tab [i + 1]、G_Cr_tab [i+1]、B_Cr_tab [i+1]、R_Y_tab [i+2]、G_Y_tab [i+2]、B_Y_tab [i+2]、R_Cb_tab [i+2]、G_Cb_tab [i+2]、B_Cb_tab [i+2]、R_Cr_tab [i+2]、G_Cr_tab [i+2]、B_Cr_tab [i+2]、R_Y_tab [i+3]、G_Y_tab[i+3]、B_Y_tab [i+3]、R_Cb_tab [i+3]、G_Cb_tab [i+3]、B_Cb_tab [i+3]、R_Cr_tab [i+3]、G_Cr_tab [i+3]、B_Cr_tab [i+3]分別右移 8 位;(d)令 X 加上 incr ;(5)以上完成了查值表的建立,將一組RGB值轉(zhuǎn)換成YCbCr值的方法是:R_Y_tab [R]加 G_Y_tab[G]加 B_Y_tab[B]得到 Y,-R_Cb_tab [R]減 G_Cb_tab[G]加 B_Cb_tab [B]再加上 CENTERJSAMPLE 得到 Cb,R_Cr_tab [R]再加上 CENTERJSAMPLE 得到 Cr。該實(shí)例經(jīng)在裝有國產(chǎn)飛騰1000處理器的計(jì)算機(jī)上測試,比未采用子字并行的顏色空間變換方法速度提升119.37%。
權(quán)利要求
1.一種顏色空間變換的子字并行方法,其特征是該方法步驟如下: (1)YCbCr顏色空間到RGB顏色空間變換的子字并行化方法: DYCbCr顏色空間到RGB顏色空間的變換公式為:
全文摘要
本發(fā)明一種顏色空間變換的子字并行方法主要包括以下內(nèi)容利用計(jì)算機(jī)處理器的子字并行指令對YCbCr到RGB的顏色空間變換以及RGB到Y(jié)CbCr的顏色空間變換過程進(jìn)行并行優(yōu)化。其主要途徑是先利用子字并行指令建立查值表,然后利用查值表進(jìn)行顏色空間變換。本發(fā)明通過利用計(jì)算機(jī)處理器的子字并行指令提升了顏色空間的變換效率。
文檔編號H04N9/64GK103079079SQ20131002383
公開日2013年5月1日 申請日期2013年1月23日 優(yōu)先權(quán)日2013年1月23日
發(fā)明者鄒鵬, 呂雅帥, 吳玲達(dá), 趙忠文, 王宇, 楊超, 王敏, 郭靜 申請人:中國人民解放軍裝備學(xué)院