本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10290575.html
1. 色彩空间基础
颜色是不同波长的光对人眼刺激产生的色彩感觉。色彩空间(Color Space)是颜色的数学表示,根据不同的表示方法分为不同的色彩模型。最常用的色彩模型有三类:RGB(用于计算机图形学), YUV(用于视频系统), CMYK(用于彩色印刷)。后文对色彩空间与色彩模型的叫法不作区分。本文仅讨论视频图像处理领域常用的RGB色彩空间和YUV色彩空间。
颜色与光源特性和人眼视觉特性有密切的关系,与之相关的学科有光度学和色度学。光度学是研究光学计量的学科,定义了光通量、发光强度、照度、亮度等主要光度学参量以及几个光度学重要定律。光度学考虑的是可见光范围,并且考虑人眼主观影响。色度学是研究色彩计量的科学,它定性和定量地研究人眼的颜色视觉规律、颜色测量理论与技术。色度学是研究视频技术的重要理论基础,将色度学中最基础的两个概念摘录如下。本节内容,是理解图像色彩相关知识的基础,已经简洁的不能再简洁。
1.1 光的常用度量
描述光的常用物理量有四个:光通量、光强、照度、亮度。如下两张示意图引用自“如何正确理解照度和亮度的关系?”,图中涉及三个角色:光源、物体(被观察者)与人眼(观察者)。
如下概念的描述,力求通俗,因此并不准确。
1.1.1 光通量
单位时间内由光源所发出或由被照物所吸收的总光能。单位流明。
在第一张图中,灯泡在单位时间内散发的的光的总和即为光通量。光通量衡量光源总的发光量。
1.1.2 光强
光源在给定方向上,每单位立体角内所发出的的光通量。单位坎德拉。
在第一张图中,光源射向照射面的一根光线表示光强。光强衡量光源的发光强度。
1.1.3 照度
物体表面每单位面积入射可见光的光通量。单位勒克斯。
照度在被观察者(被照物体)角度,衡量接受到的光的强弱。
1.1.4 亮度
描述发光面或反光面上光的明亮程度的光度量。单位坎德拉每平方米。
亮度在观察者(人眼)角度,衡量感受到的光的明亮程度。
在第二张图中,理想情况下,被同一光源照射,黑色书和白色书具有同样的照度,却有不同的亮度。
1.2 色度学基础
1.2.1 彩色三要素
光的颜色取决于客观和主观两方面的因素。客观因素是光的功率波谱分布,它影响光源的颜色。主观因素是人眼视频特性,它影响人眼对色彩的感觉。 彩色三要素指亮度(Lightness)、色调(Hue)和饱和度(Saturation),任一色彩都可以用这三个基本参量来表示:
亮度表示颜色明暗的程度,是光作用于人眼时引起的明亮程度的感觉。
色调是指颜色的类别,例如红色、蓝色、绿色指的就是色调。
饱和度指颜色的深浅程度,也称彩度。例如深绿、浅绿指的就是绿色这个色调的饱和度,饱和度越高,颜色越深。
1.2.2 三基色原理
三基色原理指自然界中大部分彩色都可以由三种基色按不同比例混合得到。选择三种基色的前提的:每一种基色都不能由另外两种基色混合得到,这三种基色互相独立。三基色原理主要内容如下:
1) 自然界中的绝大部分彩色,都可以由三种基色按一定比例混合得到;反之,任意一种彩色均可被分解为三种基色。
2) 作为基色的三种彩色,要相互独立,即其中任何一种基色都不能由另外两种基色混合来产生。
3) 由三基色混合而得到的彩色光的亮度等于参与混合的各基色的亮度之和。
4) 三基色的比例决定了混合色的色调和色饱和度。
不同颜色混合在一起能产生新的颜色,这种方法称为混色法。色彩空间RGB是采用了R、G、B三种基色,色彩空间CMYK是采用了C、M、Y三种基色。
我们看一张包含彩色三要素和RGB三原色的示意图:
2. RGB色彩空间
太深的原理已超出本文的讨论范围和研究目的。这里摘录一些经验观点:
RGB三原色不是唯一的正交基,还可以有其他选择,只不过RGB能组合出来的颜色更为丰富。[3]
不考虑人类视觉的特殊性时,我们平时所认为的“红+绿=黄”之类的“颜色叠加”是不成立的。因为红色和绿色的单色光的混合只有在人类的视觉中才会跟黄色的单色光一样,它们在其它动物的视觉中不一定是一样的。也就是说,不考虑人类视觉的特殊性时,不存在RGB颜色空间。[3]
人类有三种视锥细胞用于感知颜色,这三种视锥细胞对红(R)、绿(G)、蓝(B)三种颜色敏感。[4]
人眼看到的物体颜色,是光源照射到物体,物体吸收(还有透射)部分颜色的光,然后从物体表面反射的光线进入人眼后人眼得到的色彩感觉。
人眼看到物体为黑色,是因为物体将光线完全吸收,没有光从物体表面反射出来(例如白天我们看一件黑衣服);或者没有任何光线照射到物体(例如黑底我们看一张白纸)。
人眼看到物体为白色,是因为在白光源照射下,物体不吸收光线而将光线全部反射(例如白天我们看一张白纸)。
颜色与光源和物体的吸色特性密切相关,基于此,引出混色方法中的加色法和减色法。
加色法利用光源发射特性,将各分色的光谱成分相加得到混合颜色。RGB色彩空间采用加色法。当无任何光线照射时,R、G、B三种颜色分量都为0时,物体呈现黑色;当R、G、B三种颜色分量达到最大时,物体不吸收光线只反射的情况下,物体呈现白色。我们称黑色为最暗,白色为最亮,要达到最亮状态,需要三色分量最大程度混合,因此称为加色。[6]
加色法用于自发光物体。RGB颜色空间主要应用于计算机显示器、电视机、舞台灯光等,都具有发光特性。彩色像素在显示器屏幕上不会重叠,但足够的距离时,光线从像素扩散到视网膜上会重叠,人眼会感觉到重叠后的颜色效果。
减色法是利用颜料吸色特性,每加一种颜色的颜料,会吸收掉对应的补色成分。CMYK色彩空间采用减色法。例如,我们在白纸(白光照射、不吸收、全反射)上涂颜料,黄色颜料能吸收蓝色(黄色的补色),因此在白光照射下显示黄色,当黄(Y)、青(C)、品红(M)三色混在一起且颜色分量都为最大时,它们的补色成分被吸收掉,变成了黑色;当三色分量为0即什么也不涂时,白纸显现白色。要达到最大亮度,需要三色分量完全消失,因此称为减色。
印刷时,无法达到理想程度,C、M、Y最大程度混合后无法得到纯黑色,只能得到深灰色,因此在C、M、Y三色之外引入了K(黑色)。[7]
减色法用于无法发光的物体。CMYK颜色空间主要应用于印刷、绘画、布料染色等。
RGB色彩空间中每个像素点包含了R、G、B三种分量。RGB存储模式也有packed和planar两类,这两种模式的区分在第3节中讲述。RGB色彩空间及存储模式比较简单,我们挑几个有代表性的存储模式来简述一下:
2.1 存储模式RGB565
使用16b(bit)表示一个像素,5b用于R,6b用于G,5b用于B。如下:
[ R G B ] [ R G B ] [ R G B ] [ R G B ]
[ R G B ] [ R G B ] [ R G B ] [ R G B ]
以上只是示意图,实际R、G、B顺序可能与图中不同。
2.2 存储模式RGB888
使用24位来表示一个像素,每个分量都用8位表示。其示意图跟RGB565示意图类似。
2.3 存储模式ARGB8888
使用32位来表示一个像素,R、G、B都用8位表示,另外A(Alpha)表示透明度,也用8位表示。
[ A R G B ] [ A R G B ] [ A R G B ] [ A R G B ]
[ A R G B ] [ A R G B ] [ A R G B ] [ A R G B ]
以上只是示意图,实际A、R、G、B顺序可能与图中不同。
3. YUV色彩空间
YUV颜色空间是PAL、NTSC、SCEAM三大视频标准使用的颜色空间,主要应用于视频系统。YUV色彩空间中,Y表示亮度信息,U和V表示色度(色调和饱和度)信息。使用YUV色彩空间,后期出现的彩色电视系统和早期的黑白电视系统兼容,黑白电视机可以只处理彩色电信信号中的Y分量,而彩色电视机接收黑白电视信号并显示也没有任何问题。
YUV颜色空间和RGB颜色空间可以根据公式相互转换。
经常提到的还有YPbPr和YCbCr。YPbPr指模拟分量信号(或接口),P(Parallel)表示并行,b下标表示蓝,r下标表示红。YCbCr指的是数字分量信号(或接口),C(Chroma)表示色度。YCbCr还可指色彩空间,YCbCr色彩空间是YUV色彩空间的缩放和偏移版本。
YUV, YCbCr, YPbPr所指涉的范围,常有混淆或重叠的情况。从历史的演变来说,其中YUV和Y'UV通常用来编码电视的模拟信号,而YCbCr则是用来描述数字的视频信号,适合影片与图片压缩以及传输,例如MPEG、JPEG。 但在现今,YUV通常已经在计算机系统上广泛使用。[9]
YUV存储格式分成三大类:
packed:将Y、U、V分量交织存放在一起,和RGB的存放方式类似。内存中排列形式类似:YVYUYVYUYVYUYVYU...。在具体的存储模式命名中,packed格式不带后缀P。
planar:将Y、U、V的三个分量分别存放在不同的矩阵(平面)中。内存中排列形式类似:YYYYYY...,UUUUUU...,VVVVVV...。在具体的存储模式命名中,planar格式带后缀P。
semi-planar:将Y、U、V三个分量放在两个矩阵(平面)中。Y占用一个平面,UV共用一个平面。内存中排列形式类似:YYYYYY...,UVUVUV...。在具体的存储模式命名中,semi-planar格式带后缀SP。
YUV图像存储模式与采样方式密切相关。主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0。这些采样方式,不压缩Y分量,对UV分量的压缩程度不同,这是由人眼的特性决定的,人眼对亮度Y更敏感,对色度UV没有那么敏感,压缩UV分量可以降低数据量,但并不会人眼主观感觉造成太大影响。
3.1 采样方式YUV4:4:4
相邻的4个像素里有4个Y、4个U、4个V。每1个Y使用1组UV分量。如下(每个[]为一个像素点):
[ Y U V ] [ Y U V ] [ Y U V ] [ Y U V ]
[ Y U V ] [ Y U V ] [ Y U V ] [ Y U V ]
[ Y U V ] [ Y U V ] [ Y U V ] [ Y U V ]
[ Y U V ] [ Y U V ] [ Y U V ] [ Y U V ]
在这种采样方式下,一个像素点包含的完整的信息。
3.2 采样方式YUV4:2:2
相邻的4个像素里有4个Y、2个U、2个V。每2个Y共用1组UV分量。平均算来,一个像素占用的数据宽度为16b,其中Y占8b,U占4b,V占4b。后面存储模式命名中的数字16指的就是16b。
[ Y U ] [ Y V ] [ Y U ] [ Y V ]
[ Y V ] [ Y U ] [ Y V ] [ Y U ]
[ Y U ] [ Y V ] [ Y U ] [ Y V ]
[ Y V ] [ Y U ] [ Y V ] [ Y U ]
在这种采样方式下,还原出一个像素点,需要相邻的两个像素点数据,如下:
[ Y U ] [ Y V ]
在同一采样模式下,根据分量元素排列顺序的不同,又分为不同的存储模式:
3.2.1 存储模式YUYV(YUY2)
[ Y U ] [ Y V ] [ Y U ] [ Y V ]
[ Y V ] [ Y U ] [ Y V ] [ Y U ]
[ Y U ] [ Y V ] [ Y U ] [ Y V ]
[ Y V ] [ Y U ] [ Y V ] [ Y U ]
3.2.2 存储模式UYVY
[ U Y ] [ V Y ] [ U Y ] [ V Y ]
[ U Y ] [ V Y ] [ U Y ] [ V Y ]
[ U Y ] [ V Y ] [ U Y ] [ V Y ]
[ U Y ] [ V Y ] [ U Y ] [ V Y ]
3.2.3 存储模式YUV422P(YU16)
命名中的数字16表示,平均算来,一个像素占16b,其中Y占8b,U占4b,V占4b。
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
-------
U U U U
U U U U
-------
V V V V
V V V V
3.2.4 存储模式YUV422P(YV16)
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
-------
V V V V
V V V V
-------
U U U U
U U U U
3.2.5 存储模式YUV422SP(NV16)
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
-------
U V U V
U V U V
U V U V
U V U V
3.2.6 存储模式YUV422SP(NV61)
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
-------
V U V U
V U V U
V U V U
V U V U
3.3 采样方式YUV4:2:0
相邻的4个像素里有4个Y、2个U、0个V,或4个Y、2个V,0个U。每4个Y共用1组UV分量。平均算来,一个像素占用的数据宽度为12b,其中Y占8b,U占2b,V占2b。后面存储模式命名中的数字12指的就是12b。
[ Y U ] [ Y ] [ Y U ] [ Y ]
[ Y V ] [ Y ] [ Y V ] [ Y ]
[ Y U ] [ Y ] [ Y U ] [ Y ]
[ Y V ] [ Y ] [ Y V ] [ Y ]
在这种采样方式下,还原出一个像素点,需要相邻的四个像素点数据,如下:
[ Y U ] [ Y ]
[ Y V ] [ Y ]
在同一采样模式下,根据分量元素排列顺序的不同,又分为不同的存储模式:
3.3.1 存储模式YUV420P(YU12/IYUV)
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
-------
U U
U U
---
V V
V V
3.3.2 存储模式YUV420P(YV12)
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
-------
V V
V V
---
U U
U U
3.3.3 存储模式YUV420SP(NV12)
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
-------
U V U V
U V U V
3.3.4 存储模式YUV420SP(NV21)
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
-------
V U V U
V U V U
4. 参考资料
[1] Keith Jack, "Video Demystified" 5th edition, "Chapter 3. Color Spaces"
[2] 卢官明、宗昉, 《数字电视原理》第3版第1章
[3] 照明常用术语的定义http://twepc.com.tw/led/k2.htm
[4] 发光强度https://zh.wikipedia.org/wiki/%E5%8F%91%E5%85%89%E5%BC%BA%E5%BA%A6
[5] 如何正确理解照度和亮度的关系?https://zhuanlan.zhihu.com/p/53136784
[6] https://www.junpin360.com/html/2015-04-12/4088.html
[7] 红绿蓝三色是(唯一的)正交基吗, https://www.zhihu.com/question/24886171
[8] 色彩空间基础,https://zhuanlan.zhihu.com/p/24214731
[9] 色彩空间表示与转换,https://zhuanlan.zhihu.com/p/24281841
[10] 加色法, https://zh.wikipedia.org/wiki/%E5%8A%A0%E8%89%B2%E6%B3%95
[11] 减色法, https://zh.wikipedia.org/wiki/%E6%B8%9B%E8%89%B2%E6%B3%95
[12] 数字图像处理之6大颜色空间,https://zhuanlan.zhihu.com/p/28741691
[13] YUV, https://zh.wikipedia.org/wiki/YUV
[14] 图文详解YUV420数据格式, https://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html
[15] YUV格式小结, https://www.jianshu.com/p/6a361e86ccd5
5. 修改记录
2019-01-11 V1.0 初稿
2019-02-13 V1.1 增加光的常用度量一节