YUV/RGB颜色空间转换公式


经过调研,最终选择以下转换公式:

Jack, Keith. Video Demystified: a Handbook for the Digital Engineer, LLH
Technology Publishing, 3rd Edition, 2001.
BT601:
Y’ = 0.257R’ + 0.504G’ + 0.098B’ + 16
Cb’ = -0.148
R’ - 0.291G’ + 0.439B’ + 128
Cr’ = 0.439R’ - 0.368G’ - 0.071B’ + 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)
BT709:
Y’ = 0.183R’ + 0.614G’ + 0.062B’ + 16
Cb’ = -0.101
R’ - 0.338G’ + 0.439B’ + 128
Cr’ = 0.439R’ - 0.399G’ - 0.040B’ + 128
R’ = 1.164
(Y’ - 16) + 1.793*(Cr’ - 128)
G’ = 1.164*(Y’ - 16) - 0.534*(Cr’ - 128) - 0.213*(Cb’ - 128)
B’ = 1.164*(Y’ - 16) + 2.115*(Cb’ - 128)


以下为一部分参考资料:

一般来讲,我们把YUV、Y‘UV、YCbCr, YPbPr包含在YUV颜色模型的范围内,其中Y都表示亮度,UV表示两个色度分量,但是具体的颜色模型的用途又各不相同,当然,他们与RGB的互转公式也就不相同。在电视系统发展的早期,YUV和Y’UV都是颜色信息的模拟信号编码形式,虽然Y和Y’都表示亮度,但是两种亮度的意义却天差地别,Y用来代指luminance,表示的是自然颜色的亮度,而Y‘代指luma,表示的是经过伽马压缩之后电信号的强度。在现在的计算机系统中,YUV一般用来代指YCbCr,用来表示文件的编码格式,用于数字视频的编码,而YPbPr颜色模型常常用在模拟分量视频中。所以YUV颜色模型到RGB颜色模型的转换,应该对应两种方式,分别是模拟YUV->模拟RGB、数字YUV->数字RGB。不过因为标清、高清、以及超清幅面,YUV转RGB的权重值各不相同,需要将模拟信号和数字信号再做一次幅面划分,就出现了6种转换公式。

1.模拟YUV→模拟RGB

1) BT601(标清国际定义)

Y = 0.299 * R + 0.587 * G + 0.114 * B   
Pb =-0.169 * R - 0.331 * G + 0.500 * B
Pr = 0.500 * R - 0.439 * G - 0.081 * B
R = Y + 1.402* Pr             
G = Y - 0.344 * Pb - 0.792* Pr        
B = Y + 1.772 * Pb

2)BT709(高清)

Y = 0.213 * R + 0.715 * G + 0.072 * B     
Pb =-0.115 * R - 0.385 * G + 0.500 * B
Pr = 0.500 * R - 0.454 * G - 0.046 * B
R = Y + 1.402* Cr            
G = Y - 0.344 * Cb - 0.792* Cr       
B = Y + 1.772 * Cb

2. 数字YUV→数字RGB

1)BT601

Y = 16 + 0.257 * R + 0.504 * G+ 0.098 * B
Cb = 128 - 0.148 * R - 0.291 * G+ 0.439 * B
Cr = 128 + 0.439 * R - 0.368 * G - 0.071 * B
R = 1.164 *(Y - 16) + 1.596 *(Cr - 128)
G = 1.164 *(Y - 16) - 0.392 *(Cb - 128) - 0.812 *(Cr - 128)
B = 1.164 *(Y - 16) + 2.016 *(Cb - 128)
即:
R = 1.164 * Y + 1.596 * Cr - 222.912
G = 1.164 * Y - 0.392 * Cb - 0.812 * Cr + 135.488
B = 1.164 * Y + 2.016 * Cb - 276.672

2)BT709

