图像颜色空间转换-CSC

时间:2024-03-25 10:11:06

由于从事数字图像处理工作,常常要做颜色空间(如RGB、YUV、YCbCr、HSI)、色域(BT.601、BT.709、BT.2020)的转换。之前一直没有弄明白YUV和YCbCr的差异,也没有深究。来来回回浪费了许多时间,想想还是应该弄清楚,讲明白。

CSC指color space convert,这里主要讲RGB与YCbCr颜色空间的转换,常用的色域空间有BT.601(SDTV,标清电视),BT.709(HDTV,高清电视),BT.2020(UHDTV,超高清电视),在不同的色域空间下,有不同的转换矩阵。

下面先说说YUV与YCbCr的区别,再结合不同的色域讲解颜色空间RGB与YCbCr的转换关系(color space convert, CSC)。

1. YUV与YCbCr的区别

YUV中Y表示亮度(luminance),UV表示两个彩色分量,主要用于PAL制信号传输,属于模拟信号。

YCbCr中Y表示亮度,Cb、Cr表示两个色差分量(colour-difference):蓝色和红色色差分量,主要用于数字视频信号传输,属于数字信号。

2. RGB与YCbCr转换关系

色域表示显示设备能够显示的颜色范围,下图中马蹄形区域为人眼能看到的色彩区域,

BT.601是标清视频使用的色域范围,BT.709和BT.2020分别对应高清和超高清视频的色域。

图像颜色空间转换-CSC

(1) BT.601色域CSC

归一化下亮度分量:

EY = 0.299 ER + 0.587 EG + 0.114 EB

其中ER、EG、EB范围为[0,1]

 

归一化下红色色差分量等于红色分量减去亮度分量:

(ER - EY) = ER - 299 ER - 0.587 EG - 0.114 EB = 0.701 ER - 0.587 EG - 0.114 EB

范围为[-0.701,0.701],对其进行归一化

图像颜色空间转换-CSC

ECR = 0.5 ER + 0.419 EG + 0.081 EB

 

归一化下红色色差分量等于蓝色分量减去亮度分量::

(EB- EY) = EB - 0.299 ER - 0.587 EG - 0.114 EB = -0.299 ER - 0.587 EG + 0.886 EB

范围为[-0.886,0.886],对其进行归一化

图像颜色空间转换-CSC

ECB = 0.169 ER + 0.331 EG + 0.5 EB

 

由于信号为边缘有其它用途,所以在实际应用中,往往使用窄动态limited格式,对于8bit信号,亮度分量的范围为16-235(共220个灰阶),色差分量的范围为16-240(共225个灰阶)。对于10bit信号,亮度分量的范围为64-940(共877个灰阶),色差分量的范围为64-960(共897个灰阶)。

因此量化后的各分量如下:

Y = 219 EY + 16 = 0.2568 * R + 0.5041 * G + 0.0979 * B + 16

Cb = 224 ECB + 128 = -0.1482 * R – 0.291 * G + 0.4392 * B + 128

Cr = 224 ECR + 128 = 0.4392 * R – 0.3678 * G – 0.0714 * B + 128

因此,RGB与YCbCr颜色空间的转换可用以下公式来表示:

图像颜色空间转换-CSC

反过来,ycbcr2rgb可表示如下:

图像颜色空间转换-CSC

顺便说一下,matlab中rgb2ycbcr函数也是用的上面的公式来实现的,matlab帮助文档如下:

图像颜色空间转换-CSC

图像颜色空间转换-CSC

接下来说转换矩阵,不考虑后面加16和128。

BT601_RGB2YCbCr = [

0.2568     0.5041      0.0979       16

-0.1482    -0.2910     0.4392     128

0.4392     -0.3678     -0.0714    128

     0              0               0           1]

 

8bit定点化时,相当于乘上256,矩阵如下

BT601_RGB2YCbCr_8bit =

[65.7408     129.0496      25.0624     4096

-37.9392      -74.4960     112.4352    32768

112.4352      -94.1568     -18.2784    32768

       0                   0                 0         256]

= [66      129      25      4096

    -38      -74     112     32768

   112       -94     -18     32768

      0          0         0     256]

