1 色彩空间和色彩模型 色彩是人眼对于不同频率的光线的不同感受。色彩既是客观存在的,但又是主观感知的,所以不同人对色彩的感知会存在差异。为了规范色彩的表述,引入了色彩空间一词。 “色彩空间”源于西方的“color space”,又称作“色域”,色彩学中,人们建立了多种色彩模型,以一维、二维、三维甚至四维空间坐标来表示某一色彩,这种坐标系统所能定义的色彩范围即色彩空间。我们经常用到的色彩空间主要有rgb、cmyk、lab等。
色彩空间
色彩模型是描述使用一组值(通常使用三个、四个值或者颜色成分)表示颜色方法的抽象数学模型。例如三原色光模式(rgb) 和印刷四分色模式(cmyk) 都是色彩模型。
不同的色彩模型的差异和优劣不在本文讨论范围之内。本文主要讨论yuv和rgb两种色彩模型的相关知识。 2 rgb色彩模型 我们知道, “色彩” 是人类大脑对事物的一种主观感觉,为了将这种 “感性” 进行 “理性” 描述,数学家们创建了 rgb 模型的概念:通过三个数的组合(色值)来表述某一种特定的颜色,从而人类可以将这种感性的色彩感受进行理性地表达和传递。 2.1 rgb三原色 rgb和cmy rgb(255, 0, 0) 代表纯红色,rgb(0, 255, 0) 代表纯绿色,rgb(0, 0, 255) 代表纯蓝色,而 rgb(255, 255, 0) 代表纯黄色(光学中红色和绿色加法混合会呈现黄色)。
rgb三原色 通过 rgb 色彩模型,我们最多能表示出256x256x256=16777216种不同的色值,也就是我们常说的1600万色。
如果我们创建一个三维坐标系,三个轴的代表字母由x、y、z换成 r、g 和 b,即用 red 代表x轴,green代表y轴,blue代表z轴,采用光学加法混色的方式构建这个立方空间的话,就形成了一个基于rgb模型的色彩空间了。
rgb三原色立体空间
我们知道通过 rgb(x, y, z) 这种方式构建的每一个颜色点,都对应于这个立方体中的某一个点,也就是说每一种颜色都被包含在我们的色彩空间之内。
2.2 rgb颜色模型存在的问题 因为在自然环境下获取的图像容易受自然光照、遮挡和阴影等情况的影响,即对亮度比较敏感,而rgb 颜色空间的三个分量都与亮度密切相关,即只要亮度改变,三个分量都会随之相应地改变。
另外,rgb 颜色空间是一种均匀性较差的颜色空间,人眼对于这三种颜色分量的敏感程度是不一样的,在单色中,人眼对红色最不敏感,蓝色最敏感,如果颜色的相似性直接用欧氏距离来度量,其结果与人眼视觉会有较大的偏差。对于某一种颜色,我们很难推测出较为精确的三个分量数值来表示。
而且,在视频领域如果使用rgb存储的话,视频数据会非常大。
比如有一个1080p(1920*1080)分辨率、帧率为30帧的视频,如果使用rgb进行存储的话,仅仅一分钟的视频就能达到 (1920*1080*8*30*60)bit(约等于27g)。这明显是不现实的,所以我们需要对视频数据进行压缩。
基于以上两点,所以我们需要一种数据相关性没那么强的颜色编码系统或色彩空间,而yuv正好就是这样,从下面的介绍中我们就会明白。yuv能够方便地编码和传输,并且减少带宽占用和信息出错。 3 yuv色彩模型 我们先回到人类刚拥有彩色电视的时候,在那段从黑白电视向彩色电视的过渡期,电视系统需要提供对黑白电视的兼容性(在一文搞懂hdmi/dp/dvi/vga显示器接口历史演进提到过),另外还要考虑到电视广播系统那有限的带宽,如果使用rgb颜色模型,那么传输带宽就是原来的三倍。
所以能够兼容黑白电视系统和更为节省带宽的yuv色彩模型就被发明了出来,它与rgb之间是无损转换的。第4节,会介绍不同标准下yuv与rgb如何相互转换。
因为相较于色彩,人眼对于亮度信息更为敏感,所以可以在色彩信息上面进行取舍来达到节约大小的目的,通过引入色度二次采样(subsampling)的方式,yuv对原始的rgb信息进行重编码。
亮度信息与色彩信息相分离的设计使得yuv可以减少一些色彩信息以达到节省传输带宽和保存体积的目的。这也是yuv颜色模型相比于rgb颜色模型的优势所在。
yuv同样使用三个分量来存储数据,他们分别是
y:用于表示 明亮度(luminance或luma);
u:用于表示色度(chrominance或chroma);
v:用于表示色度(chrominance或chroma);
y其实就是我们常说的灰度值,是图片的总体轮廓,而u和v则用于描述色彩颜色和颜色饱和度。
一张色彩艳丽的图片如果存储成yuv格式的话,y就是这张图的黑白照、uv就是涂上颜色。
3.1 yuv图像处理流水线pipeline
yuv图像处理流水线
3.2 yuv色度抽样方式
常见的yuv图像色度抽样方式有如下三种:yuv 444、yuv 422、yuv420。
不同类型之间的主要区别是使用了不同的方式进行u、v分量的采样。 yuv采样方式
如上图所示,其中实心黑点表示像素点的y分量,空心圆圈表示采用该像素点的uv分量。
可见:
yuv 444:每个y分量分别对应一个u分量和一个v分量
yuv 422:每两个y分量共用一个u分量和一个v分量
yuv 420:每四个y分量共用一个u分量和一个v分量
yuv色度抽样方式
yuv444和rgb颜色模型的图像大小是一样的,并没有节省存储空间。当rgb图像转换为yuv图像时,也是先转换为yuv444采样方式的图像。
yuv42和rgb颜色模型图像大小相比,节省了三分之一的存储空间,在传输时占用的带宽也会随之减少。
yuv420采样方式,y平面的信息完全保留,而uv这两个色度平面的信息交错保留,并且精度只有y平面的一半,最终图像、视频的体积也就少了很多,而画质损失实际是被控制在一个合理的范围内。
由此,可得出对于一张1280*720大小的图片,采用yuv420采样比yuv 422、yuv444、rgb采样的图像节省的空间最大,所以现在最常见的就是yuv420采样方式。
3.3 yuv的存储方式
yuv有packed(打包)和 planar(平面)两种存储方式。
packed :packed格式是先连续存储所有的y分量,然后依次交叉储存u、v分量;
planar:planar格式也会先连续存储所有的y分量,但planar会先连续存储u分量的数据,再连续存储v分量的数据,或者先连续存储v分量的数据,再连续存储u分量的数据;将yuv分量分别存储到矩阵,每一个分量矩阵称为一个平面。
3.4 yuv颜色编码格式
由于色度抽样方式和存储方式的不同,yuv衍生出很多种格式。
注意下文中所述,yuv和ycbcr对应关系,y对应y,u对应cb,v对应cr。
3.4.1基于yuv422采样的格式
yuyv格式和uyvy格式采用打包packed存储方式。
yvuv格式
yvuv为yuv422采样的存储格式,相邻的两个y共用其相邻的两个cb、cr。对于像素点y’00、y’01而言,其cb、cr的值均为cb00、cr00,其他的像素点yuv取值依此类推。
uyvy格式
uyvy格式与yvuv不同的是,uv即cb、cr排列顺序不一样,还原其每个像素点的yuv值的方法与上面一样。
yuv422p格式
yuv422p格式,又叫做i422,采用的是平面格式进行存储,先存储所有的y分量,再存储所有的u分量,再存储所有的v分量。
3.4.2.基于yuv420采样的格式
yuv420是以平面方式(planar)存储,色度抽样为40的色彩编码格式。其中yuv420p为三平面存储,yuv420sp为两平面存储。
常见的yuv格式列表如下:
i420: yyyyyyyy uu vv =>yuv420p,主要用来远程传输
yv12: yyyyyyyy vv uu =>yuv420p,先y再v再uyu12: yyyyyyyy uu vv =>yuv420p,先y再u再v
yv12和yu12,分别将y、u、v打包,依次存储。其中每一个像素点的yuv数据提取遵循yuv420格式的提取方式,即4个y分量共用一组uv。注意,上图中,y’00、y’01、 y’10、y’11共用cb00、cr00,其他依此类推。
nv12: yyyyyyyy uvuv =>yuv420sp //ios中有的模式
nv21: yyyyyyyy vuvu =>yuv420sp //安卓camera默认格式
nv12和uv21是一种两平面存储方式,y为一个平面,交错的uv为另一个平面。提取方式与yu12和yv12类似,即y’00、y’01、 y’10、y’11共用cb00、cr00,其他依此类推。
4 yuv与rgb之间的转换 yuv与rgb之间的转换是存在标准的,常见的标准有:
itu-r bt.601(标清)
itu-r bt.709(高清)
itu-r bt.2020(超高清)
不同的标准有不同的转换公式,同时还要区分不同的color range。color range用于指定rgb分量的取值范围,可分为full range(取值范围为0255)和limited range(取值范围为16235)。
bt.601, limitedrange, which is the standard for sdtv(标清数字电视) rgb —> yuv
y = 0.299r+0.587g+0.114b
v = 0.713(r−y)=0.500r−0.419g−0.081b
u = 0.564(b−y)=−0.169r−0.331g+0.500b
yuv —> rgb
r = 1.164y+1.596v-0.871;
g = 1.164y-0.813v-0.391u+0.529;
b = 1.164y+2.018u-1.0729;
bt.601, full range
rgb —> yuv
y = 0.299 * r + 0.587 * g + 0.114 * b
v = -0.169 * r - 0.331 * g + 0.500 * b
u = 0.500 * r - 0.439 * g - 0.081 * b
yuv —> rgb
r = y + 1.400v - 0.7
g = y - 0.343u - 0.711v + 0.526
b = y + 1.765u - 0.883
bt.709, which isthe standard for hdtv(高清电视)
rgb —> yuv
y = 0.0627 + 0.183 * r + 0.614 * g + 0.062 * b
u = 0.5 - 0.101 * r - 0.339 * g + 0.439 * b
v = 0.5 + 0.439 * r - 0.399 * g - 0.040 * b
yuv —> rgb
r = 1.164y + 1.739v - 0.97
g = 1.164y - 0.213u - 0.533v + 0.301
b = 1.164y + 2.112u - 1.129
接下来,以图像处理课程里面经常会出现的一张图片,作为示例,演示yuv与rgb之间的转换。
1. 从yuv420p图像中提取y、u、v分量
yuv420p图像
从左往右依次为y、u、v分量 2. 将yuv420p图像转换为rgba8888图像
yuv 图像 yuv转换为rgba8888
《一文搞懂》系列文章一文搞懂hdmi/dp/dvi/vga显示器接口历史演进一文搞懂usb各个版本的历史演进一文搞懂高速tia跨阻放大器设计一文搞懂电阻,这篇讲得很全面,建议收藏一文搞懂共模电感原理一文搞懂mlcc电容的特性及生产工艺流程一文搞懂电感isat、irms以及测量方法 本号对所有文章陈述的观点均保持中立,文章仅供读者交流学习。资讯、图片来源网络,版权归原作者所有,侵权请联系删除。
MAX17598,MAX17599有源钳位PWM控制器
超薄型尺寸贴片电解电容的适用范围都有哪些
阿童木激光位移传感器检测垫片有无
sepic斩波电路公式推导_sepic斩波电路工作原理
下一代电能质量监测技术-帮助工业设备保持健康
一文搞懂图像RGB和YUV编码及相互转换
关于连接器的气密性检测,它的操作难点在哪里
物联网下的智慧监狱管控系统该如何建设?
PLC程序FB100模式控制整体分析
5G网络是怎样支持语音业务的?
苹果将在2021年的iOS更新“应用跟踪透明”功能
华为公司专家组一行莅临物通博联调研指导
第二届数博会 见证数字时代巅峰汇聚
DC-DC变换器的功率开关元件损耗及续流二极管损耗如何计算?
iOS10.3或在3月发布,iOS10.2越狱无望?
RMBS扩大面向数据中心和PC设备的DDR5内存接口芯片组合
一文搞清UNIXLinux与Windows文件换行符格式差异
京东汽车商城与欧拉品牌正式签署了合作协议
智能开关功能介绍
OPPO宣布全球首个5G手机微信视频通话成功打通