一种基于浮点像素数据的图像Alpha混合方法
技术领域
本发明涉及计算机图形处理领域,具体涉及一种基于浮点像素数据的图像Alpha混合方法。
背景技术
Alpha混合单元是GPU(Graphics Processing Unit)完成图像混合功能的关键模块,处于图形渲染管线的末端,承担着前景像素与背景像素混合的作用。单一的Alpha混合方式会带来生硬的视觉体验,针对不同的绘制场景,GPU采用多样的混合方式以还原现实世界的视见关系,从而提高绘制场景的真实性。近年来,随着半导体工艺的进步和计算机图形学的发展,计算机合成图像的质量得到了极大提高,图像的混合方式对场景真实性的影响更加突出。
现有图像混合方法中的混合方式采用混合软件-操作系统-CPU的处理流程,操作系统的延迟以及CPU较慢的处理速度都会降低混合速度。此外,现有图像混合方法中硬件混合方式一般只采用乘加混合方式,混合方式单一,不能满足特定图像的混合。
发明内容
本发明的目的是解决现有图像混合方法存在速度慢、混合方式单一的技术问题,提供了一种基于浮点像素数据的图像Alpha混合方法。
本发明的技术方案是:
一种基于浮点像素数据的图像Alpha混合方法,包括以下步骤:
1)获取浮点源颜色FP_Cs、浮点目标颜色FP_Cd以及颜色常量;
2)进行1-FP_As操作,FP_As为浮点源颜色的Alpha值;
3)选取1-FP_As与FP_Ad中较大的值作为M,M=Max(1-FP_As,FP_Ad),FP_Ad为浮点目标颜色的Alpha值;
4)获取浮点源因子FP_S与浮点目标因子FP_D:
从浮点源颜色、浮点目标颜色、颜色常量、步骤3)的M值以及常数0中选择一项作为浮点源因子;从浮点源颜色、浮点目标颜色、颜色常量、步骤3)的M值以及常数0中选择一项作为浮点目标因子FP_D;
5)对浮点源颜色、浮点目标颜色、浮点源因子和浮点目标因子进行处理,获得浮点像素混合结果;
6)进行浮点像素混合结果溢出判断:
当浮点像素混合结果大于等于1时,将浮点像素混合结果替换为1;
当浮点像素混合结果小于等于0时,将浮点像素混合结果替换为0;
当浮点像素混合结果在0与1之间时,将浮点像素混合结果直接输出。
进一步地,
步骤5)具体为,
5.1)将浮点源颜色与浮点源因子相乘,浮点目标颜色与浮点目标因子相乘,公式为FP_Cs×FP_S,FP_Cd×FP_D;
5.2)将步骤5.1)中的乘法值相加作为浮点像素混合结果,公式为FP_Cs×FP_S+FP_Cd×FP_D;
或者,
5.1)将浮点源颜色与1-浮点源因子相乘,浮点目标颜色与1-浮点目标因子相乘,公式为FP_Cs×(1-FP_S),FP_Cd×(1-FP_D);
5.2)将步骤5.1)中的乘法值相加作为浮点像素混合结果,公式为FP_Cs×(1-FP_S)+FP_Cd×(1-FP_D)。
或者,
5.1)将浮点源颜色与浮点源因子相乘,浮点目标因子与0-浮点目标颜色相乘,公式为FP_Cs×FP_S,(0-FP_Cd)×FP_D;
5.2)将步骤5.1)中的乘法值相加作为浮点像素混合结果,公式为FP_Cs×FP_S+(0-FP_Cd)×FP_D;
或者,
5.1)将浮点源颜色与1-浮点源因子相乘,1-浮点目标因子与0-浮点目标颜色相乘,公式为FP_Cs×(1-FP_S),(0-FP_Cd)×(1-FP_D);
5.2)将步骤5.1)中的乘法值相加作为浮点像素混合结果,公式为FP_Cs×(1-FP_S)+(0-FP_Cd)×(1-FP_D)。
或者,
5.1)将0-浮点源颜色与浮点源因子相乘,浮点目标因子与浮点目标颜色相乘,公式为(0-FP_Cs)×FP_S;
5.2)将步骤5.1)中的乘法值相加作为浮点像素混合结果,公式为(0-FP_Cs)×FP_S+FP_Cd×FP_D;
或者
5.1)将0-浮点源颜色与1-浮点源因子相乘,1-浮点目标因子与浮点目标颜色相乘,公式为(0-FP_Cs)×(1-FP_S),FP_Cd×(1-FP_D);
5.2)将步骤5.1)中的乘法值相加作为浮点像素混合结果,公式为(0-FP_Cs)×(1-FP_S)+FP_Cd×(1-FP_D)。
进一步地,步骤5)执行完成后还进行下列操作:
最大值混合:比较浮点目标颜色与步骤5)中浮点像素混合结果的大小,选择较大的值作为浮点像素混合结果。
或者,步骤5)执行完成后还进行下列操作:
最小值混合:比较浮点目标颜色与步骤5)中浮点像素混合结果的大小,选择较小的值作为浮点像素混合结果。
进一步地,步骤4)中还包括Alpha扩展操作,获取浮点源因子和浮点目标因子后,将(As,Bs,Gs,Rs)替换为(As,As,As,As),(Ad,Bd,Gd,Rd)替换为(Ad,Ad,Ad,Ad);其中,As、Bs、Gs、Rs分别为浮点源因子的Alpha值、蓝色值、绿色值和红色值,Ad、Bd、Gd、Rd分别为浮点目标因子的Alpha值、蓝色值、绿色值和红色值。
进一步地,步骤2)中的浮点源颜色Alpha值,具体采用外部输入的Alpha值或常数1。
进一步地,步骤3)中的浮点目标颜色的Alpha值,具体采用外部输入的Alpha值。
本发明与现有技术相比,具有以下技术效果:
1.相同的混合方式下,本发明与现有软件图像混合技术相比,混合速度呈指数倍提高。
2.本发明在支持现有混合方式的基础上,增加了最大值混合与最小值混合两种混合方式,减少了冗余图像的混合。
3.本发明减少了混合流程,提高了混合速度,实现了乘加混合、减色混合、逆向减色混合、最大值混合以及最小值混合五种混合方式,解决了混合方式少的问题。
4.本发明提出专用图像Alpha混合方法,可将此方法设置在处理芯片上,所以可采用硬件方式实现,解决了图像混合速度慢,混合方式少的问题。
附图说明
图1为本发明浮点像素数据处理流程图。
具体实施方式
以下结合附图和具体实施例对本发明的内容作进一步详细描述:
本发明支持Alpha混合方法实现五种混合模式,如表1所示。
表1混合模式类型表
编号 |
公式 |
描述 |
1 |
C<sub>s</sub>*S+C<sub>d</sub>*D |
乘加混合 |
2 |
C<sub>d</sub>*D‐C<sub>s</sub>*S |
逆向减色混合 |
3 |
C<sub>s</sub>*S‐C<sub>d</sub>*D |
减色混合 |
4 |
min(C<sub>s</sub>*S+C<sub>d</sub>*D,C<sub>d</sub>) |
最小值混合 |
5 |
max(C<sub>s</sub>*S+C<sub>d</sub>*D,C<sub>d</sub>) |
最大值混合 |
源因子与目标因子支持5种数据选择,如表2所示。
表2混合因子支持的数据类型
一种基于浮点像素数据的图像Alpha混合方法,包括以下步骤:
1)获取浮点源颜色FP_Cs、浮点目标颜色FP_Cd以及颜色常量等像素信息,进行数据传递;
2)进行1-FP_As操作,FP_As为浮点源颜色的Alpha值,浮点源颜色Alpha值选择具体为:当需要图像完全不透明时,选择常数1,当图像具有半透明属性时,选择外部输入Alpha值;
3)选择1-FP_As与FP_Ad中较大的值作为下一步步骤数据选择的一种选项,公式为Max(1-FP_As,FP_Ad),FP_Ad为浮点目标颜色的Alpha值;
4)在浮点源颜色、浮点目标颜色、步骤3)处理的结果、颜色常量以及常数0中进行混合因子数据选择,得到浮点源因子FP_S和浮点目标因子FP_D;
步骤4)中还可包括Alpha扩展操作,获取浮点源因子和浮点目标因子后,将(As,Bs,Gs,Rs)替换为(As,As,As,As),(Ad,Bd,Gd,Rd)替换为(Ad,Ad,Ad,Ad);其中As,Bs,Gs,Rs分别为源因子的Alpha值、蓝色值、绿色值和红色值,Ad,Bd,Gd,Rd分别为目标因子的Alpha值、蓝色值、绿色值和红色值;
5)对浮点源颜色、浮点目标颜色、浮点源因子和浮点目标因子进行处理,获得浮点像素混合结果;
当进行最大值混合时,上述步骤5)执行完成后还可进行下列操作:
比较浮点目标颜色与步骤5)结果的大小,选择较大的值作为最终像素混合结果。
当进行最小值混合时,上述步骤5)执行完成后还可进行下列操作:
比较浮点目标颜色与步骤5)结果的大小,选择较小的值作为最终像素混合结果。
6)进行浮点像素混合结果溢出判断;
当浮点像素混合结果大于等于1时,将浮点像素混合结果替换为1;
当浮点像素混合结果小于等于0时,将浮点像素混合结果替换为0;
当浮点像素混合结果介于0与1之间时,将浮点像素混合结果直接输出。
实施例1
实现浮点乘加混合方式执行以下步骤:
1)获取浮点源颜色FP_Cs、浮点目标颜色FP_Cd以及颜色常量等像素信息并进行数据传递;
2)进行1-FP_As操作,FP_As为浮点源颜色的Alpha值;
3)选择1-FP_As与FP_Ad中较大的值作为下一步数据选择的一种选项,公式为M=Max(1-FP_As,FP_Ad),FP_Ad为浮点目标颜色的Alpha值;
4)获取浮点源因子FP_S与浮点目标因子FP_D;
选择浮点源颜色、浮点目标颜色、颜色常量、步骤3)的M值以及常数0中的一项作为浮点源因子;选择浮点源颜色、浮点目标颜色、颜色常量、步骤3)的M值以及常数0中的一项作为浮点目标因子;
5)将浮点源颜色与浮点源因子相乘,浮点目标颜色与浮点目标因子相乘,公式为FP_Cs×FP_S,FP_Cd×FP_D,;将上述乘法值相加作为浮点像素混合结果,公式为FP_Cs×FP_S+FP_Cd×FP_D;
或者,将浮点源颜色与1-浮点源因子相乘,浮点目标颜色与1-浮点目标因子相乘,公式为FP_Cs×(1-FP_S),FP_Cd×(1-FP_D);将上述乘法值相加作为浮点像素混合结果,公式为FP_Cs×(1-FP_S)+FP_Cd×(1-FP_D);
6)进行浮点混合结果溢出判断;
当浮点像素混合结果大于等于1时,将浮点像素混合结果替换为1;
当浮点像素混合结果小于等于0时,将浮点像素混合结果替换为0;
当浮点像素混合结果在0与1之间时,将浮点像素混合结果直接输出。
实施例2
实现浮点减色混合方式执行以下步骤:
1)获取浮点源颜色FP_Cs、浮点目标颜色FP_Cd以及颜色常量等像素信息并进行数据传递;
2)进行1-FP_As操作,FP_As为浮点源颜色的Alpha值;
3)选择1-FP_As与FP_Ad中较大的值作为下一步数据选择的一种选项,公式为M=Max(1-FP_As,FP_Ad),FP_Ad为浮点目标颜色FP_Cd的Alpha值;
4)在浮点源颜色、浮点目标颜色、步骤3)的M值、颜色常量以及常数0中进行混合因子数据选择,得到浮点源因子FP_S和浮点目标因子FP_D;
5)将浮点源颜色与浮点源因子相乘,浮点目标因子与0-浮点目标颜色相乘,公式为FP_Cs×FP_S,(0-FP_Cd)×FP_D;将上述乘法值相加作为浮点像素混合结果,公式为FP_Cs×FP_S+(0-FP_Cd)×FP_D;
或者,将浮点源颜色与1-浮点源因子相乘,1-浮点目标因子与0-浮点目标颜色相乘,公式为FP_Cs×(1-FP_S),(0-FP_Cd)×(1-FP_D);将上述乘法值相加作为浮点像素混合结果,公式为FP_Cs×(1-FP_S)+(0-FP_Cd)×(1-FP_D)。
6)进行浮点混合结果溢出判断;
当浮点像素混合结果大于等于1时,将浮点像素混合结果替换为1;
当浮点像素混合结果小于等于0时,将浮点像素混合结果替换为0;
当浮点像素混合结果在0与1之间时,将浮点像素混合结果直接输出。
实施例3
实现浮点逆向减色混合方式执行以下步骤:
1)获取浮点源颜色FP_Cs、浮点目标颜色FP_Cd以及颜色常量等像素信息并进行数据传递;
2)进行1-FP_As操作,FP_As为浮点源颜色的Alpha值;
3)选择1-FP_As与FP_Ad中较大的值作为下一步数据选择的一种选项,公式为M=Max(1-FP_As,FP_Ad),FP_Ad为浮点目标颜色的Alpha值;
4)获取浮点源因子FP_S与浮点目标因子FP_D;
选择浮点源颜色、浮点目标颜色、颜色常量、步骤3)的M值以及常数0中的一项作为浮点源因子;
选择浮点源颜色、浮点目标颜色、颜色常量、步骤3)的M值以及常数0中的一项作为浮点目标因子FP_D;
5)将0-浮点源颜色与浮点源因子相乘,浮点目标因子与浮点目标颜色相乘,公式为(0-FP_Cs)×FP_S,FP_Cd×FP_D;将上述乘法值相加作为浮点像素混合结果,公式为(0-FP_Cs)×FP_S+FP_Cd×FP_D;
或者,将0-浮点源颜色与1-浮点源因子相乘,1-浮点目标因子与浮点目标颜色相乘,公式为(0-FP_Cs)×(1-FP_S),FP_Cd×(1-FP_D);将上述乘法值相加作为浮点像素混合结果,公式为(0-FP_Cs)×(1-FP_S)+FP_Cd×(1-FP_D)。
6)进行浮点混合结果溢出判断;
当浮点像素混合结果大于等于1时,将浮点像素混合结果替换为1;
当浮点像素混合结果小于等于0时,将浮点像素混合结果替换为0;
当浮点像素混合结果在0与1之间时,将浮点像素混合结果直接输出。
实施例4
实现浮点最小值混合方式执行以下步骤:
1)获取浮点源颜色FP_Cs、浮点目标颜色FP_Cd以及颜色常量等像素信息并进行数据传递;
2)进行1-FP_As操作,FP_As为浮点源颜色的Alpha值;
3)选择1-FP_As与FP_Ad中较大的值作为下一步数据选择的一种选项,公式为M=Max(1-FP_As,FP_Ad),FP_Ad为浮点目标颜色FP_Cd的Alpha值;
4)获取浮点源因子FP_S与浮点目标因子FP_D:
选择浮点源颜色、浮点目标颜色、颜色常量、步骤3)的M值以及常数0中的一项作为浮点源因子;
选择浮点源颜色、浮点目标颜色、颜色常量、步骤3)的M值以及常数0中的一项作为浮点目标因子;
5)将浮点源颜色与浮点源因子相乘,浮点目标颜色与浮点目标因子相乘,公式为FP_Cs×FP_S,FP_Cd×FP_D,将上述乘法值相加作为浮点像素混合结果,公式为FP_Cs×FP_S+FP_Cd×FP_D;
6)比较浮点目标颜色与步骤5)结果的大小,选择较小的值作为像素混合结果公式为,min(FP_Cd,FP_Cs×FP_S+FP_Cd×FP_D);
7)进行浮点混合结果溢出判断;
当浮点像素混合结果大于等于1时,将浮点像素混合结果替换为1;
当浮点像素混合结果小于等于0时,将浮点像素混合结果替换为0;
当浮点像素混合结果在0与1之间时,将浮点像素混合结果直接输出。
实施例5
实现浮点最大值混合方式执行以下步骤:
1)获取浮点源颜色FP_Cs、浮点目标颜色FP_Cd以及颜色常量等像素信息并进行数据传递;
2)进行1-FP_As操作,FP_As为浮点源颜色的Alpha值;
3)选择1-FP_As与FP_Ad中较大的值作为下一步数据选择的一种选项,公式为M=Max(1-FP_As,FP_Ad),FP_Ad为浮点目标颜色的Alpha值;
4)产生浮点源因子FP_S与浮点目标因子FP_D;
选择浮点源颜色、浮点目标颜色、颜色常量、步骤3)的M值以及常数0中的一项作为浮点源因子;
选择浮点源颜色、浮点目标颜色、颜色常量、步骤3)的M值以及常数0中的一项作为浮点目标因子;
5)将浮点源颜色与浮点源因子相乘,浮点目标颜色与浮点目标因子相乘,公式为FP_Cs×FP_S,FP_Cd×FP_D;将上述乘法值相加作为浮点像素混合结果,公式为FP_Cs×FP_S+FP_Cd×FP_D;
6)比较浮点目标颜色与步骤5)结果的大小,选择较大的值作为像素混合结果公式为,max(FP_Cd,FP_Cs×FP_S+FP_Cd×FP_D);
7)进行浮点混合结果溢出判断;
当浮点像素混合结果大于等于1时,将浮点像素混合结果替换为1;
当浮点像素混合结果小于等于0时,将浮点像素混合结果替换为0;
当浮点像素混合结果在0与1之间时,将浮点像素混合结果直接输出。