RGB与YUV相互转换

FFmpeg 的社群来了,想加入微信社群的朋友请购买《FFmpeg原理》VIP版 电子书,里有更高级的内容与答疑服务。


从前文已经知道,R,G,B,3个分量都跟 亮度密切相关,也就是 3个分量里面都有大量的亮度信息。

RGB 转 YUV 的过程实际上就是 把 RGB 3分量里面的亮度信息 提取出来,放到 Y 分量。再把 RGB 3分量里面的 色调 ,色饱和度 信息提取出来放到 U跟 V分量。

所以这是一个信息提取过程,需要经过大量的实验。

提取 Y 亮度信息的公式如下:

$$
Y = Kr * R + Kg * G + Kb * B
$$

上面公式中的 K 是一个权重因子,Kr 代表 红色通道的权重,Kg 代表 绿色通道的权重,Kb 代表 绿色通道的权重,而且 Kr + Kg + Kb = 1

Cb 的定义是 B - Y 的差值,如下:

$$
Cb = B - Y
$$

Cr 的定义是 R - Y 的差值,如下:

$$
Cr = R - Y
$$

Cg 的定义是 G - Y 的差值,如下:

$$
Cg = G - Y
$$

上面的 Cb 就是 U 分量,V 是 Cr 分量。我们实际编码存储,或者传输的时候,是不需要用到 Cg 的。从上面的公式 可以看出,只需要知道 Y 跟 Cb 就能求 B 的值,知道 Y 跟 Cr 就能求 R 的值。知道 Y ,R 跟 B 就能根据第一条公式求到 G 的值。所以 Cg 没必要存储。Cr + Cb + Cg 其实是一个常量。


因为 K 权重因子是需要经过大量的实验才能得到,经过实验研究后发现,K 权重因子 会影响压缩率,所以产生了以下标准。

1. BT.601标准[1]——标清数字电视(SDTV)

$$
Y = 0.299R + 0.587G + 0.114B
$$

2. BT.709标准[2]——高清数字电视(HDTV)

$$
Y = 0.2126R + 0.7152G + 0.0722B
$$

3. BT.2020标准[3]——超高清数字电视(UHDTV)

$$
Y = 0.2627R + 0.6780G + 0.0593B
$$

因为某些原因,亮度这个信息,不能完完全全 从 RGB 里面提取出来,总会残留一些亮度信息在 RGB 里面没提取到。所以 K 权重因子 根据不同标准也是不同的。

BT.2020标准 生成的 YUV 数据在 编码系统里面的压缩率 是比 BT.709 小的,虽然现在还没开始进行编码压缩,但是确确实实,K权重因子会影响压缩效果。

本文主要讲解的是 BT.601 标准里面的计算公式。


补充 :讨论记录

参考文章:

1,RGB转YUV及YUV格式


由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1。QQ:2338195090。

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在RGB颜色空间计算图像亮度的缺点主要有两个: 1. RGB颜色空间并不是一种亮度感知的颜色空间。这意味着,对于相同的RGB颜色值,它们可能在人眼中的亮度感知是不同的,因为人眼对于不同颜色的亮度感知不同。因此,用RGB颜色空间计算图像亮度,可能会得到不准确的结果。 2. RGB颜色空间受到了光源和白平衡的影响。在不同的光源下,同一个RGB颜色值所代表的实际颜色是不同的。而白平衡的调整也会影响到RGB颜色空间中不同颜色通道的值,进而影响到计算得到的亮度值。因此,用RGB颜色空间计算图像亮度,可能会受到光源和白平衡的影响,导致结果不准确。 ### 回答2: 在RGB颜色空间计算图像亮度的缺点是: 1. 亮度计算的方式不够准确:RGB颜色空间是将颜色分为红、绿、蓝三个通道,亮度计算通常使用线性加权平均,即将红、绿、蓝三个通道的数值加权相加。然而,由于人眼对不同颜色的敏感程度不同,同时红、绿、蓝通道的显示器响应也不同,这种简单的加权计算并不能准确反映人眼感知的亮度。 2. 亮度信息的丢失:亮度计算没有考虑到颜色之间的相互影响。由于色彩之间的互相影响,例如红色与绿色相互叠加可能会得到更亮的结果,导致简单的加权平均亮度计算无法准确表示图像的真实亮度。 3. 对亮度的敏感度不够高:在RGB颜色空间中,红、绿、蓝三个通道的取值范围是0-255,而亮度的取值范围也是0-255。这种线性关系导致亮度信息在较暗或较亮区域的细节损失较多,对于感知到的微小亮度变化无法精确表示。 因此,仅仅使用RGB颜色空间计算图像亮度存在这些缺点。为了更准确地计算图像亮度,可以使用其他颜色空间如YUV、HSL等,这些颜色空间在亮度计算时考虑了人眼感知的特性,能够更好地反映图像的亮度变化。 ### 回答3: 在RGB颜色空间计算图像亮度的一个重要缺点是它没有考虑到人眼对不同颜色的敏感程度不同这一特点。由于人眼对绿色的感知更为敏感,对蓝色感知较弱,所以在计算亮度时,简单地对RGB通道进行平均或加权求和,会导致绿色通道对亮度的贡献过大,蓝色通道的贡献过小。 这个缺点在一些特定的场景中会引起问题。例如,在绿色背景下的物体可能在亮度上被过度强调,而蓝色背景下的物体可能在亮度上被忽略掉。这可能导致计算出来的亮度与人眼实际感知的亮度不符,使得图像处理结果出现明显的偏差。 为了解决这个问题,一种常见的方法是将RGB颜色空间转换YUV颜色空间,其中Y通道表示亮度。在YUV颜色空间中,亮度被更准确地表示,并且考虑到了人眼对不同颜色的感知差异。后续的图像处理可以基于Y通道进行,从而更加准确地计算和处理图像的亮度。 然而,即使在YUV颜色空间中,仍然存在其他缺点,例如对于不同显示设备的兼容性问题,以及在转换过程中可能引入的信息丢失。因此,在考虑图像亮度时,需要综合考虑不同颜色空间的特点和应用要求,选择合适的方法来计算和处理亮度,以使得结果更加准确和符合人眼感知。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Loken2020

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

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

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

打赏作者

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

抵扣说明:

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

余额充值