一种基于AVX技术的快速颜色空间转换方法与流程

文档序号:14523225阅读:1613来源:国知局
一种基于AVX技术的快速颜色空间转换方法与流程

本发明涉及视频图像处理领域,具体涉及视频图像处理yuv颜色空间转换为rgb空间,将yuv值快速转换为rgb值。



背景技术:

yuv是被欧洲电视系统采用的颜色编码方案,广泛应用于视频会议、视频监控、电视广播等领域。yuv常用的编码方法包括yuv444、yuv422、yuv420等,其中yuv420能有效地还原真实场景,并降低传输带宽需求,为yuv主流的编码方法。

rgb是工业界的一中颜色标准,通过对红(r)、绿(g)、蓝(b)三个颜色通道的变化以及它们相互之间的叠加来的其他颜色,是目前运用最广的颜色编码方案之一。

在视频图像处理,经常涉及到颜色空间的转换,尤其是yuv转换为rgb,传统的方法需要逐个像素点进行转换,从y、u、v分量转换为r、g、b分量,计算量大,速度慢,当图像分辨率高的情况下该问题尤其突出。



技术实现要素:

本发明的目的在于提出了一种基于avx技术的快速颜色空间转换方法,利用intelavx技术实现yuv420编码快速转换为rgb编码的方法,该方法转换速度快,计算时间短,在分辨率高的情况下效果尤其具有优势。

本发明的技术方案如下:

一种基于avx技术的快速颜色空间转换方法,其特征在于包括如下步骤:

(1)将图像宽度值存放于rcx寄存器、高度值放于rdx寄存器、yuv内存地址位rsi寄存器、rgb内存地址位于rdi寄存器;

(2)通过图像的宽度值和高度值计算u、v分量的起始地址,分别存放于rax和rbx寄存器;

(3)将16,128,298,409,100,208,516,8通过prefetcht1指令加载到cpu的缓存;

(4)将第一行4个像素点的y分量加载到xmm0寄存器,第二行前4个像素点的y分量加载到xmm1寄存器,并将8个值扩展为有符号整型值;

(5)将这8个像素点对应的4个u、v分量加载到xmm2、xmm3寄存器,并进行复制,复制后的值扩展为有符号整型值;

(6)按照公式进行yuv转rgb的计算,将计算后的结果转换为无符号字符型,并将结果由寄存器复制到rgb内存中;

(7)重复步骤(4)、(5)、(6),直到两行中的所有像素点完成转换;

(8)重复步骤(4)、(5)、(6)、(7),直到图像所有的像素点完成转换。

本发明具有以下有益效果:

1.计算速度快,花费时间少;

2.无需特别的硬件资源;

3.技术实现简单,具有很强的应用价值。

附图说明

图1是本发明方法中采用的yuv420存储格式示意图;

图2是本发明方法中采用的rgb存储格式示意图;

图3是本发明方法采用的y、u、v计算方式示意图。

具体实施方式

英特尔公司的advancedvectorextensions(avx)单指令多数据并行计算技术在一个时钟周期内可进行多个数据的计算,有效地提高计算速度。本发明的方法即是一种利用intelavx单指令多数据技术实现yuv420格式转换为rgb格式的方法,是一种快速的yuv420转rgb的方法,采用的转换公式如下:

c=y-16

d=u-128

e=v–128

r=clip((298*c+409*e+128)>>8)

g=clip((298*c-100*d-208*e+128)>>8)

b=clip((298*c+516*d+128)>>8)

其中clip函数表示取值范围为0-255。

yuv420在内存中的存储方式如图1所示。yuv和rgb每个分量y、u、v、r、g、b为无符号字符型,计算过程中的变量c、d、e为4字节有符号整型。

为了提高内存读写的速度,每个r、g、b分量后面跟1字节的空数据w,如图2所示,保证每个像素点的rgb值在内存为32位对齐。

如图3所示,图像高度宽值存放于rcx寄存器、高度值放于rdx寄存器、yuv内存地址位于r8寄存器、rgb内存地址位于r9寄存器。由于每个像素点的计算都用到16,128,298,409,100,208,516,8这些数值,为了提高读写速度,将这些值放在cpu的缓存中,确保在一个时钟周期即可实现对数据的存取。

将yuv420的内存地址存放于rsi寄存器、rgb的内存地址放于rdi寄存器、图像的宽度值放于rax寄存器,通过图像的宽度值和高度值计算u、v分量在内存中的偏移值。在yuv420格式中,每个u、v分量需要同连续两行4个像素点的y分量进行计算,得到这4个像素点的rgb值。由于avx技术对应的xmm寄存器位长为128位,可进行4个整型值的运算,因此每次可计算4个像素点的rgb值。

将第一行y的4个值加载到xmm0寄存器,将第二行y的4个值加载到xmm1寄存器,将2个u分量加载到xmm2寄存,并复制为4个值,2个v分量加载到xmm3寄存器,同样复制为4个值。通过avx的向量加、减、乘指令进行计算,得到对应的r、g、b,可以有效提高转换速度。

本发明的具体实现方式如下:

(1)将图像宽度值存放于rcx寄存器、高度值放于rdx寄存器、yuv内存地址位rsi寄存器、rgb内存地址位于rdi寄存器;

(2)通过图像的宽度值和高度值计算u、v分量的起始地址,分别存放于rax和rbx寄存器;

(3)将16,128,298,409,100,208,516,8通过prefetcht1指令加载到cpu的缓存;

(4)将第一行4个像素点的y分量加载到xmm0寄存器,第二行前4个像素点的y分量加载到xmm1寄存器,并将8个值扩展为有符号整型值;

(5)将这8个像素点对应的4个u、v分量加载到xmm2、xmm3寄存器,并进行复制,复制后的值扩展为有符号整型值;

(6)按照公式进行yuv转rgb的计算,将计算后的结果转换为无符号字符型,并将结果由寄存器复制到rgb内存中;

(7)重复步骤(4)、(5)、(6),直到两行中的所有像素点完成转换;

(8)重复步骤(4)、(5)、(6)、(7),直到图像所有的像素点完成转换。



技术特征:

技术总结
一种基于AVX技术的快速颜色空间转换方法,将图像高度宽值存放于rcx寄存器、高度值放于rdx寄存器、YUV内存地址位于r8寄存器、RGB内存地址位于r9寄存器;将YUV420的内存地址存放于rsi寄存器、RGB的内存地址放于rdi寄存器、图像的宽度值放于rax寄存器,通过图像的宽度值和高度值计算U、V分量在内存中的偏移值。将第一行Y的4个值加载到xmm0寄存器,将第二行Y的4个值加载到xmm1寄存器,将2个U分量加载到xmm2寄存,并复制为4个值,2个V分量加载到xmm3寄存器,同样复制为4个值。通过AVX的向量加、减、乘指令进行计算,得到对应的R、G、B,可以有效提高转换速度。

技术研发人员:张丹普
受保护的技术使用者:北京航天长峰科技工业集团有限公司
技术研发日:2016.11.14
技术公布日:2018.05.25
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1