本发明涉及图像格式转换技术领域,更具体的,涉及一种rgb格式图像转yuv420格式的方法及装置。
背景技术:
随着服务器和网络的发展,桌面虚拟化技术的应用越来越广泛,但是,在推广过程中,虚拟化技术也带来了一些新的问题,尤其是在对计算机辅助设计软件的支持方面表现的尤为明显。
众所周知,计算机辅助设计软件涉及大量计算、渲染等复杂工作,一般需要专业显卡支持,如nvidia(中文名称:英伟达)的m4000等。vdi(英文全称:virtualdesktopinfrastructure)是一种基于服务器的计算模型,为企业级的实现桌面系统的远程动态访问与数据中心托管技术,vdi支持计算机辅助设计软件一般采用显卡虚拟化的方案,目前主流的显卡虚拟化方案分为硬件虚拟化和gpu共享。
无论是采用gpu共享还是gpu硬件虚拟化的方案,都要解决gpu渲染后的图像如何传输出来的问题,计算机渲染出来的图像,大多采用srgb标准,而rgb24和rgb32又是其主流的渲染后图像的存储格式,当前vmware、华为、citrix基本上采用基于h264的编码方案,在进行h264编码时,首先要把rgb格式转换为yuv420格式。
现有的rgb格式转换为yuv420格式的方法,在vdi环境下,计算机辅助设计场景中画面关键细节易丢失,显示效果差。
技术实现要素:
有鉴于此,本发明提供了一种rgb格式图像转yuv420格式的方法及装置,将各个像素分块中每个像素的各个颜色分量,映射到线性空间,再求平均,并将平均值逆映射到相应的颜色分量的0~255范围内,得到各个像素分块的各个修正颜色分量,避免了计算机辅助设计场景中画面关键细节丢失的问题,改善了显示效果。
具体技术方案如下:
一种rgb格式图像转yuv420格式的方法,包括:
将待处理的rgb格式图像分割为多个2*2的像素分块;
根据预设标准规定的系数,以及所述待处理的rgb格式图像中的各个像素的r、g、b颜色分量,计算各个所述像素的y分量;
分别将每一个所述像素分块中每个像素的r、g、b颜色分量映射到线性空间,在线性空间分别求取每个所述像素分块中每个颜色分量的平均值,并把各个所述平均值映射到相应颜色分量的0~255范围内,分别得到各个所述像素分块的r、g、b修正颜色分量;
根据所述预设标准规定的系数,以及各个所述像素分块的r、g、b修正颜色分量,分别计算各个所述像素分块的u分量和v分量,结合各个所述像素的y分量,得到yuv420格式的图像。
优选的,当所述待处理的rgb格式图像为rgb32格式时,在所述将待处理的rgb格式图像分割为多个2*2的像素分块,之前还包括:
将待处理的rgb32格式图像转化为rgb24格式图像。
优选的,所述分别将每一个所述像素分块中每个像素的r、g、b颜色分量映射到线性空间,包括:
分别将每一个所述像素分块中每个像素的r、g、b颜色分量除以255,得到范围为0~1的浮点数;
将各个所述浮点数分别作幂为gamma的幂运算,得到每一个所述像素分块中每个像素的r、g、b颜色分量的线性值。
优选的,所述在线性空间分别求取每个所述像素分块中每个颜色分量的平均值,包括:
当每个所述像素的各个颜色分量的线性值分别为r′、g′和b′时,每个所述像素分块中每个颜色分量的平均值分别为:ravg=(r1′+r2′+r3′+r4′)/4、gavg=(g1′+g2′+g3′+g4′)/4和bavg=(b1′+b2′+b3′+b4′)/4,所述r1′、r2′、r3′和r4′分别为每个所述像素分块中各个像素的r颜色分量线性值,所述g1′、g2′、g3′和g4′分别为每个所述像素分块中各个像素的g颜色分量线性值,所述b1′、b2′、b3′和b4′分别每个所述像素分块中各个像素的b颜色分量线性值。
优选的,所述把各个所述平均值映射到相应颜色分量的0~255范围内,分别得到各个所述像素分块的r、g、b修正颜色分量,包括:
定义表linear_2_gamma,表linear_2_gamma中有t_size+1个索引项,t_size为正整数,xt_pos=xavg/(1/t_size),xt_pos的计算结果向下取整,使xt_pos与表linear_2_gamma中的一个索引项相对应,其中,x为r颜色分量、g颜色分量或b颜色分量,xavg为所述像素分块x颜色分量的平均值;
定义linear_2_gamma[xt_pos]=pow(xt_pos/t_size,1/gamma)*255,分别将各个所述像素分块中每个颜色分量的平均值映射到相应的颜色分量的0~255范围内,得到各个所述像素分块中每个颜色分量的映射值;
对各个所述像素分块中每个颜色分量的映射值进行修正,
优选的,所述把各个所述平均值映射到相应颜色分量的0~255范围内,分别得到各个所述像素分块的r、g、b修正颜色分量,包括:
将各个所述平均值分别作幂为1/gamma的幂运算,分别得到每一个所述像素分块中r、g、b颜色分量的映射值;
分别将每一个所述像素分块中r、g、b颜色分量的映射值乘以255,并将计算结果取整得到各个所述像素分块的r、g、b修正颜色分量。
优选的,上述gamma的值为2.2。
一种rgb格式图像转yuv420格式的装置,包括:
分割单元,用于将待处理的rgb格式图像分割为多个2*2的像素分块;
第一计算单元,用于根据预设标准规定的系数,以及所述待处理的rgb格式图像中的各个像素的r、g、b颜色分量,计算各个所述像素的y分量;
修正单元,用于分别将每一个所述像素分块中每个像素的r、g、b颜色分量映射到线性空间,在线性空间分别求取每个所述像素分块中每个颜色分量的平均值,并把各个所述平均值映射到相应颜色分量的0~255范围内,分别得到各个所述像素分块的r、g、b修正颜色分量;
第二计算单元,用于根据所述预设标准规定的系数,以及各个所述像素分块的r、g、b修正颜色分量,分别计算各个所述像素分块的u分量和v分量,结合各个所述像素的y分量,得到yuv420格式的图像。
优选的,当所述待处理的rgb格式图像为rgb32格式时,所述装置还包括:
转化单元,用于将待处理的rgb32格式图像转化为rgb24格式图像。
优选的,所述修正单元包括映射子单元;
所述映射子单元,用于分别将每一个所述像素分块中每个像素的r、g、b颜色分量除以255,得到范围为0~1的浮点数;将各个所述浮点数分别作幂为gamma的幂运算,得到每一个所述像素分块中每个像素的r、g、b颜色分量的线性值。
优选的,所述修正单元包括计算子单元;
所述计算子单元,用于当每个所述像素的各个颜色分量的线性值分别为r′、g′和b′时,每个所述像素分块中每个颜色分量的平均值分别为:ravg=(r1′+r2′+r3′+r4′)/4、gavg=(g1′+g2′+g3′+g4′)/4和bavg=(b1′+b2′+b3′+b4′)/4,所述r1′、r2′、r3′和r4′分别为每个所述像素分块中各个像素的r颜色分量线性值,所述g1′、g2′、g3′和g4′分别为每个所述像素分块中各个像素的g颜色分量线性值,所述b1′、b2′、b3′和b4′分别每个所述像素分块中各个像素的b颜色分量线性值。
优选的,所述修正单元包括第一逆映射子单元,
所述第一逆映射子单元,用于定义表linear_2_gamma,表linear_2_gamma中有t_size+1个索引项,t_size为正整数,xt_pos=xavg/(1/t_size),xt_pos的计算结果向下取整,使xt_pos与表linear_2_gamma中的一个索引项相对应,其中,x为r颜色分量、g颜色分量或b颜色分量,xavg为所述像素分块x颜色分量的平均值;定义linear_2_gamma[xt_pos]=pow(xt_pos/t_size,1/gamma)*255,分别将各个所述像素分块中每个颜色分量的平均值映射到相应的颜色分量的0~255范围内,得到各个所述像素分块中每个颜色分量的映射值;对各个所述像素分块中每个颜色分量的映射值进行修正,
优选的,所述修正单元包括第二逆映射子单元;
所述第二逆映射子单元,用于将各个所述平均值分别作幂为1/gamma的幂运算,分别得到每一个所述像素分块中r、g、b颜色分量的映射值;分别将每一个所述像素分块中r、g、b颜色分量的映射值乘以255,并将计算结果取整得到各个所述像素分块的r、g、b修正颜色分量。
相对于现有技术,本发明的有益效果如下:
本发明提供的rgb格式图像转yuv420格式的方法及装置,将待处理的rgb格式图像分割为多个2*2的像素分块;根据预设标准规定的系数,以及所述待处理的rgb格式图像中的各个像素的r、g、b颜色分量,计算各个所述像素的y分量;分别将每一个所述像素分块中每个像素的r、g、b颜色分量映射到线性空间,在线性空间分别求取每个所述像素分块中每个颜色分量的平均值,并把各个所述平均值映射到相应颜色分量的0~255范围内,分别得到各个所述像素分块的r、g、b修正颜色分量;避免了现有技术中,由于没有将各个颜色分量的值转换到线性空间,而是直接对像素分块中各个像素的颜色分量相加求平均或固定选择某个像素做采样点,造成vdi环境下计算机辅助设计场景中画面关键细节易丢失的问题。然后再根据r、g、b修正颜色分量分别计算各个像素分块的u分量和v分量,最后结合y分量,得到yuv420格式的图像,改善了图像的显示效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例公开的一种rgb格式图像转yuv420格式的方法流程图;
图2为本发明实施例公开的一种rgb格式图像转yuv420格式的装置结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
发明人经研究发现,现有技术中存在的两种rgb格式图像转yuv420格式的方法,均存在在vdi环境下计算机辅助设计场景中画面关键细节易丢失的问题。
其中,一种现有技术为将待处理的rgb格式图像分割为多个2*2的像素分块,分别将各个像素分块中各个像素的每个颜色分量进行加和求平均,将平均值分别作为各个像素分块每个颜色分量的值,这种方法不符合人类视觉的感知特性,转换后的图像颜色失真严重。
另一种现有技术为将待处理的rgb格式图像分割为多个2*2的像素分块,在各个像素分块中的各个像素中进行下采样选择采样点,将采样点的每个颜色分量的值分别作为各个像素分块每个个颜色分量的值,这种实现方法在自然图像的处理中不存在明显的视觉差别,是因为自然界的图像大都在视觉上连续,而在vdi环境下显示计算机辅助设计图像时,这种方法并不适合,转换后图像颜色失真严重。
有鉴于此,本实施例公开了一种rgb格式图像转yuv420格式的方法,请参阅图1,所述方法包括以下步骤:
s101:将待处理的rgb格式图像分割为多个2*2的像素分块;
具体的,待处理的rgb格式图像可以为rgb32格式或rgb24格式。
rgb24采用r、g、b三原色,即红、绿、蓝三原色,每个颜色分量用8位表示,三个分量加在一起是24位。rgb32除了rgb24包含的24位三原色之外,还增加了8位的alpha位,rgb32可以与rgb等价转换。
需要说明的是,当所述待处理的rgb格式图像为rgb32格式时,在s101之前还包括:
将待处理的rgb32格式图像转化为rgb24格式图像。
可以理解的是,每个2*2的像素分块中都包括4个像素。
s102:根据预设标准规定的系数,以及所述待处理的rgb格式图像中的各个像素的r、g、b颜色分量,计算各个所述像素的y分量;
需要说明的是,所述预设标准可以为itu-rrecommendationbt.601和itu-rrecommendationbt.709等标准,预设标准分别规定y、u、v分量的系数,每个像素都包括r、g、b三个颜色分量,根据itu-rrecommendationbt.601和itu-rrecommendationbt.709等标准规定的系数,以及所述待处理的rgb格式图像中的各个像素的r、g、b三个颜色分量,计算各个所述像素的y分量,由于y分量不涉及下采样,所以不对y分量做过多处理,直接取值。
s103:分别将每一个所述像素分块中每个像素的r、g、b颜色分量映射到线性空间,在线性空间分别求取每个所述像素分块中每个颜色分量的平均值,并把各个所述平均值映射到相应颜色分量的0~255范围内,分别得到各个所述像素分块的r、g、b修正颜色分量;
具体的,所述分别将每一个所述像素分块中每个像素的r、g、b颜色分量映射到线性空间,优选的一种实施方式为:
分别将每一个所述像素分块中每个像素的r、g、b颜色分量除以255,得到范围为0~1的浮点数;
将各个所述浮点数分别作幂为gamma的幂运算,得到每一个所述像素分块中每个像素的r、g、b颜色分量的线性值。
需要说明的是,每个像素的r、g、b分量分别对应0~255级亮度中的某一个值;gamma的值可以根据实际需要进行调整,优选的,gamma的取值范围为(0,5),经过多次实验验证,2.2为gamma的最佳取值,也可以根据实际场景选择(0,5)范围内的其它值。
还需要说明的是,根据实际对图像格式的转换过程中,对于浮点数为0时的处理可以根据实际情况进行调整,在可能的一种情况下,将浮点数0加上一个比较小的数值,这个数值的取值范围为(0,1),一般取0.01,再将浮点数0.01作幂为gamma的幂运算,图像转换后的显示效果可能更理想。用户可以根据实际测试决定是否需要将浮点数0加上一个比较小的数值再进行处理。
具体的,每个所述像素包括r颜色分量、g颜色分量和b颜色分量,所述在线性空间分别求取每个所述像素分块中每个颜色分量的平均值可以有多种方法,其中,一种方法为:
当每个所述像素的各个颜色分量的线性值分别为r′、g′和b′时,每个所述像素分块中每个颜色分量的平均值分别为:ravg=(r1′+r2′+r3′+r4′)/4、gavg=(g1′+g2′+g3′+g4′)/4和bavg=(b1′+b2′+b3′+b4′)/4,所述r1′、r2′、r3′和r4′分别为每个所述像素分块中各个像素的r颜色分量线性值,所述g1′、g2′、g3′和g4′分别为每个所述像素分块中各个像素的g颜色分量线性值,所述b1′、b2′、b3′和b4′分别每个所述像素分块中各个像素的b颜色分量线性值。
另外一种方法为:
当每个所述像素的各个颜色分量的线性值分别为r′、g′和b′时,每个所述像素分块中每个颜色分量的平均值分别为:
具体的,所述把各个所述平均值映射到相应颜色分量的0~255范围内,分别得到各个所述像素分块的r、g、b修正颜色分量,可以有多种方法,优选的一种方法的具体执行步骤如下:
定义表linear_2_gamma,表linear_2_gamma中有t_size+1个索引项,t_size为正整数,xt_pos=xavg/(1/t_size),xt_pos的计算结果向下取整,使xt_pos与表linear_2_gamma中的一个索引项相对应,其中,x为r颜色分量、g颜色分量或b颜色分量,xavg为所述像素分块x颜色分量的平均值;
定义linear_2_gamma[xt_pos]=pow(xt_pos/t_size,1/gamma)*255,分别将各个所述像素分块中每个颜色分量的平均值映射到相应的颜色分量的0~255范围内,得到各个所述像素分块中每个颜色分量的映射值;
对各个所述像素分块中每个颜色分量的映射值进行修正,
以t_size为5为例进行说明,表linear_2_gamma中有6个索引项,r、g、b颜色分量的平均值在[0,1],对应到表linear_2_gamma中,r、g、b颜色分量的平均值分别对应0,0.2,0.4,0.6,0.8,1.0,再将r、g、b颜色分量的平均值在表linear_2_gamma中的对应值分别作幂为1/gamma的幂运算,再乘以255,分别得到每一个所述像素分块中r、g、b颜色分量的映射值,即:
linear_2_gamma[0]=pow(0,1/gamma)*255;
linear_2_gamma[1]=pow(0.2,1/gamma)*255;
linear_2_gamma[2]=pow(0.4,1/gamma)*255;
linear_2_gamma[3]=pow(0.6,1/gamma)*255;
linear_2_gamma[4]=pow(0.8,1/gamma)*255;
linear_2_gamma[5]=pow(1.0,1/gamma)*255。
需要说明的是,每个像素的r、g、b分量分别对应0~255级亮度中的某一个值;gamma的值可以根据实际需要进行调整,优选的,gamma的取值范围为(0,5),经过多次实验验证,2.2为gamma的最佳取值,也可以根据实际场景选择(0,5)范围内的其它值。
最后,利用线性差值法对每一个所述像素分块中r、g、b颜色分量的映射值进行修正。这种修正方法准确率高,使图像的显示效果更理想。
另外一种“把各个所述平均值映射到相应颜色分量的0~255范围内,分别得到各个所述像素分块的r、g、b修正颜色分量”可选的一种具体执行过程如下:
将各个所述平均值分别作幂为1/gamma的幂运算,分别得到每一个所述像素分块中r、g、b颜色分量的映射值;
分别将每一个所述像素分块中r、g、b颜色分量的映射值乘以255,并将计算结果取整得到各个所述像素分块的r、g、b修正颜色分量。
需要说明的是,每个像素的r、g、b分量分别对应0~255级亮度中的某一个值;gamma的值可以根据实际需要进行调整,优选的,gamma的取值范围为(0,5),经过多次实验验证,2.2为gamma的最佳取值,也可以根据实际场景选择(0,5)范围内的其它值。
还需要说明的是,可采用四舍五入的取整方式,向上取整或向下取整都可以。例如:计算结果为1.6,可以将计算结果向上取整为2,或向下取整为1。
s104:根据所述预设标准规定的系数,以及各个所述像素分块的r、g、b修正颜色分量,分别计算各个所述像素分块的u分量和v分量,结合各个所述像素的y分量,得到yuv420格式的图像。
需要说明的是,步骤s104中的预设标准也可以为itu-rrecommendationbt.601和itu-rrecommendationbt.709等标准。
本实施例提供的rgb格式图像转yuv420格式的方法,将待处理的rgb格式图像分割为多个2*2的像素分块;根据预设标准规定的系数,以及所述待处理的rgb格式图像中的各个像素的r、g、b颜色分量,计算各个所述像素的y分量;分别将每一个所述像素分块中每个像素的r、g、b颜色分量映射到线性空间,在线性空间分别求取每个所述像素分块中每个颜色分量的平均值,并把各个所述平均值映射到相应颜色分量的0~255范围内,分别得到各个所述像素分块的r、g、b修正颜色分量;避免了现有技术中,由于没有将各个颜色分量的值转换到线性空间,而是直接对像素分块中各个像素的颜色分量相加求平均或固定选择某个像素做采样点,造成vdi环境下计算机辅助设计场景中画面关键细节易丢失的问题。然后再根据r、g、b修正颜色分量分别计算各个像素分块的u分量和v分量,最后结合y分量,得到yuv420格式的图像,改善了图像的显示效果。
请参阅图2,基于上述实施例公开的rgb格式图像转yuv420格式的方法,本实施例对应公开了一种rgb格式图像转yuv420格式的装置,包括:
需要说明的是,当所述待处理的rgb格式图像为rgb32格式时,所述装置还包括:
转化单元,用于将待处理的rgb32格式图像转化为rgb24格式图像。
若待处理的rgb格式图像为rgb24格式时,直接进行以下单元的操作:
分割单元101,用于将待处理的rgb格式图像分割为多个2*2的像素分块;
第一计算单元102,用于根据预设标准规定的系数,以及所述待处理的rgb格式图像中的各个像素的r、g、b颜色分量,计算各个所述像素的y分量;
需要说明的是,所述预设标准可以为itu-rrecommendationbt.601和itu-rrecommendationbt.709等标准,预设标准分别规定y、u、v分量的系数,每个像素都包括r、g、b三个颜色分量,根据itu-rrecommendationbt.601和itu-rrecommendationbt.709等标准规定的系数,以及所述待处理的rgb格式图像中的各个像素的r、g、b三个颜色分量,计算各个所述像素的y分量,由于y分量不涉及下采样,所以不对y分量做过多处理,直接取值。
修正单元103,用于分别将每一个所述像素分块中每个像素的r、g、b颜色分量映射到线性空间,在线性空间分别求取每个所述像素分块中每个颜色分量的平均值,并把各个所述平均值映射到相应颜色分量的0~255范围内,分别得到各个所述像素分块的r、g、b修正颜色分量;
第二计算单元104,用于根据所述预设标准规定的系数,以及各个所述像素分块的r、g、b修正颜色分量,分别计算各个所述像素分块的u分量和v分量,结合各个所述像素的y分量,得到yuv420格式的图像。
具体的,所述修正单元103包括映射子单元、计算子单元和逆映射子单元,其中,计算子单元和逆映射子单元分别有两种实现方式。
所述映射子单元,用于分别将每一个所述像素分块中每个像素的r、g、b颜色分量除以255,得到范围为0~1的浮点数;将各个所述浮点数分别作幂为gamma的幂运算,得到每一个所述像素分块中每个像素的r、g、b颜色分量的线性值。
所述计算子单元,用于当每个所述像素的各个颜色分量的线性值分别为r′、g′和b′时,每个所述像素分块中每个颜色分量的平均值分别为:ravg=(r1′+r2′+r3′+r4′)/4、gavg=(g1′+g2′+g3′+g4′)/4和bavg=(b1′+b2′+b3′+b4′)/4,所述r1′、r2′、r3′和r4′分别为每个所述像素分块中各个像素的r颜色分量线性值,所述g1′、g2′、g3′和g4′分别为每个所述像素分块中各个像素的g颜色分量线性值,所述b1′、b2′、b3′和b4′分别每个所述像素分块中各个像素的b颜色分量线性值。
另一种计算子单元的实现方式为:
当每个所述像素的各个颜色分量的线性值分别为r′、g′和b′时,每个所述像素分块中每个颜色分量的平均值分别为:
逆映射子单元的两种实现方式分别用第一逆映射子单元和第二逆映射子单元进行说明。
第一逆映射子单元,用于定义表linear_2_gamma,表linear_2_gamma中有t_size+1个索引项,t_size为正整数,xt_pos=xavg/(1/t_size),xt_pos的计算结果向下取整,使xt_pos与表linear_2_gamma中的一个索引项相对应,其中,x为r颜色分量、g颜色分量或b颜色分量,xavg为所述像素分块x颜色分量的平均值;定义linear_2_gamma[xt_pos]=pow(xt_pos/t_size,1/gamma)*255,分别将各个所述像素分块中每个颜色分量的平均值映射到相应的颜色分量的0~255范围内,得到各个所述像素分块中每个颜色分量的映射值;对各个所述像素分块中每个颜色分量的映射值进行修正,
第二逆映射子单元,用于将各个所述平均值分别作幂为1/gamma的幂运算,分别得到每一个所述像素分块中r、g、b颜色分量的映射值;分别将每一个所述像素分块中r、g、b颜色分量的映射值乘以255,并将计算结果取整得到各个所述像素分块的r、g、b修正颜色分量。
需要说明的是,每个像素的r、g、b分量分别对应0~255级亮度中的某一个值;gamma的值可以根据实际需要进行调整,优选的,gamma的取值范围为(0,5),经过多次实验验证,2.2为gamma的最佳取值,也可以根据实际场景选择(0,5)范围内的其它值。
本实施例公开的rgb格式图像转yuv420格式的装置,修正单元103将各个像素分块中每个像素的各个颜色分量,映射到线性空间,再求平均,并将平均值逆映射到相应的颜色分量的0~255范围内,得到各个像素分块的各个修正颜色分量,避免了计算机辅助设计场景中画面关键细节丢失的问题,改善了显示效果。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。