RGB 和 YUV 之间的转换 ?

逸萌 2013-05-23 04:52:58
RGB 和 YUV 之间的转换 ?

网上搜索存在很多,好像还和NTSC、PAL、60-Hz等有关系?
被弄糊涂了,请高手指教.

第一种:
我们首先讲述 RGB 和 4:4:4 YUV 之间的转换。要将 4:2:0 或 4:2:2 YUV 转换为 RGB,
我们建议首先将 YUV 数据转换为 4:4:4 YUV,然后再将 4:4:4 YUV 转换为 RGB。
AYUV 格式是一个 4:4:4 格式,它对于每个 Y、U 和 V 样例都使用 8 位。对于某些应用,还可以使用每样例多于 8 位的位数定义 YUV。
对于数字视频,定义了从 RGB 到两个主要 YUV 的转换。这两个转换都基于称为 ITU-R Recommendation BT.709 的规范。
第一个转换是 BT.709 中定义用于 50-Hz 的较早的 YUV 格式。它与在 ITU-R Recommendation BT.601 中指定的关系相同,
ITU-R Recommendation BT.601 也被称为它的旧名称 CCIR 601。这种格式应该被视为用于标准定义 TV 分辨率 (720 x 576)
和更低分辨率视频的首选 YUV 格式。它的特征由下面两个常量 Kr 和 Kb 的值来定义:
Kr = 0.299 Kb = 0.114
第二个转换为 BT.709 中定义用于 60-Hz 的较新 YUV 格式,应该被视为用于高于 SDTV 的视频分辨率的首选格式。它的特征由下面两个不同的常量值来定义:
Kr = 0.2126 Kb = 0.0722
从 RGB 到 YUV 转换的定义以下列内容开始:
L = Kr * R + Kb * B + (1 – Kr – Kb) * G
然后,按照下列方式获得 YUV 值:

Y = floor(2^(M-8) * (219*(L–Z)/S + 16) + 0.5)
U = clip3(0, 2^M-1, floor(2^(M-8) * (112*(B-L) / ((1-Kb)*S) + 128) + 0.5))
V = clip3(0, 2^M-1, floor(2^(M-8) * (112*(R-L) / ((1-Kr)*S) + 128) + 0.5))
其中

M 为每个 YUV 样例的位数 (M >= 8)。
Z 为黑电平变量。对于计算机 RGB,Z 等于 0。对于 studio 视频 RGB,Z 等于 16*2N-8,其中 N 为每个 RGB 样例的位数 (N >= 8)。
S 为缩放变量。对于计算机 RGB,S 等于 255。对于 studio 视频 RGB,S 等于 219*2N-8。


第二种:
R'G'B'和Y'CbCr两个彩色空间之间的转换关系用下式表示:

Y = 0.299R + 0.587G + 0.114B

Cr = (0.500R - 0.4187G - 0.0813B) + 128

Cb = (-0.1687R - 0.3313G + 0.500B) + 128



NTSC的YIQ颜色空间与RGB颜色空间的转换关系如下:

Y=0.30R+0.59G+0.11B

I=0.74(R-Y)-0.27(B-Y) = 0.60R+0.28G+0.32B

Q=0.48(R-Y)-0.27(B-Y) = 0.21R+0.52G+0.31B

PAL的YUV颜色空间与RGB颜色空间的转换关系如下:

Y=0.30R+0.59G+0.11B

U=0.493(B-Y) = -0.15R-0.29G+0.44B

V=0.877(R-Y) = 0.62R-0.52G-0.10B


第三种:
下面区分一下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.394*U' - 0.581*V'
B' = Y' + 2.032*U'
YCbCr模型来源于YUV模型。YCbCr是 YUV 颜色空间的偏移版本.
应用:数字视频,ITU-R BT.601建议
Y’ = 0.257*R' + 0.504*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
R' = 1.164*(Y’-16) + 1.596*(Cr'-128)
G' = 1.164*(Y’-16) - 0.813*(Cr'-128) - 0.392*(Cb'-128)
B' = 1.164*(Y’-16) + 2.017*(Cb'-128)
PS: 上面各个符号都带了一撇,表示该符号在原值基础上进行了伽马校正
...全文
311 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
SoftSoftSoft2008 2013-05-28
  • 打赏
  • 举报
回复
调用 ffmpeg里面的转换 sws_scale 很方便的
逸萌 2013-05-28
  • 打赏
  • 举报
回复
ArcRain 2013-05-24
  • 打赏
  • 举报
回复
引用 2 楼 mydeardingxiaoli 的回复:
我是说它们的转换怎么还和NTSC、PAL等有关系呢?
这个估计就是有个推荐的特征值系数吧...公式来看应该差别不大...
逸萌 2013-05-24
  • 打赏
  • 举报
回复
我是说它们的转换怎么还和NTSC、PAL等有关系呢?
逸萌 2013-05-24
  • 打赏
  • 举报
回复
ArcRain 2013-05-23
  • 打赏
  • 举报
回复
可以参考下微软的文章:Converting Between YUV and RGB http://msdn.microsoft.com/en-us/library/ms893078.aspx

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