BT601 和 BT709

由于在处理相机实时图像数据时,需要将相机采集的YUV数据转换为RGB,根据GPUImage的源码看到是有三种转换矩阵用于将YUV数据转换成RGB数据,分别是

// BT.601, which is the standard for SDTV.
GLfloat kColorConversion601Default[] = {
1.164,  1.164, 1.164,
0.0, -0.392, 2.017,
1.596, -0.813,   0.0,
};
// BT.601 full range (ref:http://www.equasys.de/colorconversion.html)
GLfloat kColorConversion601FullRangeDefault[] = {
1.0,    1.0,    1.0,
0.0,    -0.343, 1.765,
1.4,    -0.711, 0.0,
};// BT.709, which is the standard for HDTV.
GLfloat kColorConversion709Default[] = {
1.164,  1.164, 1.164,
0.0, -0.213, 2.112,
1.793, -0.533,   0.0,
};

可以看到其中两个比较奇特的关键字即 601 和 709,同时还有 FullRange 。

fullRange 和 videoRange

在apple关于图像pixelformat的定义中有关于yuv格式的420v和420f的定义

kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange = '420v',
/* Bi-Planar Component Y'CbCr 8-bit 4:2:0, video-range (luma=[16,235] chroma=[16,240]).  baseAddr points to a big-endian CVPlanarPixelBufferInfo_YCbCrBiPlanar struct */
kCVPixelFormatType_420YpCbCr8BiPlanarFullRange  = '420f',
/* Bi-Planar Component Y'CbCr 8-bit 4:2:0, full-range (luma=[0,255] chroma=[1,255]).  baseAddr points to a big-endian CVPlanarPixelBufferInfo_YCbCrBiPlanar struct *

而fullRange和videoRange本身的意义是YUV颜色空间中 亮度部分 Y 的取值范围,fullRange的取值范围为luma=[0,255] chroma=[1,255],而videoRange是luma=[16,235] chroma=[16,240],另外chroma(Cb,Cr)即色度部分与亮度部分不同,始终为fullRange。

YUV

初识颜色空间时,YUV应该是除了大家从小耳濡目染的RGB之外,最让人不明觉历的颜色空间了,它高端大气的名字再加上YUV本身420,422,411这些不同变形 所显示的复杂度更容易让人望而却步。

不过本着天下事有难易乎,为之则难者亦易矣,不为则易者亦难矣的态度,我们来对YUV进行一个简明的学习。

YUV是将人眼的感知考虑进来的用于对颜色彩色图像进行编码的颜色空间,根据维基百科的说法简化来说,YUV与YCbCr这两个概念之间界限比较模糊且是有部分重叠的,因为YUV是用于电视系统中模拟颜色信息的编码,而YCbCr适用于对以MPEG及JPEG为代表的视频及静态图片的压缩及传输等场景下对颜色信息的数字编码。

而现在YUV通常用于计算机工业中称呼使用YCbCr进行编码的文件格式。而一个小常识是YUV3个分量分别都并不是缩写,而只是对应于xyz的一种坐标系代号而已。

YUV和RGB之间的转换

SDTV with BT601

BT601是用数字格式编码交错的模拟视频信号的标准,定义于SDTV标准中

//Wr,Wg,Wb,Umax,Vmax均为对应于各BT标准的
Wr = 0.299
Wg = 1 - Wr - Wb = 0.587
Wb = 0.114
Umax = 0.436
Vmax = 0.615

HDTV with BT709

BT 709标准调整了

Wr = 0.2126
Wr = 0.0722

GPUImage框架中同款的YCbCr与RGB转换规则, 应用于数字颜色信息编码的YCbCr应用于SDTV时,标准为BT601

在这种videoRange格式中,亮度和色度空间都留有footroom和headroom,部分原因是为了与模拟视频设备结合的场景,而一般典型的比如JPEG图像使用如下的颜色格式full range。

而对于HDTV,标准为BT709,由于使用的参数不同,与SDTV一样留有headroom和footroom。

所以对于videorange和fullrange对应的转换为RGB的fragmentshader分别为

//fullrange
varying highp vec2 textureCoordinate;uniform sampler2D luminanceTexture;
uniform sampler2D chrominanceTexture;
uniform mediump mat3 colorConversionMatrix;void main()
{mediump vec3 yuv;lowp vec3 rgb;yuv.x = texture2D(luminanceTexture, textureCoordinate).r;yuv.yz = texture2D(chrominanceTexture, textureCoordinate).ra - vec2(0.5, 0.5);rgb = colorConversionMatrix * yuv;gl_FragColor = vec4(rgb, 1);
}//video range
varying highp vec2 textureCoordinate;uniform sampler2D luminanceTexture;
uniform sampler2D chrominanceTexture;
uniform mediump mat3 colorConversionMatrix;void main()
{mediump vec3 yuv;lowp vec3 rgb;yuv.x = texture2D(luminanceTexture, textureCoordinate).r - (16.0/255.0);yuv.yz = texture2D(chrominanceTexture, textureCoordinate).ra - vec2(0.5, 0.5);rgb = colorConversionMatrix * yuv;gl_FragColor = vec4(rgb, 1);
}

作者:纵横而乐

来源:https://www.jianshu.com/u/a0bb5a5215e4

一个音视频领域专业问答的小圈子!

加我微信 ezglumes 拉你入技术交流群

推荐阅读:

音视频开发工作经验分享 || 视频版

OpenGL ES 学习资源分享

开通专辑 | 细数那些年写过的技术文章专辑

Android NDK 免费视频在线学习!!!

你想要的音视频开发资料库来了

推荐几个堪称教科书级别的 Android 音视频入门项目

觉得不错,点个在看呗~

YUV 与 颜色空间转换相关推荐

  1. FFmpeg入门详解之121:颜色空间转换RGB和YUV的原理与实战

    5.颜色空间转换RGB和YUV的原理与实战 三种颜色空间模型:RGB.YUV.HSV 一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间. 但被描述 ...

  2. 利用OpenCV的函数cvtcolor()进行颜色空间转换时需要注意的地方

    OpenCV的函数cvtcolor()的原型如下: C++原型: void cv::cvtColor(InputArray src,OutputArray dst,int code,int dstCn ...

  3. OpenCV颜色空间转换函数:cv::cvtColor介绍

    OpenCV颜色空间转换函数:cv::cvtColor介绍 Color Conversion Code(颜色转换代码) Enumerator COLOR_BGR2BGRA add alpha chan ...

  4. 详解色彩模型、色域以及颜色空间转换

    常见的色彩模型 RGB色彩模型:常用于电视.摄像机等显示器,遵循加色法则(光的三原色,越混越白):缺点是色彩空间不够均匀,不容易进行色差的评价:与直观的色调.饱和度.亮度没有直接联系,不符合人的认知心 ...

  5. 02 数字图像技术——颜色空间转换与颜色空间分割实验结果与分析——python

    04 数字图像技术--图像特征提取之实验结果与分析 03 数字图像技术--频域滤波实验结果与分析 02 数字图像技术--颜色空间转换与颜色空间分割实验结果与分析 01 数字图像基本操作--图像采样.量 ...

  6. 【Codecs系列】颜色空间转换CSconvert:NV21转BGR24和BGR24转NV21

    title: 颜色空间转换CSconvert:NV21转BGR24和BGR24转NV21 date: 2019-08-09 22:13:47 categories: 技术 音视频技术 tags: Co ...

  7. 颜色空间转换RGB-YCbCr

    颜色空间 颜色空间(Color Space)是描述颜色的一种方式,它是一个由数学模型表示的三维空间,通常用于将数字表示的颜色转换成可见的颜色.颜色空间的不同取决于所选的坐标轴和原点,以及用于表示颜色的 ...

  8. 【OpenCV3图像处理】颜色空间转换(一)颜色空间分类总结

    颜色空间 近100多年来,为了满足不同用途的需要,人们开发了许多不同名称的颜色空间,"可以说表示颜色空间的数目是无穷的",但是,现有的颜色空间还没有一个完全符合人的视觉感知特性.颜 ...

  9. 颜色空间转换 cvtColor()[OpenCV 笔记13]

    void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0) src: 输入图像 dst: 输出图像 code: 颜色空间 ...

  10. python 图像数据类型及颜色空间转换

    一.图像数据类型及转换 在skimage中,一张图片就是一个简单的numpy数组,数组的数据类型有很多种,相互之间也可以转换.这些数据类型及取值范围如下表所示: Data type Range uin ...

最新文章

  1. GPU上稀疏矩阵的基本线性代数
  2. Spark 1.2 编译
  3. jQuery的on绑定click和直接绑定click区别
  4. oracle12.2 redo 进程,【Oracle Database 12c新特性】TTnn TMON新的redo传输后台进程
  5. php添加导航和删除导航,新增/修改/删除ECSHOP后台左侧导航菜单
  6. Referenced file contains errors
  7. 推荐系统专利:一种信息推荐方法、系统及存储介质和终端设备
  8. Ant Design Upload 文件上传功能
  9. mysql课程表设计_MySQL如何设计课程表的数据库
  10. 天津等保测评机构项目测评收费价格标准参考
  11. android 辅助功能(无障碍)
  12. 利用黎曼几何分析EEG信号(四):集论初步与拓扑空间初步
  13. 机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码)...
  14. 感悟-关于爱情(一年半,最后一次告别)
  15. 计算机系统1 实验 LC-3 Nim游戏 子程序
  16. python 小说人物分析_用Python来看金庸先生的小说,这一生向大侠致敬
  17. 黑马程序员_毕向东_JavaScript视频教程--学习笔记
  18. 程序框图与计算机程序,深度解析算法与程序框图.pdf
  19. 解决C盘大小不足的问题
  20. 电子杂志(画册、商刊)制件软件-iebook超级精灵2008金牌版

热门文章

  1. 利用EXCEL将中文汉字转为拼音
  2. Apache中文URL中有包含“\x85”字节的汉字时导致的Rewrite失败及404问题
  3. 10015---MySQL--innodb_flush_log_at_trx_commit参数
  4. 下载编译chromium
  5. 406个银英稀有精英名称
  6. 星球大战1-6[Star Wars 1-6]
  7. 重试利器之Guava Retrying
  8. 【leetcode】189.旋转数组 (四种方法开阔思路,java实现!)
  9. 天津全国计算机等级考试考点,2018年下半年全国计算机等级考试报考简章及天津考点安排...
  10. Linux虚拟内存空间分布