Y = 16 + 0.183 * R + 0.614 * G + 0.062 * B
Cb = 128 - 0.101 * R - 0.339 * G+ 0.439 * B
Cr = 128 + 0.439 * R - 0.399 * G- 0.040 * B
R = 1.164 *(Y - 16) + 1.792 *(Cr - 128)
G = 1.164 *(Y - 16) - 0.213 *(Cb - 128) - 0.534 *(Cr - 128)
B = 1.164 *(Y - 16) + 2.114 *(Cb - 128)
即:
R = 1.164 * Y + 1.596 * Cr - 222.912
G = 1.164 * Y - 0.392 * Cb - 0.812 * Cr + 135.488
B = 1.164 * Y + 2.016 * Cb - 276.672

3. 超清幅面的计算公式,可以按照下面的推导公式推导

1)模拟RGB转YUV的推导公式 :

Wr + Wg + Wb = 1; UMax = 0.5; VMax = 0.5
Y = Wr * R + Wg * G + Wb * B;
Pb = Umax * (B - Y) / (1 - Wb);
Pr = Vmax * (R - Y) / (1 - Wr);

2)数字RGB转YUV的推导公式:

Wr + Wg + Wb = 1; Umax = Vmax = 0.5;
Y = 16 + 219 * (Wr * R + Wg * G + Wb * B) / 255;
Cb = 128 + 224 * (Umax * (B - Y) / (1 - Wb)) / 255;
Cr = 128 + 224 * (Vmax * (R - Y) / (1 - Wr)) / 255;
其中:
BT601 Wr = 0.299 Wg = 0.587 Wb = 0.114
BT709 Wr = 0.2126 Wg = 0.7152 Wb = 0.0722
BT2020 Wr = 0.2627 Wg = 0.678 Wb = 0.0593
参考链接:https://blog.csdn.net/xiaoyafang123/article/details/107866406

=============================================================分割线

RGB to YUV Conversion

Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

B = 1.164(Y - 16) + 2.018(U – 128)
G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U – 128)
R = 1.164(Y - /16) + 1.596(V - 128)
参考链接:https://www.fourcc.orgfccyvrgb.php

=============================================================分割线

The RGB2YCrCb function uses the following equations when converting gamma-corrected RGB data to YCrCb data:

Y’ = 0.257R’ + 0.504G’ + 0.098B’ + 16
Cr = 0.439R’ – 0.368G’ – 0.071B’ + 128
Cb = –0.148R’ – 0.291G’ + 0.439B’ + 128
The YCrCb2RGB function uses the following equations when converting YCrCb data to RGB data:
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)
参考链接:https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ds/rgb.pdf?wapkw=color space

==================================================================分割线

1. (BT601) 下的YUV与RGB转换公式

名词解释:
量化后: Y~[16,235] U [16-240] V[16-240] 量化就是让通过线性变换让Y 或 U 或V 处于一定的范围内, 比如让Y 【0,1】变到 Y’ (16,235) 就这样来实行: Y’ = Y* (235-16)/(1-0) + 16 即 Y’ = 219*Y + 16
未量化: Y~ [0,1] U,V~[-0.5,0.5]
YUV :即 YCbCr 两者是等价的

1.小数形式,未量化( U~[-0.5-0.5] , R~[0,1] )

R = Y + 1.4075 * V;
G = Y - 0.3455 * U - 0.7169*V;
B = Y + 1.779 * U;

Y = 0.299R + 0.587G + 0.114*B;
U = (B-Y)/1.772;
V = (R-Y)/1.402;

或写为:
Y = 0.299R + 0.587G + 0.114B;
U = -0.169
R - 0.331*G + 0.5 B ;
V = 0.5 R - 0.419G – 0.081
B;

2.整数形式(减少计算量)未量, R,G,B~[0,255] U,V~[-128,128]

R= Y + ((360 * (V - 128))>>8) ;
G= Y - (( ( 88 * (U - 128) + 184 * (V - 128)) )>>8) ;
B= Y +((455 * (U - 128))>>8) ;

