文章目录
1 实验目的
- 编写RGB转化为YUV的程序,将给定的RGB文件转化为YUV文件。输出结果用YUVviewer打开,查看是否正确。
- 编写YUV转化为RGB的程序,将YUV文件转化为RGB文件。输出结果与原RGB文件进行比对,分析误差。
2 实验原理
2.1 RGB与YUV色彩空间的基础知识
2.1.1 RGB
在《现代电视原理》这门课程中,我们已经学习过,RGB计色系统的创立是为了准确地对颜色进行表述和计算。1931年CIE对三基色做了统一规定,如下图:
选择它们,则是因为它们的获取方法简单,色度稳定准确,而且可以混配出来的颜色较多。
为了实际计算方便,接下来还要规定基色的单位。
物理计色系统规定:以1各单位的三种基色光混合后,恰能产出等能白光。经过实验,选取了如下基色单位:
· 700nm,光通量1光瓦的红光作为1个红基色单位。
· 546.1nm,光通量4.5907光瓦的绿光为1个绿基色单位。
· 435.9nm,光通量0.0601光瓦的蓝光为1个蓝基色单位。
至此,任何一个色光均可以表示为:
F=R(R)+G(G)+B(B)
其中( R ) , ( G ) , ( B )即为基色单位,R、G、B为三种基色的强度系数。
通过计算与实验,我们可以用特定比例的R、G、B三色光调配出标准照明体C(色温6774K,也就是CIE规定的白色光),得到对应的亮度公式:
Y = 0.2990 R + 0.5870 G + 0.1140 B Y = 0.2990R + 0.5870 G + 0.1140 B Y=0.2990R+0.5870G+0.1140B
2.2.2 YUV
YUV与RGB的转换
模拟信号
Y = 0.2990 R + 0.5870 G + 0.1140 B Y = 0.2990R + 0.5870G +0.1140B Y=0.2990R+0.5870G+0.1140B
U = B − Y = - 0.2990 R - 0.5870 G + 0.8860 B ( 1 ) U = B-Y =-0.2990R - 0.5870G+0.8860B\qquad (1) U=B−Y=-0.2990R-0.5870G+0.8860B(1)
V = R − Y = 0.7010 R − 0.5870 G − 0.1140 B V = R-Y = 0.7010R-0.5870G-0.1140B V=R−Y=0.7010R−0.5870G−0.1140B
数字信号
为了便于处理,模拟信号变为数字信号时需要进行归一化处理,使得色差信号的动态范围控制在±0.5之间。
归一化之后有:
U ′ = 0.564 ( B − Y ) = − 0.1684 R − 0.3316 G + 0.5 B ( 2 ) U^{'}= 0.564(B-Y) = -0.1684R-0.3316G+0.5B\qquad (2) U′=0.564(B−Y)=−0.1684R−0.3316G+0.5B(2)
V ′ = 0.713 ( V − Y ) = 0.5 R − 0.4187 G − 0.0813 B V^{'}=0.713(V-Y)=0.5R-0.4187G-0.0813B V′=0.713(V−Y)=0.5R−0.4187G−0.0813B
亮度信号量化后的电平分配
亮度信号在进行8 bit量化时,需要在上下两端留出HEADROOM,作为信号超越动态范围的保护带。
在256级的上端留出20级,下端留出16级作为余量,即 Y Y Y的动态范围为16—235;0与255为保护电平,不允许出现在视频数据流中。
色差信号量化后的电平分配
如上文所述,色差信号的动态范围在-0.5~0.5之间,对于两个色差信号,在256级的上端留出15级,下端留出16级作为余量,即的动态范围为16—240。
表达式
基于上述分析,可以得到表达式:
D Y = I N T ( 219 Y / 255 + 16 ) ∗ 2 n − 8 D_Y = INT(219Y /255 + 16) * 2^{n-8} DY=INT(219Y/255+16)∗