YUV色彩空间:
       Y是亮度值,也就是说8位的灰度值即可组成一幅黑白图像,黑白电视机就是这样的.
       UV是色彩值,是给Y上色用的.U是Cb也就是RGB中的蓝色分量,V是Cr也就是RGB中的红色分量.
       YUV444 指的是每四个像素采样中每个亮度Y分量都有一个色彩UV分量上色.
       YUV422 指的是每四个像素采样中两个亮度Y分量都有一个色彩UV分量上色.
       YUV420 指的是每四个像素采样中四个亮度Y分量都有一个色彩UV分量上色.

ITU-R BT.601 建议书里面记载了五种色彩变换式,分别是:

1. 模拟 RGB 讯号转为模拟 Y, (B-Y), (R-Y)

2. 模拟 (B-Y), (R-Y) 转为模拟 Cb, Cr

3. 模拟 YCbCr 数字化(取样、量化)成为数字 YCbCr

4. 模拟 RGB 数字化(取样、量化)成为数字 RGB

5. 数字 RGB 转为数字 YCbCr



1. 的变换式是



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



(R - Y) = 0.701 * R - 0.587 * G - 0.114 * B 



(B - Y) = - 0.299 * R - 0.587 * G + 886 * B 



2. 的变换式是



Cr = 0.713 * (R - Y) 

  = 0.500 * R - 0.419 * G - 0.081 * B 



Cb = 0.564 * (B - Y) 

  = - 0.169 * R - 0.331 * G + 0.500 * B 



就是你写的那个变换式。

上式 Y, R, G, B 的范围是 0.0~1.0,Cb, Cr 的范围是 0.5~-0.5。



模拟的 CbCr 通常表记为 PbPr。



由于这些表记的方法很乱,常有人会混合着用,所以写的时候最好注明是模拟还是数字,例如

3. 的模拟 YCbCr 数字化转换式

Y(d) = 219 * Y(a) + 16 

Cb(d) = 224 * Cb(a) + 128 

Cr(d) = 224 * Cr(a) + 128 



Y(a) 代表 analog,Y(d) 代表 digital。



4. 的模拟 RGB 数字化转换式

R(d) = 219 * R(a) + 16 

G(d) = 219 * G(a) + 16 

B(d) = 219 * B(a) + 16 



R(a), G(a), B(a) 的范围是 0.0~1.0,R(d), G(d), B(d) 的范围是 16~235。



加上 (a), (d),这样表记就清楚多了。



5. 的数字 RGB 转为数字 YCbCr

Y = (77 * R(d) / 256) + (150 * G(d) / 256) + (29 * B(d) / 256) 

Cb = - (44 * R(d) / 256) - (87 * G(d) / 256) + (131 * B(d) / 256) + 128 

Cr = (131 * R(d) / 256) - (110 * G(d) / 256) - (21 * B(d) / 256) + 128 



YCbCr: 16~235, RGB: 16~235



这个转换式是 straight 变换,没有 YC 伸张(Full-range,扩展 RGB: 0~255),有 YC 伸张的算式就是你提出的我以前写的那个算式。



这个表记法有点复杂,有的教科书在介绍亮度和色差的时候前面就先花了很多篇幅在定义表记的用法,例如我上面写的还是不及格,因为 BT.601 的 RGB 都要先经过 gamma correction,是 gamma 校正后的 RGB,要表记为 R'G'B' ^^;

还有那个 Y,是 BT.601 的 Y,所以 Y 的右下角要加上一个底字写 601,或者左上角要写 601,这样人家才知道你是 BT.601 定义的 Y,不是 BT.709 定义的 Y ^^;;



由于名词太多有点乱,许多人会混合着用,同样一个 YUV,有时候我们搞不清楚作者指的到底是数字的 YCbCr,还是模拟的 YPbPr,是 NTSC 的 YIQ,还是 PAL 的 YUV,是 601 的 YUV,还是 709 的 YUV,或者是 SMPTE 240M 的 YUV .... XD



有的时候作者在表记上没有明写,不过根据上下文意,我们可以猜出他说的是哪一个。

您看的那本书 ;) 有注明列的是 ITU-R recommendation BT.601 [1] 的 YCbCr 转换式,所以是模拟转换式,不是 BT.601-5。

当然用比较通用的 PbPr 来表示模拟色差是比较清楚的写法。



ITU 的建议书(recommendation)只要登记成为会员,每年都可以免费下载三本,601, 709, H.263 ..等等都可以免费下载 :D

http://www.itu.int/publications/bookshop/index.html

由 source code 可以得知,XviD 和大部分的软件一样是遵照这本书的标准转换式作的

http://www.video-demystified.com/book1/index.htm

算式为



Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16



Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128



Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

这个算式是模拟 YCbCr 和模拟 RGB 的转换式,这是很多人会被弄迷糊的地方。


转自http://hi.baidu.com/xiaojian009/blog/item/6d03930c203a9fc67bcbe19e.html


