网站大量收购闲置独家精品文档,联系QQ:2885784924

yuvrgb互转公式及算法..docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
yuvrgb互转公式及算法.

1 前言??????? 自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用的过程,所以在不同的应用领域中为了更好更准确的满足各自的需求,就出现了各种各样的色彩空间模型来量化的描述颜色。我们比较常接触到的就包括 RGB / CMYK / YIQ / YUV / HSI等等。??????? 对于数字电子多媒体领域来说,我们经常接触到的色彩空间的概念,主要是RGB , YUV这两种(实际上,这两种体系包含了许多种具体的颜色表达方式和模型,如sRGB, Adobe RGB, YUV422, YUV420 …), RGB是按三基色加光系统的原理来描述颜色,而YUV则是按照亮度,色差的原理来描述颜色。??????? 即使只是RGB YUV这两大类色彩空间,所涉及到的知识也是十分丰富复杂的,自知不具备足够的相关专业知识,所以本文主要针对工程领域的应用及算法进行讨论。2 YUV相关色彩空间模型2.1 YUV 与 YIQ YcrCb??????? 对于YUV模型,实际上很多时候,我们是把它和YIQ / YCrCb模型混为一谈的。??????? 实际上,YUV模型用于PAL制式的电视系统,Y表示亮度,UV并非任何单词的缩写。??????? YIQ模型与YUV模型类似,用于NTSC制式的电视系统。YIQ颜色空间中的I和Q分量相当于将YUV空间中的UV分量做了一个33度的旋转。??????? YCbCr颜色空间是由YUV颜色空间派生的一种颜色空间,主要用于数字电视系统中。从RGB到YCbCr的转换中,输入、输出都是8位二进制格式。??????? 三者与RGB的转换方程如下:??????? RGB - YUV:??????? 实际上也就是:Y=0.30R+0.59G+0.11B , U=0.493(B-Y) , V=0.877(R-Y)??????? RGB - YIQ:?????? RGB - YCrCb:??????? 从公式中,我们关键要理解的一点是,UV / CbCr信号实际上就是蓝色差信号和红色差信号,进而言之,实际上一定程度上间接的代表了蓝色和红色的强度,理解这一点对于我们理解各种颜色变换处理的过程会有很大的帮助。??????? 我们在数字电子多媒体领域所谈到的YUV格式,实际上准确的说,是以YcrCb色彩空间模型为基础的具有多种存储格式的一类颜色模型的家族(包括YUV444 / YUV422 / YUV420 / YUV420P等等)。并不是传统意义上用于PAL制模拟电视的YUV模型。这些YUV模型的区别主要在于UV数据的采样方式和存储方式,这里就不详述。??????? 而在Camera Sensor中,最常用的YUV模型是 YUV422格式,因为它采用4个字节描述两个像素,能和RGB565模型比较好的兼容。有利于Camera Sensor和Camera controller的软硬件接口设计。3 YUV2RGB快速算法分析??????? 这里指的YUV实际是YcrCb了,YUV2RGB的转换公式本身是很简单的,但是牵涉到浮点运算,所以,如果要实现快速算法,算法结构本身没什么好研究的了,主要是采用整型运算或者查表来加快计算速度。首先可以推导得到转换公式为:??????? R = Y + 1.4075 *(V-128)?????? G = Y – 0.3455 *(U –128) – 0.7169 *(V –128)?????? B = Y + 1.779 *(U – 128)3.1 整型算法?????? 要用整型运算代替浮点运算,当然是要用移位的办法了,我们可以很容易得到下列算法:??????? u = YUVdata[UPOS] - 128;?????? v = YUVdata[VPOS] - 128;??????? rdif = v + ((v * 103) 8);??????? invgdif = ((u * 88) 8) +((v * 183) 8);?????? bdif = u +( (u*198) 8);?????? r = YUVdata[YPOS] + rdif;?????? g = YUVdata[YPOS] - invgdif;?????? b = YUVdata[YPOS] + bdif;为了防止出现溢出,还需要判错计算的结果是否在0-255范围内,做类似下面的判断。???????? if (r255)???????????? r=255;?????? if (r0)???????????? r=0;??????? 要从RGB24转换成RGB565数据还要做移位和或运算:???????? RGBdata[1] =(

文档评论(0)

xznh + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档