视频图像处理基础知识5(RGB与Ycbcr相互转换公式 )【转】

转自:http://blog.csdn.net/Times_poem/article/details/51471438

版权声明:本文为博主原创文章,未经博主允许不得转载。

需求说明:视频处理算法基本知识

      第一部分:有参考出处的RGB与Ycbcr相互转换

      第二部分:简单直接的RGB与Ycbcr相互转换

      第三部分:优化乘法的RGB与Ycbcr相互转换

      


第一部分


来自:http://blog.chinaunix.NET/uid-215617-id-2212957.html


 

在人脸检测中会用到YCbCr颜色空间,因此就要进行RGB与YCbCr颜色空间的转换,刚开始以为这个很简单,只不是加减乘除的问题,根据公式就可以了,但事实是有很多的公式,我在Baidu上找的,几乎没有什么可以能用的,一般的只有RGB转YCbCr,但是反过来就不行了,算不到正确的结果。

    我在图书馆找到一篇文章《数字RGB与YCbCr颜色空间转换的精度》作者:张懿,刘旭,李海峰,在这篇文章中找到了一个正确的相互转换的公式(也可能有误的)。在下面的公式中RGB和YCbCr各分量的值的范围均为0-255。

公式如下:

//数字RGB与YCbCr颜色空间转换的精度 

//在这两个公式中RGB和YCbCr各分量的值的范围均为0-255。

// RGB转换为YCbCr

// 这个公式来自:Genesis Microchip. gm6010/gm6015 Programming Guide[M]. California US: Genesis Microchip Company, 2002:85-90

// |Y   |    |16  |                    |65.738   129.057  25.06 |   |R|
// |Cb| = |128| + (1/256)*|-37.945  -74.494  112.43| *|G|
// |Cr |    |128|                   |112.439  -94.154  -18.28|   |B|

// YCbCr转换为RGB

// 这个公式来自:Genesis Microchip. gm6015 Preliminary Data Sheet[M]. California US: Genesis Microchip Company, 2001:33-34
//|R|                   |298.082  0               408.58 |   |Y   -16  |
//|G| = (1/256)*|298.082  -100.291 -208.12|* |Cb-128|
//|B|                   |298.082  516.411   0           |   |Cr -128|

 

加一点我的代码,为什么要加我的代码呢,不是因为写的代码好,只不过是我把上面公式中的矩阵/256算成小数了,这样子我们可以省点时间:

 


//
RGB转换为YCbCr

for(i =0 ; i < dest->dwSize; )
{
 UCHAR r,g,b;
 r = sBuf[i+0];
 g = sBuf[i+1];
 b = sBuf[i+2];
 dBuf[i+0]= (unsigned char)(r * 0.256789 + g * 0.504129 + b * 0.097906)+ 16; 
 dBuf[i+1]= (unsigned char)(r *-0.148223 + g * -0.290992 + b * 0.439215)+ 128;
 dBuf[i+2]= (unsigned char)(r * 0.439215 + g * -0.367789 + b *-0.071426)+ 128; 
 i += 3;
}

 

 


// YCbCr转换为RGB

for(i =0 ; i < dest->dwSize; )
{
 UCHAR y,u,v;
 y = sBuf[i+0];
 u = sBuf[i+1];
 v = sBuf[i+2];
 dBuf[i+0]= (unsigned char)(1.164383*(y- 16) + 0 + 1.596027*(v - 128)); 
 dBuf[i+1]= (unsigned char)(1.164383*(y- 16) - 0.391762*(u - 128) - 0.812969*(v - 128)); 
 dBuf[i+2]= (unsigned char)(1.164383*(y- 16) + 2.017230*(u - 128) + 0 );
 i += 3;
}

 

第二部分

来自:http://blog.csdn.net/a14730497/article/details/17886127


 

Y:明亮度(Luminance或Luma),也就是灰阶值。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。

 

Cb:反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。
Cr:反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。

在以下两个公式中RGB和YCbCr各分量的值的范围均为0-255。

RGB转换为YCbCr

Y   = 0.257*R+0.564*G+0.098*B+16
Cb = -0.148*R-0.291*G+0.439*B+128
Cr  = 0.439*R-0.368*G-0.071*B+128

等效为:

Y = (1/8192)[(135168 + 4129G) + (2015R + 803B)]     其他的Cb ,Cr 类似过程

//-------------------------------------------------------------------------------------------------------------------------------

YCbCr转换为RGB

R = 1.164*(Y-16)+1.596*(Cr-128)

G = 1.164*(Y-16)-0.392*(Cb-128)-0.813*(Cr-128)

B = 1.164*(Y-16)+2.017*(Cb-128)

或者

R = 1.164Y                + 1.596Cr - 222.912
G = 1.164Y - 0.391Cb - 0.813Cr + 135.488
B = 1.164Y + 2.018Cb                - 276.928

等效为:

R >> 9 = 596Y          + 817Cr - 114131
G >> 9 = 596Y - 200Cb  - 416Cr + 69370
B >> 9 = 596Y + 1033Cb         - 141787

第三部分


来自: http://www.cnblogs.com/qiweiwang/archive/2011/07/07/2099731.html


YCbCr转RGB的公式如下:

R = 1.164(Y-16) + 1.596(Cr-128);
G = 1.164(Y-16) - 0.391(Cb-128) - 0.813(Cr-128);
B = 1.164(Y-16) + 2.018(Cb-128);


