Java中的Lab和RGB的相互转换

xiaoxiao2021-02-28  77

很长时间里都是接触的RGB三原色处理,最近刚好要做Lab的色度分析,利用CIE色匹配函数和CIE标准光源相对功率分布表来进行计算,所以来总结一下在这一过程中学习到的小知识点。

1.CIE色匹配函数和CIE标准光源相对功率分布表(可见光)

在获得分析物的吸光度值后,我们需要根据对应的波长来进行相关计算,通过以下公式来进行计算:

其中,x10为色匹配函数值。

2.XYZ--->Lab

double X = rounding(k * Xsum); double Y = rounding(k * Ysum); double Z = rounding(k * Zsum); double xn = 94.81; double fx = (double)X/xn; if(fx > 0.0088565){ fx =Math.pow(fx,1.0/3); }else { fx = (841/108) * fx + (16/116); } sop("fX:"+fx); double yn = 100.00; double fy = (double)Y/yn; if(fy > 0.0088565){ fy = Math.pow(fy,1.0/3); }else { fy = (841/108) * fy +(16/116); } sop("fY:"+fy); double zn = 107.32; double fz = (double)Z/zn; if(fz > 0.0088565){ fz = Math.pow(fz,1.0/3); }else { fz = (841/108) * fz +(16/116); } sop("fZ:"+fz); //计算L、a、b、C、h double L = rounding(116*fy-16); double a = rounding(500*(fx-fy)); double b = rounding(200*(fy-fz)); double C = rounding(Math.pow((Math.pow(a,2)+Math.pow(b,2)),1/2)); double h = rounding(Math.atan(b/a)); sop("L:"+L); sop("a:"+a); sop("b:"+b); sop("C:"+C); sop("h:"+h); 3.XYZ--->RGB

double X = rounding(k * Xsum); double Y = rounding(k * Ysum); double Z = rounding(k * Zsum); double dr,dg,db; int[] sRGB = new int[3]; dr = 0.032406 * X - 0.015371 * Y - 0.0049895 * Z; dg = -0.0096891 * X + 0.018757 * Y + 0.00041914 * Z; db = 0.00055708 * X - 0.0020401 * Y + 0.01057 * Z; if (dr <= 0.00313) { dr = dr * 12.92; } else { dr = Math.exp(Math.log(dr) / 2.4) * 1.055 - 0.055; } if (dg <= 0.00313) { dg = dg * 12.92; } else { dg = Math.exp(Math.log(dg) / 2.4) * 1.055 - 0.055; } if (db <= 0.00313) { db = db * 12.92; } else { db = Math.exp(Math.log(db) / 2.4) * 1.055 - 0.055; } dr = dr * 255; dg = dg * 255; db = db * 255; dr = Math.min(255, dr); dg = Math.min(255, dg); db = Math.min(255, db); sRGB[0] = (int) (dr + 0.5); sRGB[1] = (int) (dg + 0.5); sRGB[2] = (int) (db + 0.5); sop("R:"+sRGB[0]); sop("G:"+sRGB[1]); sop("B:"+sRGB[2]); 其中,sop为输出函数。Lab和RGB之间的相互转换需要借助XYZ来进行过度。

部分参考自:http://blog.csdn.net/spring123tt/article/details/7929993

转载请注明原文地址: https://www.6miu.com/read-45773.html

最新回复(0)