高分寻求RGB-->LAB的算法 谁能提供photoshop下RGB-->LAB的算法,什么语言的算法都行,分数全部赠送!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 try this code,maybe fit you// Get the Lab valuevoid CCalculate::RGB2Lab(float R, float G, float B, float *L, float *a, float *b){ double X, Y, Z, fX, fY, fZ; X = 0.412453*R + 0.357580*G + 0.180423*B; Y = 0.212671*R + 0.715160*G + 0.072169*B; Z = 0.019334*R + 0.119193*G + 0.950227*B; X /= (255 * 0.950456); Y /= 255; Z /= (255 * 1.088754); if (Y > 0.008856) { fY = pow(Y, 1.0/3.0); *L = (float)(116.0*fY - 16.0 + 0.5); } else { fY = 7.787*Y + 16.0/116.0; *L = (float)(903.3*Y + 0.5); } if (X > 0.008856) fX = pow(X, 1.0/3.0); else fX = 7.787*X + 16.0/116.0; if (Z > 0.008856) fZ = pow(Z, 1.0/3.0); else fZ = 7.787*Z + 16.0/116.0; *a = (float)(500.0*(fX - fY) + 0.5); *b = (float)(200.0*(fY - fZ) + 0.5);} 这个算式的结果和photoshop算出来的结果不一致 photoshop的技术是调整过的,和标准的是有些区别包括RGB调色都不一样,标准是线性的,而ps是曲线的 而且Lab也是有不同的标准的,目前用的最多的是 Hunter-Lab和 CIE-L*ab 两种坐标系。你的先搞清楚ps用的是哪一种我给你一个算法,是rgb->xyz->Lab的,xyz是一种数学坐标系,目的是为了精确描述rgb颜色对应的空间坐标而产生的,具体的描述参见这段话:The CIE system is based on the description of color as a luminancecomponent Y, as described above, and two additional components X andZ. The spectral weighting curves of X and Z have been standardized bythe CIE based on statistics from experiments involving human observers.XYZ tristimulus values can describe any color. (RGB tristimulus values willbe described later.)The magnitudes of the XYZ components are proportional to physicalenergy, but their spectral composition corresponds to the color matchingcharacteristics of human vision.-----------------------------------------------RGB->XYZ var_R = ( R / 255 ) //R = From 0 to 255var_G = ( G / 255 ) //G = From 0 to 255var_B = ( B / 255 ) //B = From 0 to 255if ( var_R > 0.04045 ) var_R = ( ( var_R + 0.055 ) / 1.055 ) ^ 2.4else var_R = var_R / 12.92if ( var_G > 0.04045 ) var_G = ( ( var_G + 0.055 ) / 1.055 ) ^ 2.4else var_G = var_G / 12.92if ( var_B > 0.04045 ) var_B = ( ( var_B + 0.055 ) / 1.055 ) ^ 2.4else var_B = var_B / 12.92var_R = var_R * 100var_G = var_G * 100var_B = var_B * 100//Observer. = 2°, Illuminant = D65X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505-------------------------------------------------------------XYZ->CIE Labvar_X = X / 95.047 //Observer = 2°, Illuminant = D65var_Y = Y / 100.000var_Z = Z / 108.883if ( var_X > 0.008856 ) var_X = var_X ^ ( 1/3 )else var_X = ( 7.787 * var_X ) + ( 16 / 116 )if ( var_Y > 0.008856 ) var_Y = var_Y ^ ( 1/3 )else var_Y = ( 7.787 * var_Y ) + ( 16 / 116 )if ( var_Z > 0.008856 ) var_Z = var_Z ^ ( 1/3 )else var_Z = ( 7.787 * var_Z ) + ( 16 / 116 )CIE-L* = ( 116 * var_Y ) - 16CIE-a* = 500 * ( var_X - var_Y )CIE-b* = 200 * ( var_Y - var_Z )____________________________________________XYZ->hunter Lab(H)L = 10 * sqrt( Y )(H)a = 17.5 * ( ( ( 1.02 * X ) - Y ) / sqrt( Y ) )(H)b = 7 * ( ( Y - ( 0.847 * Z ) ) / sqrt( Y ) ) 那photoshop使用的是什么标准,是Hunter还是CIE?而且使用不同的颜色系统,结果也不一样! PS 5.0使用的是 CIE L*a*b。 to agua06(阿瓜) :你有这个转换的具体算法吗? CIE的算法我上面不是贴给你了么? 这个算出来的结果跟photoshop相差比较大啊,不准确 本来就不太一致的.http://search.csdn.net/Expert/topic/2117/2117909.xml?temp=.1646082http://semmix.pl/color/models/emo111p2.htm 我之前就说过啦,ps使用的是自己的算法,其目的是为了匹配印刷业的需要(PS最初开发的目的是为数码冲印而使用的)所以用它做标准的话会很痛苦。Lab说白了只是颜色坐标系而已。不同的Lab标准代表的只是色域的大小不同。和颜色本身并无关系 汗。。刚刚才发觉,我怎么在delphi的版面里回答起问题来了?我还在奇怪自己怎么只有一个三角了地说^^;;(汗) to agua06(阿瓜)//Observer. = 2°, Illuminant = D65 X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805 Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722 Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505 ------------------------------------------------------------- XYZ- >CIE Lab var_X = X / 95.047 //Observer = 2°, Illuminant = D65 是否有其他角度的参数值? to agua06(阿瓜):你是否有LAB-->RGB的逆算法? 如何得到记录被删除的状态 treeview控件如何选中一个节点后右键弹出菜单?然后选中菜单里的某项,写相应的代码。比如删除,添加 在DELHPI6.0中如何编写农历程序 如何限制一個.exe(如:123.exe)在電腦中可運行的個數.如只可運行兩個123.exe 怎样在自己的程序里执行SQL脚本文件? 这段代码怎么改 关于XE里的ClientDataSet.XMLData中文乱码问题 唉……生病!不爽,散分!先到多得…… 打抱程序时怎么携带fonts 文件? 困惑! CreateFile问题 在广州组队开发MRP2,OA,进销存等系统
// Get the Lab value
void CCalculate::RGB2Lab(float R, float G, float B,
float *L, float *a, float *b)
{
double X, Y, Z, fX, fY, fZ; X = 0.412453*R + 0.357580*G + 0.180423*B;
Y = 0.212671*R + 0.715160*G + 0.072169*B;
Z = 0.019334*R + 0.119193*G + 0.950227*B; X /= (255 * 0.950456);
Y /= 255;
Z /= (255 * 1.088754); if (Y > 0.008856)
{
fY = pow(Y, 1.0/3.0);
*L = (float)(116.0*fY - 16.0 + 0.5);
}
else
{
fY = 7.787*Y + 16.0/116.0;
*L = (float)(903.3*Y + 0.5);
} if (X > 0.008856)
fX = pow(X, 1.0/3.0);
else
fX = 7.787*X + 16.0/116.0; if (Z > 0.008856)
fZ = pow(Z, 1.0/3.0);
else
fZ = 7.787*Z + 16.0/116.0; *a = (float)(500.0*(fX - fY) + 0.5);
*b = (float)(200.0*(fY - fZ) + 0.5);}
包括RGB调色都不一样,标准是线性的,而ps是曲线的
The CIE system is based on the description of color as a luminance
component Y, as described above, and two additional components X and
Z. The spectral weighting curves of X and Z have been standardized by
the CIE based on statistics from experiments involving human observers.
XYZ tristimulus values can describe any color. (RGB tristimulus values will
be described later.)
The magnitudes of the XYZ components are proportional to physical
energy, but their spectral composition corresponds to the color matching
characteristics of human vision.-----------------------------------------------RGB->XYZ var_R = ( R / 255 ) //R = From 0 to 255
var_G = ( G / 255 ) //G = From 0 to 255
var_B = ( B / 255 ) //B = From 0 to 255if ( var_R > 0.04045 ) var_R = ( ( var_R + 0.055 ) / 1.055 ) ^ 2.4
else var_R = var_R / 12.92
if ( var_G > 0.04045 ) var_G = ( ( var_G + 0.055 ) / 1.055 ) ^ 2.4
else var_G = var_G / 12.92
if ( var_B > 0.04045 ) var_B = ( ( var_B + 0.055 ) / 1.055 ) ^ 2.4
else var_B = var_B / 12.92var_R = var_R * 100
var_G = var_G * 100
var_B = var_B * 100//Observer. = 2°, Illuminant = D65
X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805
Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722
Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505-------------------------------------------------------------XYZ->CIE Lab
var_X = X / 95.047 //Observer = 2°, Illuminant = D65
var_Y = Y / 100.000
var_Z = Z / 108.883if ( var_X > 0.008856 ) var_X = var_X ^ ( 1/3 )
else var_X = ( 7.787 * var_X ) + ( 16 / 116 )
if ( var_Y > 0.008856 ) var_Y = var_Y ^ ( 1/3 )
else var_Y = ( 7.787 * var_Y ) + ( 16 / 116 )
if ( var_Z > 0.008856 ) var_Z = var_Z ^ ( 1/3 )
else var_Z = ( 7.787 * var_Z ) + ( 16 / 116 )CIE-L* = ( 116 * var_Y ) - 16
CIE-a* = 500 * ( var_X - var_Y )
CIE-b* = 200 * ( var_Y - var_Z )
____________________________________________XYZ->hunter Lab
(H)L = 10 * sqrt( Y )
(H)a = 17.5 * ( ( ( 1.02 * X ) - Y ) / sqrt( Y ) )
(H)b = 7 * ( ( Y - ( 0.847 * Z ) ) / sqrt( Y ) )
你有这个转换的具体算法吗?
http://search.csdn.net/Expert/topic/2117/2117909.xml?temp=.1646082
http://semmix.pl/color/models/emo111p2.htm
Lab说白了只是颜色坐标系而已。不同的Lab标准代表的只是色域的大小不同。和颜色本身并无关系
//Observer. = 2°, Illuminant = D65
X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805
Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722
Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505
-------------------------------------------------------------
XYZ- >CIE Lab
var_X = X / 95.047 //Observer = 2°, Illuminant = D65
是否有其他角度的参数值?
你是否有LAB-->RGB的逆算法?