YCbCr to RGB and RGB toYCbCr

RGB => YCbCr:

Y = 0.299R + 0.587G + 0.114B
Cb = -0.1726R - 0.3388G + 0.5114B + 128
Cr = 0.5114R - 0.4282G – 0.0832B + 128

Then we get YCbCr => RGB:

R = Y + 1.371(Cr – 128)
G = Y – 0.6982(Cr – 128) – 0.3365(Cb – 128)
B = Y + 1.732(Cb – 128)

8bit conversion equation
Y = (77R + 150G + 29B)>>8
Cb = (-44R – 87G + 131B)>>8 + 128
Cr = (131R – 110G – 21B)>>8 + 128

R = Y + (351(Cr – 128))>>8
G = Y – (179(Cr – 128) + 86(Cb - 128))>>8
= Y – (179Cr + 86Cb)>>8 + ((179 + 86) * 128)>>8
= Y + 133 – (128 + 179Cr + 86Cb)>>8
B = Y + (443(Cb - 128))>>8

To use look-up table, we can change to following format:

RGB => YCbCr:
We adjust a little of the factors to avoid saturation operation to improve performance
Y = (77R + 150G + 29B)>>8
Cb = (128B – 43R – 85G)>>8 + 128 = (32768 + 128B – 43R – 85G)>>8
Cr = (128R – 107G – 21B)>>8 + 128 = (32768 + 128R – 107G – 21B)>>8

It needs 8 look-up tables:
T_77 [256], T_150 [256], T_29 [256], T_128 [256],
T_43 [256], T_85 [256], T_107 [256], T_21 [256]

YCbCr => RGB
R = SATURATION (Y + 1.371(Cr – 128))  
G = SATURATION (Y – 0.6982(Cr – 128) – 0.3365(Cb – 128))
B = SATURATION (Y + 1.732(Cb – 128))
Here, “SATURATION (A)” means:
If (A > 255)
A = 255
Else if (A < 0)
A = 0

It needs 4 tables:
Cr_1371 [256], Cr_06982 [256], Cb_03365 [256], Cb_1732 [256]

时间: 2024-10-20 05:22:40

YCbCr to RGB and RGB toYCbCr的相关文章

RGB 与 (RGB转 YCbCr再转为 RGB)的图像

RGB 与 (RGB转 YCbCr再转为 RGB)的图像   不可逆,可以从 矩阵的逆运算看出来. 附上 matlab 代码: clc,clear; Source=imread('1.jpg');%读入原始RGB图像 figure(1); subplot(1,2,1); imshow(Source):title('original image');%显示图像 [r c d]=size(Source);%计算图像大小 %------计算红色分量并显示分解图------% R(:,:,1)=Sour

RGB、YUV和YCbCr介绍【转】

RGB: 就是常说的红(Red).绿(Green)和蓝(Blue),每个图像的像素点由RGB三个通道的值组成. YUV和YCbCr: YUV与RGB的转换: Y'= 0.299*R' + 0.587*G' + 0.114*B' U'= -0.147*R' - 0.289*G' + 0.436*B' = 0.492*(B'- Y') V'= 0.615*R' - 0.515*G' - 0.100*B' = 0.877*(R'- Y') R' = Y' + 1.140*V' G' = Y' - 0.

matlab公共函数之RGB与YUV转换

matlab中有自带的rgb转ycbcr函数,但是根据观测,其Y的值为[16 235],不符合我们的要求,所以,提供另一种规范下的转换脚本函数,其Y的值满足[0 255] RGB转YUV % function yuv = myrgb2yuv(image) % input params. % image: input color image with 3 channels, which value must be [0 255] % output % yuv: 3 channels(YUV444,

谈谈“色彩空间表示方法”——RGB、YUY2、YUYV、YVYU、UYVY、AYUV

转自:http://bbs.chinavideo.org/viewthread.php?tid=4143 还可参考http://www.fourcc.org/yuv.php 小知识:RGB与YUV----摘自<DirectShow实务精选> 作者:陆其明 计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用R(Red).G(Green).B(Blue)相加混色的原理:通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红.绿.蓝磷光材料发光而产生色彩.这种色彩的表示方法称为RGB色彩空间表示(

算法优化:rgb向yuv的转化最优算法

朋友曾经给我推荐了一个有关代码优化的pdf文档<让你的软件飞起来>,看完之后,感受颇深.为了推广其,同时也为了自己加深印象,故将其总结为word文档.下面就是其的详细内容总结,希望能于己于人都有所帮助. 速度取决于算法 同样的事情,方法不一样,效果也不一样.比如,汽车引擎,可以让你的速度超越马车,却无法超越音速:涡轮引擎,可以轻松 超越音障,却无法飞出地球:如果有火箭发动机,就可以到达火星. 代码的运算速度取决于以下几个方面 1.  算法本身的复杂度,比如MPEG比JPEG复杂,JPEG比BM

RGB转为Lab空间

虽然若干年前就看过了关于色彩空间的介绍,但是直到今天才自己动手写代码做这件事情.虽然网络上已经有很多现成的例子,但是一则仅仅适用于浮点型的数据,另一方面,在实现上也有一些尚可优化之处. 色彩模型除了最常见的RGB以外,还有HSB.YCbCr.XYZ.Lab等.HSB一般仅仅作为图像处理过程中的临时模式,YCbCr常常用于图像的压缩处理,而XYZ则严格按照人眼对光信号的敏感度进行分布. 这里将要稍作讨论的便是Lab模型.网络上诸多的介绍都说Lab是基于XYZ的,故人们一般也只能找到XYZ和Lab之

RGB向yuv的转化最优算法,快得让你吃惊!

朋友曾经给我推荐了一个有关代码优化的pdf文档<让你的软件飞起来>,看完之后,感受颇深.为了推广其,同时也为了自己加深印象,故将其总结为word文档.下面就是其的详细内容总结,希望能于己于人都有所帮助. 速度取决于算法 同样的事情,方法不一样,效果也不一样.比如,汽车引擎,可以让你的速度超越马车,却无法超越音速:涡轮引擎,可以轻松 超越音障,却无法飞出地球:如果有火箭发动机,就可以到达火星. 代码的运算速度取决于以下几个方面 1.  算法本身的复杂度,比如MPEG比JPEG复杂,JPEG比BM

肤色检测一例-使用rgb颜色模型

代码: /* 输入:rgb图像 输出:与输入图像尺寸相同的灰度图,若rgb图中某像素检测为肤色,则灰度图中对应像素为255,否则为0 */ void SkinRGB( Mat &rgb,Mat &dst){ assert(rgb.channels() == 3 ); const int R = 2; const int G = 1; const int B = 0; dst = Mat::zeros(rgb.rows, rgb.cols, CV_8U); for (int i = 0; i

YUV与RGB视频采样

RGB:RGB表示红绿蓝三原色,一个视频点是有RGB红绿蓝三原色组成的,根据三原色各亮度不同,可组合成不同颜色的点,这就是彩色显示的原理.如果每种原色分别对应一个采样,          则需要三个采样表示一个彩色点,比如一个采样点是8位的,那么一个彩色点即为24位,也就是RGB8:8:8,称为真彩色. YUV:人类眼睛感觉亮度分成不同"视觉"细胞,因为感觉颜色的"彩色"视觉细胞少,所以对"颜色"不敏感,这就出现了减少"颜色"