RGB 转换至 YCbCr (YUV) 的计算公式
来源:互联网 发布:php 替换空格 编辑:程序博客网 时间:2024/05/17 08:27
原文地址:http://qiuye.iteye.com/blog/626462
对于每个取样点的 R,G,B 值, 在转换到 YUV colour space 时, 首先定义画面的平均亮度值(Luminance), Y, 其计算公式为:
Y = kr*R + kg*G + kb*B
kr, kg, kb 为 weighting factors (加权因数), kr + kg + kb = 1 恒定.
(其中, ITU-R BT.601 定义 kb = 0.114 和 kr = 0.299)
然后定义 Cr, Cg, Cb 为颜色强度 (colour intensity) 与这个 luminance 的差值:
Cb = B − Y
Cr = R − Y
Cg = G − Y
这时对于一个取样点, 完整的信息被保存于 Y, Cb, Cr, Cg 四个变量里, 此时相对于 RGB colour space 的三个变量值, 这样的计算公式还没有优势.
但由于 Cb + Cr + Cg 是个常数, 我们可以用其中两个变量来表达原来所需的三个, 并且在数据的贮存和传输中也只需使用其中的两个变量. 这样, 就完成了定义 YCbCr colour space 中的三个变量了: Y, Cb, Cr.
一个在 RGB colour space 中取样值的三个变量 R, G, B 在转换为 YCbCr 的公式于是重新 定义/转化 为:
Y = kr*R + (1 − kb − kr )*G + kb*B........ (1)
Cb = 0.5(1 − kb) / (B − Y )
Cr = 0.5(1 − kr) / (R − Y )
然后再用公式 (1) 代换 Y, 得到仅含 R,G,B 的 Cb, Cr 函数 (kr,kb 视为常数)
作简单的代数也可以求出从 YCbCr 转换至 RGB 的公式:
R = Y + (1 - kr)*Cr/0.5
G = Y - [kb*(1 - kb)*Cb]/ [0.5*(1 - kb - kr)] - [kr*(1 - kr)*Cr]/ [0.5*(1 - kb - kr)]
B = Y + (1 - kb)*Cb/0.5
代入 ITU-R BT.601 定义的 kb = 0.114 和 kr = 0.299
那么 RGB ---> YCbCr 的公式为:
Y = 0.299R + 0.587G + 0.114B........ (2)
Cb = 0.564(B − Y )
Cr = 0.713(R − Y )
同样地, 然后再用公式 (2) 代换 Y, 得到仅含 R,G,B 的 Cb, Cr 函数 (kr,kb 视为常数)
YCbCr ---> RGB 的公式为:
R = Y + 1.402Cr
G = Y − 0.344Cb − 0.714Cr
B = Y + 1.772Cb
- RGB 转换至 YCbCr (YUV) 的计算公式
- RGB ,YUV, YCbCr的定义,YUV 与 RGB相互转换
- YUV、RGB和YCbCr之间的转换
- RGB、YUV和YCbCr 转换
- RGB ,YUV, YCbCr的定义
- RGB ,YUV, YCbCr的定义
- RGB ,YUV, YCbCr的定义
- RGB ,YUV, YCbCr的定义
- RGB-YUV转换公式
- YUV与RGB相互转换的公式
- YUV和RGB之间的转换公式
- RGB与YCbCr颜色空间的互相转换公式
- RGB与YCbCr颜色空间的互相转换公式
- YUV、YCbCr与RGB的区别
- RGB、YUV和YCbCr
- RGB、YUV和YCbCr
- RGB、YUV和YCbCr
- RGB、YUV和YCbCr
- 认识Java的回调函数
- poj 3468
- Android开发之获取屏幕分辨率
- poj 2488 A Knight's Journey
- android activity statck
- RGB 转换至 YCbCr (YUV) 的计算公式
- Java中map的学习(说明一下java中map、迭代器Iterator的用法)
- startActivityForResult 无返回值
- APEX: Assign Multiple Schemas To A Single Workspace
- python的md5类库
- flex---->样式和主题
- 一个女程序员的深思
- pthread 简要使用指南(一) pthread_create
- 多校10-1002 线段树