photoshop中的RGB转LAB算法(java)

public class test {


/**
* @param args
*/
public static void main(String[] args) {
double X, Y, Z, Lab_L, Lab_A, Lab_B;
int R=228,G=127,B=0;

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 = Math.pow((r + 0.055) / 1.055, 2.4);
else
r = r / 12.92;
if (g > 0.04045)
g = Math.pow((g + 0.055) / 1.055, 2.4);
else
g = g / 12.92;
if (b > 0.04045)
b = Math.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 = Math.pow(X, 1 / 3.000);
else
X = (7.787 * X) + (16 / 116.000);
if (Y > 0.008856)
Y = Math.pow(Y, 1 / 3.000);
else
Y = (7.787 * Y) + (16 / 116.000);
if (Z > 0.008856)
Z = Math.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);
// double[] lab = rgbToLab(228,127,0);
System.out.println(Lab_L);
System.out.println(Lab_A);
System.out.println(Lab_B);
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值