photoshop中的RGB转LAB算法

photosho默认的转换条件为:srgb and gamma2.2,   以下代码在次条件下模拟!

rgb2lab(double R, double G, double B, double &Lab_L,double &Lab_a, double &Lab_b)
{
double X, Y, Z;
     double r = R / 255.000; // rgb range: 0 ~ 1
     double g = G / 255.000;
     double b = B / 255.000;

     // gamma 2.2
     if ( r > 0.04045 )
   r = pow(( r + 0.055 ) / 1.055, 2.4);
     else               
   r = r / 12.92;
     if ( g > 0.04045 )
   g = pow(( g + 0.055 ) / 1.055, 2.4);
     else               
   g = g / 12.92;
     if ( b > 0.04045 )
   b = pow(( b + 0.055 ) / 1.055, 2.4);
     else               
   b = b / 12.92;

     // sRGB
X = r * 0.436052025 + g * 0.385081593 + b * 0.143087414;
     Y = r * 0.222491598 + g * 0.716886060 + b * 0.060621486;
     Z = r * 0.013929122 + g * 0.097097002 + b * 0.714185470;

     // XYZ range: 0~100
     X = X * 100.000;
     Y = Y * 100.000;
     Z = Z * 100.000;

     // Reference White Point
     double ref_X = 96.4221;
     double ref_Y = 100.000;
     double ref_Z = 82.5211;

     X = X / ref_X;
     Y = Y / ref_Y;
     Z = Z / ref_Z;

     // Lab
     if (X > 0.008856)
   X = pow(X, 1/3.000);
     else              
   X = ( 7.787 * X ) + ( 16 / 116.000 );
     if (Y > 0.008856)
   Y = pow(Y, 1/3.000);
     else              
   Y = ( 7.787 * Y ) + ( 16 / 116.000 );
     if (Z > 0.008856)
   Z = pow(Z, 1/3.000);
     else              
   Z = ( 7.787 * Z ) + ( 16 / 116.000 );

     Lab_L = ( 116.000 * Y ) - 16.000;
     Lab_a = 500.000 * ( X - Y );
     Lab_b = 200.000 * ( Y - Z );
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值