一种颜色空间变换的子字并行方法

文档序号:7873308阅读:239来源:国知局
专利名称:一种颜色空间变换的子字并行方法
技术领域
本发明涉及利用计算机处理器的子字并行指令对YCbCr与RGB颜色空间相互变换过程进行并行优化的方法,可应用于计算机图像处理与视频处理程序中。
背景技术
颜色空间也称色彩模型(又称色彩空间或色彩系统)它的用途是在某些标准下用通常可接受的方式对色彩加以说明。本质上,色彩模型是坐标系统和子空间的阐述。YCbCr是DVD、摄像机、数字电视等消费类视频产品中常用的色彩编码方案。其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到图像质量的变化。主要的子采样格式有YCbCr4:2:0,YCbCr4:2:2和YCbCr4:4: 4。RGB是通过红绿蓝三原色来描述颜色的颜色空间(R = Red、G = Green、B = Blue)。它是最通用的面向硬件的彩色模型。该模型`用于彩色监视器和一大类彩色视频摄像。YCbCr与RGB之间的颜色空间变换被广泛用于计算机图像与视频编解码程序中。在通常的计算机图像与视频处理程序中,YCbCr颜色空间到RGB颜色空间的转换公式为:R = Y+1.40200 X CrG = Y-0.34414 X Cb-0.71414 X CrB = Y+1.77200 X Cb而RGB颜色空间到YCbCr颜色空间的转换公式为: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取值均为整数,RGB取值最小为0,将RGB取值的最大值记作MAXJSAMPLE, MAXJSAMPLE的值通常为255,将RGB取值最大值的一半记作CENTERJSAMPLE,若 MAXJSAMPLE 为奇数,则 CENTERJSAMPLE 为 MAXJSAMPLE+1 的一半,若 MAXJSAMPLE 为偶数,则 CENTERJSAMPLE 为 MAXJSAMPLE 的一半。子字并行是当今大多数处理器所支持的一种数据并行处理方式,它将多个短的数据封装进一个寄存器,然后进行并行处理,以充分利用处理器的数据通路宽度。因此,子字并行可看作一种小规模的SMD(单指令多数据)处理方式。处理器通常通过子字并行指令集来实现对子字并行的支持。如Intel处理器的MMX、SSE系列,AMD的3D Now !系列,SPARC架构处理器的VIS系列等均是用于支持子字并行处理的子字并行指令集。在子字并行中,一个字就是一个数据集。子字是包含在字中的更低精度的数据单元。由于可将同样的指令应用于一个字中的所有子字,因此原来需要若干条指令才能完成的操作,可通过一条子字并行指令来实现。例如,如果一个字长是64位,则一个子字的大小可以是8位,16位和32位。这样,一条指令可以并行处理八个8位子字,四个16位子字,或两个32位子字。由于在图像视频处理等多媒体算法中出现了大量的低精度数据并行,因此,子字并行可在图像视频处理等多媒体算法中发挥重要作用。到目前为止,利用子字并行方法对颜色空间变换进行并行优化的方法尚未见报道。

发明内容
本发明的目的在于利用处理器子字并行指令提升YCbCr与RGB颜色空间相互变换的效率。本发明一种颜色空间变换的子字并行方法的步骤如下:(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取值均为整数,RGB最小取值为0,RGB最大取值MAXJSAMPLE通常为255 ;将RGB最大取值MAXJSAMPLE的一半记作CENTERJSAMPLE,若MAXJSAMPLE为奇数,则 CENTERJSAMPLE 为 MAXJSAMPLE+1 的一半,若 MAXJSAMPLE 为偶数,则 CENTERJSAMPLE为 MAXJSAMPLE 的一半;依据公式①,用子字并行的方法分别建立1.40200XCr,0.34414XCb、
0.71414XCr 与 L 77200XCb 的查值表,记 4 个查值表依次为 Cr_R_tab,Cb_G_tab, Cr_G_tab与Cb_B_tab,以1.40200XCr为例,在进行颜色空间变换时,不用计算1.40200XCr的值,而是直接从Cr_R_tab中取出位置为Cr+CENTERJSAMPLE的值作为1.40200X Cr的计算结果,这四个查值表的构建方法一样,以构建1.40200XCr的查值表为例,其构建方法是:(a)将1.40200乘以215后取整,记为FIX_1_40200,由于FIX_1_40200的值不超过216,将4个FIX_1_40200的值存放在一个64位的变量中,记为f ix_vec,取4个不同的Cr值放入一个64位变量中,记为Cr_vec,用处理器子字并行乘法操作计算fix_vec X Cr_vec的值,将计算结果记为fix_Cr_vec, fix_Cr_vec的字长为64位,存放4个16位的计算结果,在支持子字右移操作的处理器上,用子字右移操作将fiX_Cr_vec中的4个值右移7位;若处理器不支持子字右移操作,则用常规右移操作分别将fiX_Cr_vec中的4个值右移7位,最后将结果放置Cr_R_tab的相应位置;(b)每次取不同的Cr_VeC,即取与上次计算不同的4个Cr值,将步骤(a)不断重复,直至Cr_R_tab的所有项均计算完毕;2)在经过步骤I)之后,将一组YCbCr值转换成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之内,若RGB中的某个值小于O则将该值改为0,若大于MAXJSAMPLE则将值改为MAXJSAMPLE ;⑵RGB颜色空间到YCbCr颜色空间变换的子字并行化方法:I) RGB颜色空间到YCbCr颜色空间的变换公式为: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依据公式②,用子字并行的方法,分别建立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颜色空间的变换方法类似,在进行颜色空间变换时不用计算 0.29900XR、0.58700XG、0.11400XB、0.16874XR、0.33126XG、0.50000XB、
0.50000XR,0.41869XG、0.08131XG的值,而是从查值表中直接取出相应的值;9个查值表的构建方法一样,以构建查值表R_Y_tab为例,其构建方法是:(a)将0.29900乘以216后取整,记为FIX_29900,由于FIX_29900的值不超过216,将4个FIX_29900的值存放在一个64位的变量中,记为f ix_vec,取4个不同的R值放入一个32位或64位变量中,记为R_vec,用处理器子字并行乘法操作计算f ix_vec X R_vec的值,将计算结果记为fix_R_vec, fix_R_vec的字长为64位,存放4个16位的计算结果,在支持子字右移操作的处理器上,利用子字右移操作将f ix_R_vec中的4个值右移8位;若处理器不支持子字右移操作,则用常规右移操作分别将f ix_R_vec中的4个值右移8位,最后将结果放置R_Y_tab的相应位置;(b)每次取不同的R_vec,即取与上次计算不同的4个R值,将步骤(a)不断重复,直至R_Y_tab的所有项均计算完毕;2)在经过步骤I)之后,将一组RGB值转换成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 %。
具体实施例方式下面以支持SPARC v9指令集的处理器(如国产飞腾系列处理器、Oracle公司UltraSPARC TUUltraSPARC T2,UltraSPARC T4处理器等)为例,说明本发明的具体实施方式
(编程实现方法采用C语言),其中MAXJSAMPLE的值为255,CENTERJSAMPLE的值为128:1、YCbCr颜色空间到RGB颜色空间变换的子字并行化实施方法:(I)声明大小为 MAXJSAMPLE+1 的 4 个 short 类型数组 Cr_r_tab、Cb_b_tab、Cr_g_tab、Cb_g_tab作为查值表;(2)将1.40200 乘以 215 后取整,记为 FIX_1_40200,将 4 个 FIX_1_40200 的值存放在一个64位的变量中,记为fix_vec0。同样地,将0.34414,0.71414、1.77200分别乘以215取整后得到 3 个 64 位变量 fix_vecl、fix_vec2、fix_vec3 ;(3)声明一个 unsigned int 变量 x,其值为 0x807f7e7d,及一个 unsigned int 变量 incr,值为 0x01010101 ;(4)建立一个循环,循环变量i从O递增至124,每次递增4,在该循环中执行以下操作:
(a)用内建子字并行函数_builtin_vis_fmul8xl6使X乘以fix_vec0,将64位乘积结果放在起始地址为&Cr_r_tab[i]的内存空间中;(b)用内建子字并行函数 _builtin_vis_fmul8xl6 使 x 分别乘以 fix_vecl、fix_vec2、fix_vec3,将 64 位乘积结果分别放在起始地址为 &Cb_b_tab[i]、&Cr_g_tab [i]、&Cb_g_tab[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。(5)令 X 等于 0x00010203 ;(6)建立一个循环,循环变量i从128递增至252,每次递增4,在该循环中执行以下操作:(a)用内建子字并行函数_builtin_vis_fmul8xl6使X乘以fix_vec0,将64位乘积结果放在起始地址为&Cr_r_tab[i]的内存空间中;(b)用内建子字并行函数 _builtin_vis_fmul8xl6 使 x 分别乘以 fix_vecl、fix_vec2、fix_vec3,将 64 位乘积结果分别放在起始地址为 &Cb_b_tab[i]、&Cr_g_tab [i]、&Cb_g_tab[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值转换成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之内,若RGB中的某个值小于O则将该值改为0,若大于MAXJSAMPLE则将值改为MAXJSAMPLE ;2、RGB颜色空间到YCbCr颜色空间变换的子字并行化实施方法:(I)声明大小为 MAXJSAMPLE+1 的 9 个 short 类型数组 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 个 FIX_0_29900 的值存放在一个64位的变量中,这里记为fix_vec0。同样地,将0.58700、0.11400,0.16874、
0.33126,0.50000,0.50000,0.41869,0.08131 分别乘以 216 取整后得到 8 个 64 位变量 fix_vecl、fix_vec2> fix_vec3> fix_vec4> fix_vec5> fix_vec6> fix_vec7> fix_vec8 ;(3)声明一个 unsigned int 变量 x,其值为 0,及一个 unsigned int 变量 incr,值为 0x01010101 ;(4)建立一个循环,循环变量i从O递增至252,每次递增4,在该循环中执行以下操作:(a)用内建子字并行函数_builtin_vis_fmul8xl6使X乘以fix_vec0,将64位乘积结果放在起始地址为&R_Y_tab[i]的内存空间中;(b)同样地,用内建子字并行函数_builtin_vis_fmul8xl6使X分别乘以fix_vecl、fix_vec2> fix_vec3> fix_vec4> fix_vec5> fix_vec6> fix_vec7> fix_vec8,将 64 位乘积结果分别放在起始地址为 &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]的内存空间中;(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值转换成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。该实例经在装有国产飞腾1000处理器的计算机上测试,比未采用子字并行的颜色空间变换方法速度提升119.37%。
权利要求
1.一种颜色空间变换的子字并行方法,其特征是该方法步骤如下: (1)YCbCr颜色空间到RGB颜色空间变换的子字并行化方法: DYCbCr颜色空间到RGB颜色空间的变换公式为:
全文摘要
本发明一种颜色空间变换的子字并行方法主要包括以下内容利用计算机处理器的子字并行指令对YCbCr到RGB的颜色空间变换以及RGB到YCbCr的颜色空间变换过程进行并行优化。其主要途径是先利用子字并行指令建立查值表,然后利用查值表进行颜色空间变换。本发明通过利用计算机处理器的子字并行指令提升了颜色空间的变换效率。
文档编号H04N9/64GK103079079SQ20131002383
公开日2013年5月1日 申请日期2013年1月23日 优先权日2013年1月23日
发明者邹鹏, 吕雅帅, 吴玲达, 赵忠文, 王宇, 杨超, 王敏, 郭静 申请人:中国人民解放军装备学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1