颜色空间详解

       色彩是可见光所展现的,不同颜色的物体吸收和反射的波长的光不同,所产生不同的颜色。色彩作为现实世界固有的属性是存在和不变的。我们利用数学知识对色彩进行编码,便是色彩空间的来源,不同的编码其所指向的颜色都是唯一存在的,因此色彩空间都是可以互相转换的,只是不同的数学变现形式而已。

       现实不同于理论,显示器显示精度;传输的带宽和cpu的处理能力,处理32bit和处理8bit对带宽和处理器要求有天大的区别。科学家们对人眼就行测量和观察得出人眼的一些特性:

1)人眼有视锥细胞视杆细胞来区分颜色,

2)人眼有视觉暂留作用:这个作用我们就可以用dither抖动来模拟更多的颜色,通过快速交换不同的颜色来欺骗眼睛。

3)人眼对图像的认知是非均匀和非线性的:实际上压缩算法充分利用这一点。很多颜色人眼是区分不出差别的。对于颜色采样的精度在一定区间,人眼就认为是连续的,准确的。

4)人眼对380nm-780nm不同波长的颜色光有不同的敏感度,有色光初中我们就学到用三棱镜可以分离为红橙黄绿青蓝紫,在光谱上人类对绿光感觉最灵敏,向两边递减,根据这个特性科学家发明了yuv色彩空间进行编码,数字量化的表示是ycbcr 亮度+蓝色偏差+红色偏差来表示颜色。

 

        BT.709、Rec.709、ITU.709是同一个标准,全称为 ITU-R Recommendation BT.709,通常简称为 Rec.709,是由国际电信联盟ITU在1990年发布的高清数字视频标准,是被绝大多数视频设备厂商接受的一种标准。包括我们所使用的显示器、电视等设备。Rec.709 也是 SDR(Standard Dynamic Range,标准动态范围)所使用的标准。Rec.709 所用的色彩空间如下:

        BT.2020 全称为 ITU-R Recommendation BT.2020,也是由 ITU 发布的标准之一。该标准拥有更宽广的色彩空间,是 HDR(HighDynamicRange,高动态范围)所使用的标准,其色彩空间如下:

       目前绝大部分显示器都支持 Rec.709 的色彩空间,只有少部分支持 HDR 的高端显示器才支持 Rec.2020 的色彩空间,并且也不是完全覆盖该色彩空间。   

gamma校正

现在的显示设备大部分都是非线性的,即给出的电压激发荧光粉产生亮度不是线性比例y=kx的,而是指数形式的关系 y=x^ϒ ϒ(gamma)通常取2.2这也是sRGB空间的gamma取值,实际上每个显示设备gamma值可以不同(跟显示器实现方式有关)。 

 

y=x^2.2(显示器的gamma曲线)横坐标是电信号,纵坐标是亮度信号。

例如,我们想显示0.2的亮度,如果是线性的,我需要给0.2的电压(我们给的电平pcm),这样我们预期的给定值和实际值相符,就能正常显示对的图像了,可惜你给的0.2v的电压在物理特性上只能才生0.05的亮度,这样对于这个像素点就和我们的预期有差距了,这时候怎么办了,聪明的科学家就想到了我这个像素要0.2的亮度,给0.2v不行,我就给0.4v。这样就修改我们的图像像素数据值对于0.2的亮度我们给0.4v的数据,这样就是gamma校正。我们要理解gamma是为了补偿显示器还原色彩不准确所引入的,显示器用来激发显示亮度的电压和亮度不是线性正比例关系,故显示器必须做gamma修正,使得显示器能正确的显示信号源给定的颜色值。
 

### YCbCr颜色空间的详细介绍 #### 定义与起源 YCbCr色彩空间是一种广泛应用于数字视频数字图像处理中的色彩编码方式[^1]。这种色彩模型源自于早期的YUV色彩空间,其中Y表示亮度分量,而CbCr则分别是蓝黄色差(Blue-Yellow difference)以及红绿色差(Red-Green difference)两个色度分量。 #### 色彩成分解释 - **Y (Luminance)**: 表示像素的明亮程度或灰阶值,即所谓的“亮度”。这一部分包含了人类视觉系统最为敏感的信息。 - **Cb (Chrominance Blue-Difference)** **Cr (Chrominance Red-Difference)** : 这两者的组合用来描述颜色属性,具体来说就是相对于灰色调的颜色偏差情况。它们共同构成了完整的彩色信息。 #### 应用优势 由于采用了独立的亮度通道[Y]一对色度通道[Cb, Cr], 图像数据可以更有效地被压缩而不明显影响观感质量;同时,在某些情况下还可以降低带宽需求并提存储效率. #### RGB至YCbCr转换公式 当涉及到具体的数值计算时,可以从标准RGB色彩模式转变为Y'CbCr格式: \[ \begin{align*} Y &= 0.257R + 0.564G + 0.098B + 16 \\ Cb &= -0.148R - 0.291G + 0.439B + 128\\ Cr &= 0.439R - 0.368G - 0.071B + 128 \end{align*} \][^3] 这里需要注意的是,经过上述变换后的\(Y\)范围通常是在16~235之间变化,而\(Cb\)\(Cr\)则会在16~240范围内取值。 ```python import numpy as np def rgb_to_ycbcr(r, g, b): y = int(0.257 * r + 0.564 * g + 0.098 * b + 16) cb = int(-0.148 * r - 0.291 * g + 0.439 * b + 128) cr = int(0.439 * r - 0.368 * g - 0.071 * b + 128) return y, cb, cr # 测试函数 print(rgb_to_ycbcr(255, 0, 0)) # 输出应接近 (16, 147, 240), 对应纯红色 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值