photoshop中的RGB转LAB算法(java)

xiaoxiao2021-02-28  37

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); } }
转载请注明原文地址: https://www.6miu.com/read-2626428.html

最新回复(0)