Y = (77R + 150G + 29B)>>8;
U = ((-44
R - 87G + 131B)>>8) + 128;
V = ((131R - 110G - 21*B)>>8) + 128 ;

3. 量化后的公式( Y~(16,235) U/V ~(16,240) ) 量化 ( I420 , YUV422 用该公式转换即可 )

[Y,U,V,1]T= M[R,G,B,1]T 其中 M =
[ 0.2568, 0.5041, 0.0979, 16
-0.1479, -0.2896, 0.4375, 128
0.4375, -0.3666, -0.0709, 128,
0, 0, 0, 1 ]
[R,G,B,1]T = M[Y,U,V,1]T  其中M =
1.1644 0 1.6019 -223.5521
1.1644 -0.3928 -0.8163 136.1381
1.1644 2.0253 0 -278.0291
0.0000 0.0000 0.0000 1.0000
由此可以得到红色的YUV分量 YUV = ( 81,91,240 )

4. 量化后的公式写成整数的形式(减小计算量) ( Y~(16,235) U/V ~(16,240) )

yuv --> rgb
R = (298Y + 411 * V - 57344)>>8
G= (298
Y - 101* U- 211* V+ 34739)>>8
B= (298Y + 519 U- 71117)>>8
rgb --> yuv
Y= ( 66R + 129G + 25B)>>8 + 16
U= (-38
R - 74G + 112B)>>8 +128
V= (112R - 94G - 18*B)>>8 + 128

5. YUV量化与非量化互转

YUV 量化转非量化
Y=(Y’-16 )*255/219 ;
U=(U’-128)*128/112;
V=(V’-128)*128/112;

YUV 非量化转量化 U~(-128-127) -----> U~(16-240)
Y’= ((219Y)>>8) + 16;
U’= ((219
U)>>8) + 128;
V’=((219*V)>>8) + 128;

2. Rec2020 (BT2020) 下的YUV与RGB转换公式

1. BT2020 文档上的公式

Y = 0.2627R + 0.6780G + 0.0593B;
U = -0.1396
R - 0.3604G + 0.5B;
V = 0.5R - 0.4598G -0.0402*B;
矩阵形式
量化前
[Y,U,V]T= M[R,G,B]T 其中 M =0.2627 0.6780 0.0593 , -0.1396 -0.3604 0.5000, 0.5000 -0.4598 -0.0402
[R,G,B]T= M[Y,U,V]T 其中 M =1.0000 -0.0000 1.4746 1.0000 -0.1645 -0.5713 1.0000 1.8814 -0.0001
量化后
[Y,U,V,1]T= M[R,G,B,1]T 其中 M = 0.2256, 0.5823, 0.05093, 16, -0.1222, -0.3154, 0.4375, 128 , 0.4375, -0.4023, -0.0352, 128, 0,0,0,1
[R,G,B,1]T =M[Y,U,V,1]T 其中 M =1.1644, 0, 1.6853, -234.3559, 1.1644, -0.1881, -0.6529, 89.0206, 1.1646, 2.1501, 0.0000, -293.8542, 0.0000, 0.0000, 0.0000, 1.0000
量化后的公式写成整数形式
[Y,U,V,1]T= (M[R,G,B,1]T)>>8其中 M = 58, 149, 13, 4096, -31, -81, 112, 32768, 112, -103, -9, 32768, 0, 0, 0, 256
[R,G,B,1]T = (M[Y,U,V,1]T)>>8其中 M = 298, 0, 431, -59995, 298, -48, -167, 22789, 298, 550, 0, -75227, 0, 0, 0, 256

2. BT601 转 BT2020

_Y = (256Y - 32U -30V+ 7826)>>8;
_U = (258
U +17V - 2208)>>8;
_V = (22
U + 264*V - 3369)>>8;

3. bt2020 转bt601

