[Color]深入学习YCbCr色彩模型

原创 2006年05月29日 00:27:00

File:      StudyYCbCr.txt
Name:      深入学习YCbCr色彩模型
Author:    zyl910
Version:   V1.0
Updata:    2006-5-28


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


一、基础

  RGB转YCbCr的转换是这样的:
[Y ] = [ 0.299   0.587   0.114 ]   [R]   [  0]
[Cb] = [-0.1687 -0.3313  0.5   ] * [G] + [128]
[Cr] = [ 0.5    -0.4187 -0.0813]   [B]   [128]


  YCbCr转RGB的转换是这样的:
[R] = [1  0        1.402  ]   [  Y   ]
[G] = [1 -0.34414 -0.71414] * [Cb-128]
[B] = [1  1.772    0      ]   [Cr-128]

 

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

  看到“YCbCr转RGB”中计算R、B的那些零没有,把它们精简掉:
R = Y + 1.402*(Cr-128)
B = Y + 1.772*(Cb-128)

  利用“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.402*(Cr-128)] - 0.114*[Y + 1.772*(Cb-128)]} / 0.587
 = {Y - [0.299*Y + 0.299*1.402*(Cr-128)] - [0.114*Y + 0.114*1.772*(Cb-128)]} / 0.587
 = [(1 - 0.299 - 0.114)*Y - 0.299*1.402*(Cr-128) - 0.114*1.772*(Cb-128)] / 0.587
 = Y - (0.299*1.402 / 0.587)*(Cr-128) - (0.114*1.772 / 0.587)*(Cb-128)
 = Y - 0.714136*(Cr-128) - 0.344136*(Cb-128)


  现在只是不明白神奇的1.772、1.402了,将它们代入“RGB转YCbCr”看看:
Cb: 1.772 * [-0.1687 -0.3313  0.5   ] = [-0.2989364 -0.5870636  0.886    ] ≈ [ -0.299 -0.587 1-0.114]
Cr: 1.402 * [ 0.5    -0.4187 -0.0813] = [ 0.701     -0.5870174 -0.1139826] ≈ [1-0.299 -0.587  -0.114]

  0.5看起来很明了,我们用 0.5 与 0.299、0.587、0.114 可以推导出那两个常数:
Cb2b * 0.5 = 1-0.114
Cr2R * 0.5 = 1-0.299

Cb2b = 2*(1-0.114) = 1.772
Cr2R = 2*(1-0.299) = 1.402


  用矩阵计算“RGB转YCbCr”很慢,我们可根据“YCbCr转RGB”逆推:
Cb = (1 / 1.772)*(B - Y) + 128 = [1 / (2*(1-0.114))]*(B - Y) + 128 = (1/2)*[1 / (1-0.114)]*(B - Y) + 128
Cr = (1 / 1.402)*(R - Y) + 128 = [1 / (2*(1-0.299))]*(R - Y) + 128 = (1/2)*[1 / (1-0.299)]*(R - Y) + 128

  啊哈!现在理解 1-0.114、1-0.299 的由来了吧:当 B为1、R和G为0 时,(B-Y) 为 (1-0.114) = 0.886;当 B为0、R和G为1 时,(B-Y) 为 (0-0.886) = -0.886。所以需要除以(1-0.114)将结果缩放。
  但是,我们一般需要结果在 0~255 这样的字节范围内,所以需要乘以(1/2),再加上128

  所以YCbCr完全是根据 0.299、0.587、0.114 这几个常数推导出来的。


三、整数算法

  先将前面的成果列出来。
  RGB转YCbCr:
Y = 0.299*R + 0.587*G + 0.114*B
Cb = (1 / 1.772)*(B - Y) + 128
Cr = (1 / 1.402)*(R - Y) + 128

  YCbCr转RGB:
R = Y + 1.402*(Cr-128)
B = Y + 1.772*(Cb-128)
G = Y - (0.299*1.402 / 0.587)*(Cr-128) - (0.114*1.772 / 0.587)*(Cb-128)

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

R = Y + YCbCr_Cr2R[Cr]
B = Y + YCbCr_Cb2B[Cb]
G = Y - ((YCbCr_Cr2G[Cr] + YCbCr_Cb2G[Cb]) >> 16)

OpenCV Using Python——RGB颜色空间和YCbCr颜色空间的混合肤色检测

RGB颜色空间和YCbCr颜色空间的混合肤色检测 1. 颜色空间混合肤色检测简介         Kukharev等人为了提高模型的稳定性,将多个颜色空间结合,提出RGB颜色空间和YCbCr颜...
  • shadow_guo
  • shadow_guo
  • 2015年02月08日 09:34
  • 3459

RGB/YUV/YCbCr--关于显示,颜色你需要了解的一些 事 入门扫盲好文章

转自:http://www.52rd.com/Blog/Detail_RD.Blog_SHRDFresh_64107.html?WebShieldDRSessionVerify=9SBPE8cKzz8...
  • vc66vcc
  • vc66vcc
  • 2016年04月21日 11:43
  • 1969

深入学习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

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

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

深入学习YUV色彩模型

File:      StudyYUV.txtName:      深入学习YUV色彩模型Author:    zyl910Version:   V1.1Updata:    2006-5-28  最...
  • benny5609
  • benny5609
  • 2007年09月30日 08:55
  • 1266

YCbCr颜色空间下的一个简便的肤色模型

转自http://www.cnblogs.com/tornadomeet/archive/2012/12/05/2802428.html   前言    最近课题研究上想采用皮肤信息,但是个人...
  • hqh45
  • hqh45
  • 2014年03月27日 16:31
  • 2714

基于YCbCr空间的肤色建模的常用方法及实例

目前常用的静态肤色建模方法主要有:     阈值法,简单高斯模型,混合高斯模型,直方图统计和区域级检测。 % plot 3D Fitted Gaussian Mixture    clo...
  • SoaringLee_fighting
  • SoaringLee_fighting
  • 2017年06月10日 20:13
  • 854

白平衡的工作原理、作用与YUV、YCbCr的联系与区别

白平衡是一个很抽象的概念:最通俗的理解就是让白色所成的像依然为白色,如果白是白,那其他景物的影像就会接近人眼的色彩视觉习惯。调整白平衡的过程叫做白平衡调整,白平衡调整在前期设备上一般有三种方式:预置白...
  • yangdashi888
  • yangdashi888
  • 2016年08月11日 21:49
  • 1086

自动白平衡也即:color constancy (色彩恒常)研究总结

对camera 进行自动白平衡、color constancy (色彩恒常),有很多方法, 在“Computational Color Constancy: Survey and Experim...
  • phoenixtree7
  • phoenixtree7
  • 2014年09月22日 08:51
  • 928

Color Constancy 色彩恒常性(1)White Patch Retinex

[原创]Color Constancy 色彩恒常性(1)White Patch Retinex   Color Constancy主要是通过 Marc Ebner 的...
  • u011455899
  • u011455899
  • 2016年04月07日 20:37
  • 1570
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Color]深入学习YCbCr色彩模型
举报原因:
原因补充:

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