其中的系数可以表示成


1.164  = 1 + 1/2^3 + 1/2^5 + 1/2^7;
1.596  = 1 +1/2+ 1/2^4 + 1/2^5;
0.391  = 1/2^2 + 1/2^3 + 1/2^6;
0.813  = 1/2 + 1/2^2 + 1/2^4;
2.018  = 2 + 1/2^6;

故而,上述公式可以转化成没有乘法的公式,大大提高了运算的效率。


整理来自:时间的诗

时间: 2024-10-13 00:02:53

视频图像处理基础知识5(RGB与Ycbcr相互转换公式 )【转】的相关文章

视频图像处理基础知识4(视频分辨率参考 行频 隔行扫描 逐行扫描)【转】

转自:http://blog.csdn.net/Times_poem/article/details/51470065 版权声明:本文为博主原创文章,未经博主允许不得转载. 需求说明:视频处理基本知识       第一部分:视频分辨率参数       第二部分:分辨率.行频.场频  第一部分:视频分辨率参数 1080p的画面分辨率为1920×1080 [视频分辨率参考]共分为以下5种规格(D1是数字电视系统显示格式的标准): D1:480i格式(525i):720×480(水平480线,隔行扫描

视频图像处理基础知识0(双线性插值算法进行图像缩放)【转】

转自:http://blog.csdn.net/times_poem/article/details/51395781 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 双线性插值说的很明白 双线性插值算法进行图像缩放及性能效果优化   双线性插值(说的很明白) 来自:http://www.cnblogs.com/linkr/p/3630902.html         http://www.cnblogs.com/linkr/p/3630902.html 双线性插值,这个

视频图像处理基础知识1(双线性插值算法描述及实现)【转】

 转自:http://blog.csdn.net/Times_poem/article/details/51396826                                        

《我的视频我做主:Premiere Pro CS5实战精粹》——1.2 视频编辑基础知识

1.2 视频编辑基础知识 本节主要讲解了在进行视频编辑时所需要了解的基本概念.读者通过对本节的学习能够掌握标清视频与高清视频的各自特点.帧速率.像素比等基本概念. 1.2.1 标清视频 标清视频是指标准清晰度的视频格式,英文"Standard Definition",简称"标清",缩写为"SD".具体地说,它是指图像水平清晰度为500-600线,最低为480线,分辨率为720像素×576像素,采用4:3的幅型比的VCD.DVD.模拟制式的电视节目

《Sony Vegas Pro 12标准教程》——第1章 基础篇——基础知识 1.1 影视剪辑的概念

第1章 基础篇--基础知识 在你拿起这本书的时候,我想,你应该已经准备好创作属于自己的影片了:同时,也选择了Sony Vegas作为你的剪辑软件.你的心里既充满了期待,也充满了迷惘.没错,剪辑不仅仅是软件本身的功能,同时也代表了你对于视频画面的深层感悟.那么,即刻起,无论你是一名新手,还是曾经拥有属于自己的影片,都请走进Sony Vegas的世界,去看看Vegas能为你的影片带来哪些令人惊叹的效果. 本章学习要点 了解剪辑的概念与技法 掌握场序.分辨率.宽高比知识 熟悉音视频格式与编解码器 掌握

javascript编码的几个方法详细介绍_基础知识

escape定义和用法 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 参数 描述 string 必需.要被转义或编码的字符串.   返回值 已编码的 string 的副本.其中某些字符被替换成了十六进制的转义序列. 说明 该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / .其他所有的字符都会被转义序列替换. 提示和注释 提示:可以使用 unescape() 对 escape() 编码的

在JavaScript中处理时间之setMinutes()方法的使用_基础知识

 javascript Date.setMinutes()方法按照本地时间的设置分钟为一个指定日期语法 Date.setMinutes(minutesValue[, secondsValue[, msValue]]) 注:括号内外观和数据是可选的 下面是参数的详细信息:     minutesValue : 0到59之间的整数,表示分钟     secondsValue : 0到59之间的整数,表示秒.如果指定secondsValue参数,则还必须指定minutesValue     msVal

在JavaScript中处理时间之getHours()方法的使用_基础知识

 javascript Date.getHours()方法按照本地时间在指定日期的返回小时.由 getHours 返回的值是0和23之间的整数.语法 Date.getHours() 下面是参数的详细信息:     NA 返回值: 按照本地时间返回指定日期的小时.例子: <html> <head> <title>JavaScript getHours Method</title> </head> <body> <script ty

《ADOBE PREMIERE PRO CS4标准培训教材》——第1章 数字视频基础知识 1.1 数字视频的基本概念

第1章 数字视频基础知识 学习要点 掌握数字视频的基本概念(包括帧速率.像素宽高比和色彩模式等) 掌握世界上通用的电视制式(包括NTSC和PAL),以及标清(SD)和高清(HD)的定义 掌握数字视频技术实际应用领域的相关知识(包括DVD和流媒体),及其发展方向 了解数字影视剪辑的基本理论,深入体会蒙太奇与剪辑的关系 1.1 数字视频的基本概念 从动画诞生的那时起,人们就不断探求一种能够存储.表现和传播动态画面信息的方式.在经历了电影和模拟信号电视之后,数字视频技术迅速发展起来,伴随着不断扩展的应