此即为8bit下转换矩阵。

 

对RGB2YCbCr求逆可得到

BT601_YCbCr2RGB = inv(RGB2YCbCr) = [

1.1644     -0.0001      1.5960       -225.2356

1.1644     -0.3917      -0.8130     133.2470

1.1644       2.0173     -0.0001      -279.1554

    0                 0               0            1.0000]

8bit定点化,得到:

BT601_YCbCr2RGB_8bit =

[298     0        409       -57660

298   -100     -208        34111

298    516         0         -71464

  0        0           0           256]

2. BT.709色域

参考BT.709手册,计算方法如下

图像颜色空间转换-CSC

Y = 219 EY + 16 = (219/255) * (0.2126 R + 0.7152 G + 0.0722 B) + 16 = 0.1826 R + 0.6142 G + 0.062 B + 16

Cb = 224 ECb + 128 = -0.1006 R - 0.3386 G + 0.4392 B + 128

Cr = 224 ECr + 128 = 0.4382 R - 0.398 G + 0.0402 B + 128

因此,可得到转换矩阵:

BT709_RGB2YCbCr = [

0.1826      0.6142       0.062         16

-0.1006     -0.3386      0.4392      128

0.4382      -0.398        -0.0402     128

      0              0                0            1]

8bit量化后有:

BT709_RGB2YCbCr_8bit = [

47     157     16       4096

-26    -87     112      32768

112   -102    -10      32768

  0        0        0         256]

对BT709_RGB2YCbCr求逆可得到:

BT709_YCbCr2RGB = [

1.1644    0.0001      1.7969      -248.6413

1.1644    -0.2133     -0.5342     77.0427

1.1644    2.1125      -0.0002      -288.9952

     0             0                0           1.0000]

8bit量化后有:

BT709_YCbCr2RGB_8bit = [

298 0 460 -63652

298 -55 -137 19723

298 541 0 -73983

0 0 0 256]

 3. BT.2020色域

参考BT.2020手册,计算方法如下:

图像颜色空间转换-CSC

图像颜色空间转换-CSC

Y = 219 EY + 16 = (219/255) * (0.2627 R + 0.678 G + 0.0593 B) + 16 = 0.2256 R + 0.5832 G + 0.0509 B + 16

Cb= 224 ECb + 128 = (224/255) * (-0.2627 R - 0.678 G + 0.9407 B) / 1.8814 + 128 = -0.1227 R – 0.3166 G + 0.4392 B + 128

Cr= 224 ECr + 128 = (224/255) * ( 0.7373 R-0.678 G- 0.0593 B) / 1.4746 + 128 = 0.4392 R – 0.4039 G - 0.0353 B + 128

 

因此,可得到转换矩阵:

BT2020_RGB2YCbCr = [

0.2256     0.5832     0.0509       16

-0.1227   -0.3166     0.4392     128

0.4392    -0.4039     -0.0353    128

      0             0               0         1]

8bit量化后有:

BT2020_RGB2YCbCr_8bit = [

58   149   13     4096

-31  -81   112    32768

112  -103  -9     32768

  0       0     0       256]

 

对BT2020_RGB2YCbCr求逆可得到:

BT2020_YCbCr2RGB = [

1.1632    0.0002    1.6794    -233.6003

1.1632   -0.1870   -0.6497    88.4933

1.1634    2.1421     0.0008    -292.9093

      0          0            0          1.0000]

8bit量化后有:

BT2020_YCbCr2RGB = [

298   0   430  -59802

298 -48 -166  22654

298 548   0   -74985

   0     0    0      256]

需要注意的是,在不同色域下,需要使用不同的转换矩阵,如果转换矩阵不匹配的话,图像会偏色,并发生亮暗变化。

 

参考:

[1] https://en.wikipedia.org/wiki/YUV

[2] https://en.wikipedia.org/wiki/YCbCr

[3] Rec. ITU-R BT.601-7

[4] R-REC-BT.709-6

[5] R-REC-BT.2020-2

[6] http://blog.csdn.net/majinlei121/article/details/51143432