YUV_601 = M*[Y,U,V,1]T
M=[
1.0000 0.1157 0.1037 -28.0756
0.0000 0.9951 -0.0602 8.3197
-0.0000 -0.0835 0.9767 13.6686
0.0000 0.0000 0.0000 1.0000
]
参考链接:https://www.cnblogs.com/luoyinjie/p/7219319.html
另外参考链接:
BT601官方文档:https://www.itu.int/rec/R-REC-BT.601
BT709官方文档:https://www.itu.int/rec/R-REC-BT.709
维基百科:https://en.wikipedia.org/wiki/YCbCr

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在线RGB颜色转YUV转换器是一种在线工具,用于转换RGB颜色模式到YUV颜色模式。RGB代表红、绿、蓝,而YUV代表亮度、色度和饱和度。这个转换器的作用是帮助用户将RGB颜色格式转换YUV格式,这在数字图像和视频处理中非常常见。 使用在线RGB颜色转YUV转换器,只需输入所需转换RGB颜色值,例如红色值为255,绿色值为0,蓝色值为0。然后点击“转换”按钮,即可得到其相应的YUV颜色值。这个转换器还提供了可视化效果,即用户在输入RGB值后,会在网页的右侧看到相应的颜色块,以便用户看到他们的RGB颜色是什么样的。 在实际应用中,将RGB颜色格式转换YUV格式的目的是为了压缩数字视频流。YUV模式更适合于视频编码,因为例如红色和绿色的像素虽然颜色不同,但在人眼中看起来差别不大,可以合并成一个颜色。同时,YUV模式中的亮度(Y)更重要,还可以通过调整Y的值来控制图像的亮度。因此,将RGBYUV是数字视频和图像处理中的一个重要步骤,这个在线转换器大大简化了这个过程。 ### 回答2: 一款在线RGB颜色转YUV转换器是一种非常实用的工具,可以用于将 RGB 颜色值转换YUV 颜色空间中的对应值。在许多图像处理和视频处理应用中都需要使用 YUV 颜色空间,所以这样的转换器非常有用。 通过这款在线转换器,您可以将 RGB 颜色值输入到指定的输入框中,然后将它们转换YUV 颜色空间中的对应值。转换后,您可以看到输出的 YUV 值,并且可以将它们用于进一步处理。 转换RGB颜色到YUV颜色的过程非常简单。RGB 颜色是由红、绿和蓝三个通道的值组成的,而 YUV 颜色则是由亮度(Y)和色度(U、V)组成的。因此,转换过程就是将 RGB 颜色值分别转换为相应的 Y、U、V 值。具体的数学计算公式可以通过在线转换器中的算法实现。 这样的在线转换器不仅简单易用,而且非常方便。如果您需要在任何地方进行颜色处理或者视频处理,只需要打开浏览器,访问这个网站,就可以快速地将 RGB 颜色值转换YUV 颜色空间中的对应值。 ### 回答3: 在线RGB颜色转YUV转换器是一种网络工具,用于将RGB颜色格式转换YUV颜色格式。RGB颜色格式是一种基于红色(R)、绿色(G)、蓝色(B)的颜色系统,广泛应用于电子设备显示屏幕、视频摄像头等领域;而YUV颜色格式则是一种基于亮度(Y)、色度(U)、色度(V)的颜色系统,主要用于数字视频压缩和传输中。 在线RGB颜色转YUV转换器通常支持多种RGBYUV颜色格式之间的转换,例如RGB24、RGB32、YUV444、YUV422、YUV420等格式。使用者可以将需要转换RGB颜色值输入到工具中,该工具将根据用户选定的RGB颜色格式自动进行转换,输出对应的YUV颜色值。这个转换过程是通过对RGB像素中红绿蓝通道进行加权处理,以获取亮度和两个色度信号得到的。 在线RGB颜色转YUV转换器适用于多种应用场景,例如构建数字视频系统、进行数字视频编辑、对图像进行编码、解码等。它不仅能够提高工作效率,还可以防止人为转换错误所带来的一系列问题,为用户提供更加准确、可靠的颜色转换服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值