不同格式的YUV 和 RGB互转的更多相关文章

  1. YUV与RGB互转各种公式 (YUV与RGB的转换公式有很多种,请注意区别!!!)

    一. 公式:基于BT.601-6 BT601 UV 的坐标图(量化后): (横坐标为u,纵坐标为v,左下角为原点) 通过坐标图我们可以看到UV并不会包含整个坐标系,而是呈一个旋转了一定角度的八边形, ...

  2. 经典算法,yuv与rgb互转,查表法,让你的软件飞起来

    代码的运算速度取决于以下几个方面 1. 算法本身的复杂度,比如MPEG比JPEG复杂,JPEG比BMP图片的编码复杂. 2. CPU自身的速度和设计架构 3. CPU的总线带宽 4. 您自己代码的写法 ...

  3. 【视频处理】YUV与RGB格式转换

    YUV格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式. 因此当要对图像进行后期处理显示时,需要把YUV格式转换成RGB格式. RGB与YUV的变换公式如下: YUV(25 ...

  4. YUV和RGB格式分析

    做嵌入式项目的时候,涉及到YUV视频格式到RGB图像的转换,虽然之前有接触到RGB到都是基于opencv的处理,很多东西并不需要我们过多深入的去探讨,现在需要完全抛弃现有的算法程序,需要从内存中一个字 ...

  5. yuv rgb 互转 公式 及算法

    1 前言 自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用的过程,所以在不同的应用领域中为了更好更准确的 ...

  6. 嵌入式开发之davinci--- 8148/8168/8127 中的图像采集格式Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别

    简单来说,YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的RGB: 传统的红绿蓝格式,比如RGB565 ...

  7. YUV和RGB格式分析【转】

    转自:http://www.cnblogs.com/silence-hust/p/4465354.html 做嵌入式项目的时候,涉及到YUV视频格式到RGB图像的转换,虽然之前有接触到RGB到都是基于 ...

  8. YUV与RGB格式转换

    YUV格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式. 因此当要对图像进行后期处理显示时,需要把YUV格式转换成RGB格式. RGB与YUV的变换公式如下: YUV(25 ...

  9. 【图像处理与医学图像处理】YUV与RGB格式转换速度几种方法对比

    [视频处理]YUV与RGB格式转换 YUV格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式. 因此当要对图像进行后期处理显示时,需要把YUV格式转换成RGB格式. RGB与 ...

随机推荐

  1. linux下如何找出交叉编译器的某个库路径?

    答: 使用选项-print-file-name=<lib_name> 如列出libstdc++.so.6的库路径:aarch64-linux-gnu-gcc -print-file-nam ...

  2. Android之MVVM开发模式

    MVVM 模式简介 MVVM模式是指Model-View-ViewModel.相信看过笔者关于MVP的文章的读者也会发现,无论如何抽象化,在我们的View层中是无法避免的要处理一部分逻辑的.而MVVM ...

  3. 怎么去检测浏览器支不支持html5和css3?

    HTML5, CSS3 以及其他相关技术例如 Canvas.WebSocket 等等将 Web 应用开发带到了一个新的高度. 该技术通过组合 HTML.CSS 和 JavaScript 可以开发出桌面 ...

  4. 006-数据结构-树形结构-二叉树、二叉查找树、平衡二叉查找树-AVL树

    一.概述 树其实就是不包含回路的连通无向图.树其实是范畴更广的图的特例. 树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合. 1.1.树的特性: 每个结点有零个或多个子 ...

  5. 一百二十六:CMS系统之轮播图管理页面布局和添加轮播图的模态对话框制作

    视图 @bp.route('/banners/')@login_required@permission_required(CMSPersmission.POSTER)def banners(): re ...

  6. 一百零一:CMS系统之自定义restful风格json返回格式和内容

    鉴于flask-restful用起来太麻烦,这里自定义json统一返回格式和内容 from flask import jsonify class HttpCode: """ ...

  7. Java日志体系(七)日志框架切换

    通过 SLF4J 统一日志 在实际的日志转换过程中,SLF4J其实是充当了一个中介的角色.例如当我们一个项目原来是使用LOG4J进行日志记录,但是我们要换成LogBack进行日志记录. 此时我们需要先 ...

  8. jenkins报错解决

    https://www.cnblogs.com/yangxia-test/p/4368778.html https://blog.csdn.net/xlyrh/article/details/5138 ...

  9. VS2012编译php扩展

    注意:用VS2015来做会比较好! 开发前准备工作:cygwinvisual studio 2012php编译后的程序      使用的是 xampp集成安装包,所以编译后的程序路径为D:\xampp ...

  10. PHP非对称加密

    加密的类型: 在日常设计及开发中,为确保数据传输和数据存储的安全,可通过特定的算法,将数据明文加密成复杂的密文.目前主流加密手段大致可分为单向加密和双向加密. 单向加密:通过对数据进行摘要计算生成密文 ...