本文主要是介绍色彩格式之RGB与YUV,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一. RGB色彩模型
1.1 色彩模型原理
已有的研究结论表明, 自然界的任意颜色由三种基本颜色混合而成。三基色为: 红(Red),绿(Green), 蓝(Blue)组成, 这是RGB 色彩模型的原理。所以,描述一个颜色可以用R、G、B颜色分量表示.
1.2 色彩空间
色彩空间又称色域,就是某种技术系统所能定义的色彩范围。
计算机领域中,用数字量化的方式表示颜色。以颜色格式RGB888为例,RGB888表示R、G、B每个分量用8bit表示,每个分量的范围就是0~255.所能表示的颜色总数为2^24=16M。它的色彩空间大小是16M。计算机领域中,用像素深度描述,即每像素占的bit数。
1.3 常用颜色格式
计算机系统中,RGB色彩模型常用的格式有RGB565, RGB666, RGB888等。RGB565表示R占5bit,G占6bit,B占5bit;其他格式依此类推。有些时候还会增加Alpha值,在此不多做陈述。
RGB565比RGB888 每pixel所需的存储空间小,占用的带宽也小,同时表示的色域也小。各有适合的应用场景。相互之间是可以兼容的,但是从高色域转到低色域会有色域的损失。
1.4 存储格式
1.5 真彩色/伪彩色/直彩色
真彩色,是指存储时用的R、G、B三基色分量即是显示时用的R,G,B三基色分量;
伪彩色,是指存储时用色彩偏移作为索引,经过查表转换新的R、G、B三基色分量;
直彩色,是指存储时用的R、G、B三基色分量,每个分量分别作为索引,查表转换为显示时用的R,G,B三基色分量;
二. YUV 色彩模型
2.1 色彩模型
已有的研究结论表明,色彩可以用亮度,色调,色彩饱和度来描述。
亮度,色光的明暗程度,用黑色(0%)~白色(100%)度量; 色调,物体反色或者透过物体的颜色,用0~360度的标准色轮度量; 饱和度, 色调中灰色成分所占的比例;
YUV(又成YCrCb)色彩模型,用亮度信号Y和两个色差信号R-Y(U),B-Y(V)表示。Cr描述颜色中红色信号与颜色中亮度信号值之间的差异,Cb描述颜色中蓝色信号与颜色中亮度信号值之间的差异。
2.2 常用的颜色格式
常常听到的YUV格式有YUV444, YUV422, YUV420, YUV411, YUV420P等等。重点描述YUV422, YUV420, YUV420P三种格式。
那YUV格式名字的含义是什么? 444/422/420描述的是Y,U,V三个分量的采样比率。
format | Y与UV比率(水平分量) | U与V比率(垂直分量) |
YUV444 | 1:1:1 | 1:1 |
YUV422 | 2:1 | 1:1 |
YUV420 | 2:1 | 1:0或者0:1 |
1.YUV420并不意味着只有Y,U分量,没有V分量;对于每行扫描来讲,如果某行Y,U,V分量的比率是4:2:0,那么相邻行Y,U,V分量的比率是4:0:2
下面以 宏块2X2像素阵列为例, 可以分析下YUV444, YUV422, YUV420是如何采样的, 码流如何还原到每个像素?
YUV444
原始像素:Y00 U00 V00 Y01 U01 V01 Y02 U02 V02 Y03 U03 V03 <- first line
Y10 U10 V10 Y11 U11 V11 Y12 U12 V12 Y12 U12 V12 <- second line
码流存放: Y00 U00 V00 Y01 U01 V01 Y02 U02 V02 Y03 U03 V03
Y10 U10 V10 Y11 U11 V11 Y12 U12 V12 Y12 U12 V12
像素映射: Y00 U00 V00 Y01 U01 V01 Y02 U02 V02 Y03 U03 V03
Y10 U10 V10 Y11 U11 V11 Y12 U12 V12 Y12 U12 V12
YUV422
原始像素:Y00 U00 V00 Y01 U01 V01 Y02 U02 V02 Y03 U03 V03 <- first line
Y10 U10 V10 Y11 U11 V11 Y12 U12 V12 Y12 U12 V12 <- second line
码流存放: Y00 U00 Y01 V01 Y02 U02 Y03 V03
Y10 U10 Y11 V11 Y12 U12 Y12 V13
像素映射: Y00 U00 V01 Y01 U00 V01 Y02 U02 V03 Y03 U02 V03
Y10 U10 V11 Y11 U10 V11 Y12 U12 V13 Y12 U12 V13
YUV420
原始像素:Y00 U00 V00 Y01 U01 V01 Y02 U02 V02 Y03 U03 V03 <- first line
Y10 U10 V10 Y11 U11 V11 Y12 U12 V12 Y12 U12 V12 <- second line
码流存放: Y00 U00 Y01 Y02 U02 Y03
Y10 V10 Y11 Y12 V12 Y12
像素映射: Y00 U00 V10 Y01 U00 V10 Y02 U02 V12 Y03 U02 V12
Y10 U00 V10 Y11 U00 V10 Y12 U02 V12 Y12 U02 V12
2.3 存储格式
YUV通常的储存格式packed(包)和panar(平面)模式
packet mode(YUV): Y, U, V连续交叉存储;
panar mode(YUV): 先连续存储所有的Y, 再连续存储所有的U,再连续存储所有的V。
三. RGB和YUV的优缺点
YUV相比与RGB的一个大优点是可以减少占用的带宽小。以RGB888, YUV422, YUV420作比较:
format | 带宽(bit) | |
RGB888 | 24/pixel | |
YUV422 | 16/pixel (32bit/2pixel) | |
YUV420 | 6/pixel (24bit/4pixel) |
四. 参考信息
http://baike.so.com/doc/5509659.html
http://en.wikipedia.org/wiki/Chroma_subsampling#4:2:0
http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html
这篇关于色彩格式之RGB与YUV的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!