深入学习YUV色彩模型

原创 2007年09月30日 08:55:00

File:      StudyYUV.txt
Name:      深入学习YUV色彩模型
Author:    zyl910
Version:   V1.1
Updata:    2006-5-28


  最近突然又对图形学有了兴趣,翻出了多年前学习图形学的笔记,感触良多。于是将它们整理好发了上来。


一、基础

  RGB转YUV的转换是这样的:
[Y] = [ 0.299  0.587  0.114]   [R]
[U] = [-0.148 -0.289  0.437] * [G]
[V] = [ 0.615 -0.515 -0.100]   [B]


  YUV转RGB的转换是这样的:
[R] = [1  0      1.140]   [Y]
[G] = [1 -0.395 -0.581] * [U]
[B] = [1  2.032  0    ]   [V]

 

二、那些变换系数是如何推导出来的?

  最开始,我是想找一个RGB与YUV转换的快速算法,于是开始研究它的系数。

2.1 YUV转RGB

  最先以YUV转RGB为突破口。注意在转换矩阵中有两个0,所以可以去掉一次乘法:
B = Y + 2.032*U
R = Y + 1.140*V

  利用“Y = 0.299*R + 0.587*G + 0.114*B”这个事实来推导G:
G = (Y - 0.299*R - 0.114*B) / 0.587

  将B、R的计算公式代入并化简:
G = [Y - 0.299*(Y + 1.140*V) - 0.114*(Y + 2.032*U)] / 0.587
  = [Y - (0.299*Y + 0.299*1.140*V) - (0.114*Y + 0.114*2.032*U)] / 0.587
  = [(Y - 0.299*Y - 0.114*Y)- 0.299*1.140*V - 0.114*2.032*U] / 0.587
  = [(1 - 0.299 - 0.114)*Y - 0.299*1.140*V - 0.114*2.032*U] / 0.587
  = (0.587*Y - 0.299*1.140*V - 0.114*2.032*U) / 0.587
  = Y + (-0.299*1.140*V - 0.114*2.032*U) / 0.587
  = Y - (0.299*1.140 / 0.587)*V - (0.114*2.032 / 0.587)*U
  = Y - (0.114*2.032 / 0.587)*U - (0.299*1.140 / 0.587)*V
  = Y - 0.394630*U - 0.580681*V

  正好与YUV转RGB的系数符合。
  完整的转换公式:
B = Y + 2.032*U
R = Y + 1.140*V
G = Y - (0.114*2.032 / 0.587)*U - (0.299*1.140 / 0.587)*V


2.2 RGB转YUV
  从分析YUV转RGB时,我们发现了两个关键系数——与U有关的2.032 和 与V有关的1.140。所以我们拿它们去乘RGB转YUV转换矩阵的系数试试:
U: 2.032 * [-0.148 -0.289  0.437] = [-0.300736 -0.587248  0.887984]
V: 1.140 * [ 0.615 -0.515 -0.100] = [ 0.701100 -0.587100 -0.114000]

  观察这些系数,发现有两个特点:
  1.那些负数系数与“彩色转灰度”系数(0.299、0.587、0.114)很相似。
  2.那个正数系数 正好等于 两个负数系数之和的绝对值。

  所以我们可以将U、V部分的转换矩阵看成这个样子:
U: (1 / 2.032) * [ -0.299 -0.587 1-0.114]
V: (1 / 1.140) * [1-0.299 -0.587  -0.114]

  完整的转换公式:
[Y] = [   0.299          0.587           0.114       ]   [R]
[U] = [( -0.299)/2.032 (-0.587)/2.032 (1-0.114)/2.032] * [G]
[V] = [(1-0.299)/1.140 (-0.587)/1.140 ( -0.114)/1.140]   [B]


  用矩阵计算“RGB转YUV”很慢,我们可根据“YUV转RGB”逆推:
Y = 0.299*R + 0.587*G + 0.114*B
U = (1 / 2.032)*(B-Y)
V = (1 / 1.140)*(R-Y)


2.3 小结

  所谓的YUV色彩模型是由0.299、0.587、0.114、2.032、1.140这五个数字定义出来的,非常简洁、精巧。但是这还不是最精巧的,YCbCr完全是由0.299、0.587、0.114这三个数字定义出来的,详见《深入学习Ycbcr色彩模型》。

 

