详解RGB和XYZ色彩空间转换之下篇

前言

        首先需要指明本文中描述的R,G,B并非通常的sRGB中的三个分量R',G',B',而是波长分别为700nm,546.1nm,435.8nm的单色红光,单色绿光,单色蓝光。sRGB中的R'G'B'中的红色、绿色、蓝色已经不是单色光了。虽然习惯上大家都叫RGB,但是需要有所区别。前面两篇讲解了CIE标准观察者色彩空间转换,本文开始回归正题。

常见的RGB色彩空间

        常见的RGB色彩空间有sRGB,Adobe RGB,Apple RGB,BT709。因此描述一种RGB色彩空间,需要指明对应三基色和参考白点在CIE1931中间的位置,以上几种RGB色彩空间的位置如下表:

        

sRGBAdobe RGBBT709 RGB
xyx       yxy
红色0.64000.3300

0.6400

0.33000.64000.3300
绿色0.30000.60000.21000.71000.30000.6000
蓝色0.15000.06000.15000.06000.15000.0600
白色0.31270.32900.31270.32900.31270.3290

sRGB色彩空间分析

        令

         S_r=\overline{r_x}+\overline{r_y}+\overline{r_z};

         S_g=\overline{g_x}+\overline{g_y}+\overline{g_z};

         S_b=\overline{b_x}+\overline{b_y}+\overline{b_z};

        则

        \overline{r_x}=r_xS_r;        \overline{r_y}=r_yS_r;        \overline{r_z}=r_zS_r;    

        \overline{g_x}=g_xS_g;        \overline{g_y}=g_yS_g;        \overline{r_z}=g_zS_g;    

        \overline{b_x}=b_xS_b;        \overline{b_y}=b_yS_b;        \overline{b_z}=b_zS_b;

     所以对于sRGB中的每一个刺激单位        

        1[R']=r_xS_r[X]+r_yS_r[Y]+r_zS_r[Z]         

        1[G']=g_xS_g[X]+g_yS_g[Y]+g_zS_g[Z]         

        1[B']=b_xS_b[X]+b_yS_b[Y]+b_zS_b[Z] 

      对于XYZ来说,其三色刺激值为\overline{x},\overline{y},\overline{z},如果是标准参考白点,那么:

        1[R']+1[G']+1[B']=1[X]+1[Y]+1[Z]

       但是参考白点是D65,因此需要做一些改变:

        令

                S_{wx}=w_x/w_y              

                S_{wy}=w_y/w_y=1       

        ​​​​​​​        ​​​​​​​S_{wz}=w_z/w_y

        则

               1[R']+1[G']+1[B']=S_{wx}[X]+S_{wy}[Y]+S_{wz}[Z]

        所以                

                r_xS_r+g_xS_g+b_xS_b=S_{wx}

                ​​​​​​​r_yS_r+g_yS_g+b_yS_b=S_{wy}

        ​​​​​​​        r_zS_r+g_zS_g+b_zS_b=S_{wz}

        改写成矩阵的形式

                \begin{bmatrix} r_x &g_x & b_x\\r_y & g_y& b_y\\r_z &g_z &b_z \end{bmatrix}.\begin{bmatrix} S_r\\S_g \\S_b \end{bmatrix}=\begin{bmatrix} S_{wx}\\S_{wy} \\ S_{wz} \end{bmatrix}

        于是

                \begin{bmatrix} S_r\\S_g \\S_b \end{bmatrix}=\begin{bmatrix} r_x &g_x & b_x\\r_y & g_y& b_y\\r_z &g_z &b_z \end{bmatrix}^{-1}\begin{bmatrix} S_{wx}\\S_{wy} \\ S_{wz} \end{bmatrix}        

        带入数据可得

                \begin{bmatrix} S_r\\S_g \\S_b \end{bmatrix}=\begin{bmatrix} 0.644\\1.1919 \\ 1.2032 \end{bmatrix}        

转换矩阵的生成

        因为上面得出了这个表达式

                1[R']=r_xS_r[X]+r_yS_r[Y]+r_zS_r[Z]         

                1[G']=g_xS_g[X]+g_yS_g[Y]+g_zS_g[Z]         

                1[B']=b_xS_b[X]+b_yS_b[Y]+b_zS_b[Z] 

        对于sRGB色彩空间来说,三色刺激值为\overline{r},\overline{g},\overline{b}

                \overline{r}[R']=\overline{r}(r_xS_r[X]+r_yS_r[Y]+r_zS_r[Z])         

                \overline{g}[G']=\overline{g}(g_xS_g[X]+g_yS_g[Y]+g_zS_g[Z])         

                \overline{b}[B']=\overline{b}(b_xS_b[X]+b_yS_b[Y]+b_zS_b[Z]) 

      对于XYZ色彩空间来说,三色刺激值为\overline{x},\overline{y},\overline{z}

                \overline{x}[X],\overline{y}[Y],\overline{z}[Z]

     所以

                \overline{x}=\overline{r}r_xS_r+\overline{g}g_xS_g+\overline{b}b_xS_b 

                \overline{y}=\overline{r}r_yS_r+\overline{g}g_yS_g+\overline{b}b_yS_b 

                \overline{z}=\overline{r}r_zS_r+\overline{g}g_zS_g+\overline{b}b_zS_b      

        转换为矩阵表示形式如下:

                \begin{bmatrix} \overline{x}\\ \overline{y}\\ \overline{z} \end{bmatrix}=\begin{bmatrix} r_xS_r&g_xS_g &b_xS_b \\ r_yS_r&g_yS_g&b_yS_b \\ r_zS_r&g_zS_g &b_zS_b \\ \end{bmatrix}.\begin{bmatrix} \overline{r}\\\overline{g} \\ \overline{b} \end{bmatrix}

       带入数据可以得到sRGB转XYZ的矩阵如下:

             rgb2xyz =   0.4124    0.3576    0.1805
                               0.2126    0.7152    0.0722
                               0.0193    0.1192    0.9505

       对上式求逆矩阵可得

            xyz2rgb =    3.2410   -1.5374   -0.4986
                                -0.9692    1.8760    0.0416
                                0.0556   -0.2040    1.0570

        代码如下:

        

rx=0.6400;
gx=0.3000;
bx=0.1500;
wx=0.3127;

ry=0.3300;
gy=0.6000;
by=0.0600;
wy=0.3290;

rz=1-rx-ry;
gz=1-gx-gy;
bz=1-bx-by;
wz=1-wx-wy;

Swx=wx/wy;
Swy=wy/wy;
Swz=wz/wy;


S=inv([rx gx bx;
       ry gy by;
       rz gz bz])*[Swx Swy Swz]';

  
 rgb2xyz=[rx*S(1) gx*S(2) bx*S(3);
          ry*S(1) gy*S(2) by*S(3);
          rz*S(1) gz*S(2) bz*S(3)];
  
 xyz2rgb=inv(rgb2xyz);

本文参考:RGB/XYZ Matrices (brucelindbloom.com)

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RGB色彩空间中,将xyY值转换RGB值需要进行以下步骤: 1. 将xyY值转换XYZ值。首先,根据xy值和Y值,可以计算出X和Z的值。具体计算方法如下: X = (Y / y) * x Z = (Y / y) * (1 - x - y) 2. 将XYZ转换RGB值。这一步需要使用特定的RGB色彩空间转换矩阵。不同的RGB色彩空间有不同的转换矩阵。以sRGB为例,转换矩阵如下: R = 3.2406 * X - 1.5372 * Y - 0.4986 * Z G = -0.9689 * X + 1.8758 * Y + 0.0415 * Z B = 0.0557 * X - 0.2040 * Y + 1.0570 * Z 3. 对于sRGB色彩空间,还需要进行gamma校正。gamma校正是为了使得亮度在显示设备上更加均匀。具体计算方法如下: 如果 R、G、B 的值小于等于0.0031308,则 R、G、B 的值乘以 12.92 如果 R、G、B 的值大于 0.0031308,则 R、G、B 的值进行如下计算: R = 1.055 * R^(1/2.4) - 0.055 G = 1.055 * G^(1/2.4) - 0.055 B = 1.055 * B^(1/2.4) - 0.055 请注意,以上是将xyY值转换为sRGB色彩空间中的RGB值的方法。对于其他RGB色彩空间转换矩阵和gamma校正的参数可能会有所不同。 #### 引用[.reference_title] - *1* *2* [详解RGBXYZ色彩空间转换之下](https://blog.csdn.net/YDY5659150/article/details/130900416)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【音视频基础】(七):CIE颜色空间三之从CIE-XYZ到CIE-xyY](https://blog.csdn.net/houxiaoni01/article/details/100049961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值