谁能提供photoshop下RGB-->LAB的算法,什么语言的算法都行,分数全部赠送!!!

解决方案 »

  1.   

    try this code,maybe fit you
    // 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);}
      

  2.   

    这个算式的结果和photoshop算出来的结果不一致
      

  3.   

    photoshop的技术是调整过的,和标准的是有些区别
    包括RGB调色都不一样,标准是线性的,而ps是曲线的
      

  4.   

    而且Lab也是有不同的标准的,目前用的最多的是 Hunter-Lab和 CIE-L*ab 两种坐标系。你的先搞清楚ps用的是哪一种我给你一个算法,是rgb->xyz->Lab的,xyz是一种数学坐标系,目的是为了精确描述rgb颜色对应的空间坐标而产生的,具体的描述参见这段话:
    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 ) )
      

  5.   

    那photoshop使用的是什么标准,是Hunter还是CIE?而且使用不同的颜色系统,结果也不一样!
      

  6.   

    PS 5.0使用的是 CIE L*a*b。
      

  7.   

    to agua06(阿瓜) :
    你有这个转换的具体算法吗?
      

  8.   

    CIE的算法我上面不是贴给你了么?
      

  9.   

    这个算出来的结果跟photoshop相差比较大啊,不准确
      

  10.   

    本来就不太一致的.
    http://search.csdn.net/Expert/topic/2117/2117909.xml?temp=.1646082
    http://semmix.pl/color/models/emo111p2.htm
      

  11.   

    我之前就说过啦,ps使用的是自己的算法,其目的是为了匹配印刷业的需要(PS最初开发的目的是为数码冲印而使用的)所以用它做标准的话会很痛苦。
    Lab说白了只是颜色坐标系而已。不同的Lab标准代表的只是色域的大小不同。和颜色本身并无关系
      

  12.   

    汗。。刚刚才发觉,我怎么在delphi的版面里回答起问题来了?我还在奇怪自己怎么只有一个三角了地说^^;;(汗)
      

  13.   

    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  
    是否有其他角度的参数值?
      

  14.   

    to agua06(阿瓜):
    你是否有LAB-->RGB的逆算法?