三、整数算法

  先将前面的成果列出来。
  RGB转YUV:
Y = 0.299*R + 0.587*G + 0.114*B
U = (1 / 2.032)*(B-Y)
V = (1 / 1.140)*(R-Y)

  YUV转RGB:
B = Y + 2.032*U
R = Y + 1.140*V
G = Y - (0.114*2.032 / 0.587)*U - (0.299*1.140 / 0.587)*V

  可以看出,U、V、R、B 的计算就是用乘法缩放数值,完全可以数组查表。
  至于Y的计算,请参考《彩色转灰度算法彻底学习》
  唯一麻烦一点的是G,因为它有两个乘法,直接整数查表恐怕不精确。所以可以考虑将数值缩放65536倍(16位精度)。
  大概是这样:
Y = (R*19595 + G*38469 + B*7472) >> 16
U = YUV_B2U[0x100 + B - Y]
V = YUV_R2V[0x100 + R - Y]

B = Y + YUV_U2B[0x100 + U]
R = Y + YUV_V2R[0x100 + V]
G = Y - ((YUV_U2G[0x100 + U] + YUV_V2G[0x100 + V]) >> 16) 

颜色空间YUV简介

颜色空间YUV简介
  • fengbingchun
  • fengbingchun
  • 2015年12月08日 12:04
  • 7514

YUV值对应的颜色

最近有人在网上问我,YUV的值对应的颜色是如何的 下面给出YUV值对应的颜色关系 256张图512x512,每张对应的Y为0~255 每4x4对应的是同一颜色区域 横坐标 U 纵坐标V...
  • cabbage2008
  • cabbage2008
  • 2015年11月30日 19:44
  • 6571

RGB/HSV/YUV颜色空间模型总结

转自:http://blog.sina.com.cn/s/blog_679741950100ivz0.html 颜色通常用三个相对独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐...
  • yapingmcu
  • yapingmcu
  • 2013年07月02日 11:35
  • 17006

opencv颜色识别学习总结

将OpenCV 用于识别彩色LED颜色 将OpenCV 用于识别彩色LED颜色时,可以通过分色计算各通道非饱和像素的HSV值,能可靠识别各LED的颜色。 使用python编程,识别...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年03月12日 19:40
  • 10304

Camera 图像处理原理分析- 色彩篇 一

  一两年前写的了,贴上来作者:刘旭晖 colorant@163.com 转载请注明出处http://blog.csdn.net/colorant/1         前言做为拍照手机的核心模块之一,...
  • colorant
  • colorant
  • 2007年12月03日 10:16
  • 10755

[Color]深入学习YUV色彩模型 V1.1

File:      StudyYUV.txtName:      深入学习YUV色彩模型Author:    zyl910Version:   V1.1Updata:    2006-5-28  最...
  • zyl910
  • zyl910
  • 2006年05月25日 00:31
  • 7040

颜色空间(RGB、YUV、YIQ、CMY)

 人类获取信息的70~80%来源于视觉。     多媒体计算机的图像处理和视频效应的过程:首先必须把连续的图像函数f(x,y) 进行空间和幅值上的离散化处理。然后再将离散化的数字信息还原为...
  • yjhxdzyx
  • yjhxdzyx
  • 2015年02月04日 16:29
  • 2847

Camera 图像处理原理分析- 色彩篇 一

一两年前写的了,贴上来 作者:刘旭晖 colorant@163.com 转载请注明出处 http://blog.csdn.net/colorant/ 1         前言 做为拍照...
  • qq1602382784
  • qq1602382784
  • 2016年08月11日 11:49
  • 182

详解YUV数据格式

YUV格式有两大类:planar和packed。 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。 对于packed的YUV格式,每个像素点...
  • Beyond_cn
  • Beyond_cn
  • 2013年10月24日 14:43
  • 46966

深入学习YCbCr色彩模型

一、基础  RGB转YCbCr的转换是这样的:[Y ] = [ 0.299   0.587   0.114 ]   [R]   [  0][Cb] = [-0.1687 -0.3313  0.5   ...
  • hitmonkey
  • hitmonkey
  • 2008年07月05日 02:47
  • 817
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入学习YUV色彩模型
举报原因:
原因补充:

(最多只允许输入30个字)