Java中的Lab和RGB的相互转换

很长时间里都是接触的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值