V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
loken2020
V2EX  ›  程序员

YUV 色彩空间

  •  
  •   loken2020 · 2022-10-16 10:19:03 +08:00 · 1543 次点击
    这是一个创建于 770 天前的主题,其中的信息可能已经有所发展或是发生改变。

    虽然日常生活中接触得比较多的是 RGB 色彩空间,但是还有另一种比较常用的色彩空间 是 YUV 。RGB 色彩空间更适合图像采集和显示,YUV 空间用于编码和存储则比较好。在存储和编码之前,RGB 图像要转换为 YUV 图像,而 YUV 图像在 显示之前通常有必要转换回 RGB 。

    这里显示的时候 YUV 转成 RGB 通常是硬件或者软件内部做了,我们写代码开发的时候 这个 YUV 转 RGB 显示到屏幕这个过程通常是透明的。

    无论是 RGB 还是 YUV ,他们都是 表达 色彩信息的一种方式。

    可以把 RGB 跟 YUV 色彩空间看成是 一个 xyz 轴 的立方形,一个三维的空间。

    首先,讲一下为什么会出现 YUV 色彩空间,这个涉及到 HVS ( Human Visual System )人类视觉系统 对 色彩空间的感知能力。

    视觉心理学研究表明,人的视觉系统对光的感知程度可以用两个属性来描述:亮度( luminance )跟 色度( chrominance ),这里的色度也叫做 饱和度或彩度,总之 色度的叫法有很多,要注意上下文来区分语义。

    然后 色度感知 包含两个维度:色调( Hue )和 色饱和度( saturation )。色调是由光波的峰值定义的,描述的是光的颜色。色饱和度是由光波的谱宽定义的,描述的是光的纯度。

    因此 HVS 对色彩的感知主要有 3 个属性:亮度( luminance ),色调( Hue )和 色饱和度( saturation )。也就是 YUV 色彩空间,Y 代表 亮度,U 代表色调,V 代表色饱和度。

    经过大量研究实验表明,视觉系统 对 色度 的敏感度 是远小于 亮度的。所以可以对 色度 采用更小的采样率来压缩数据,对亮度采用正常的采样率即可,这样压缩数据不会对视觉体验产生太大的影响。简单来说就是用更少的数据来表达 色度( chroma ),用更多的数据来表达 亮度( luminance )。

    https://ffmpeg.xianwaizhiyin.net/base-knowledge/raw-yuv.html

    10 条回复    2023-07-04 17:09:30 +08:00
    darer
        1
    darer  
       2022-10-16 10:27:17 +08:00
    楼主想表达些什么呢
    zhs227
        2
    zhs227  
       2022-10-16 12:01:02 +08:00   ❤️ 2
    看链接貌似是楼主写了一本书,粗略翻看了一下内容还不错。
    cpstar
        3
    cpstar  
       2022-10-16 12:18:48 +08:00
    Lab 算啥?
    iamzuoxinyu
        4
    iamzuoxinyu  
       2022-10-16 13:06:14 +08:00
    比较系统,但没什么新鲜东西…
    AyaseEri
        5
    AyaseEri  
       2022-10-16 13:11:07 +08:00   ❤️ 1
    如果我没记错的话,这里 YUV 产生的原因其实不准确
    loken2020
        6
    loken2020  
    OP
       2022-10-16 13:14:29 +08:00
    AyaseEri 您好,感谢指正,原本的描述确实不太准备。我优化了一下,为什么会出现 YUV 色彩空间,换成 为什么 YUV 色彩空间在音视频开发领域更加常用。
    cnbatch
        7
    cnbatch  
       2022-10-16 17:53:52 +08:00
    YUV 的出现(以及那一堆研究数据协助 YUV 的出现)其实单纯就是为了兼容黑白电视机,纯属不得已的妥协方案。
    由此开始的长达几十年的广泛使用,导致 YUV 反而成了惯用标准以至于成为事实标准,最终开发领域为了兼容性,也就不得不“更加常用”YUV 了。

    至于 YCbCr ,其实也是影音行业的习惯性延续。如果经历过上世纪 90 年代以及本世纪头 5 年,就会记得不少 VCD 和 DVD 影碟播放机都有三孔的色差分量接口输出,电视机也有三孔的色差分量输入,这个就是 YCbCr 。
    在当时,带有该接口的 VCD 播放机并不算多,而带有该接口的 DVD 播放机就多得多。直到蓝光碟片播放机的出现,色差分量接口才总算淘汰。
    VCD 和 DVD 用什么格式?没错,就是 MPEG 。VCD 用 MPEG-1 ,DVD 用 MPEG-2 。

    在制定 MPEG 早期标准的年代,YUV 大行其道,大多数显示设备(说的就是电视机)只认识 YUV 输入方式(单端口 RCA ,高级点的才会有 S-端子和刚才提到的色差分量接口),连 VGA 都没有。在当时,只有极少数显示设备(电脑用的彩色显示器)支持 RGB (采用 VGA 接口),在那个年代,电脑远不如电视机那么普及。
    如此环境,MPEG 的制定者只能又一次向现实妥协,继续沿用 YUV 。

    所以严格来说,“YCrCb 适用于计算机用的显示器”其实应该是“YCrCb 适用于 VCD 和 DVD 播放器”或者“YCrCb 适用于 MPEG 视频的记录与回放”。
    loken2020
        8
    loken2020  
    OP
       2022-10-16 18:02:08 +08:00
    @cnbatch 感谢 cnbatch 大神指点。
    BGLL
        9
    BGLL  
       2022-10-17 15:37:36 +08:00
    是的,现在新的标准在用 ICtCp
    archxm
        10
    archxm  
       2023-07-04 17:09:30 +08:00
    YUV 000 转为 rgb ,看看是什么颜色,
    知道为啥 n 卡流畅,但偏绿吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   878 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 21:01 · PVG 05:01 · LAX 13:01 · JFK 16:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.