内容提纲:

XYZ ⇆  Standard-RGB        XYZ ⇆  Adobe-RGB  
XYZ ⇆  Yxy                          XYZ ⇆  Hunter-Lab  
XYZ ⇆  CIE-L*ab                 CIE-L*ab ⇆  CIE-L*CH° 
XYZ ⇆  CIE-L*uv                  RGB ⇆  HSL 
RGB ⇆  HSV                        RGB ⇆  CMY 
CMY ⇆  CMYK                     XYZ (Tristimulus) 
Delta C*         Delta H*         Delta E* CIE 
Delta E1994      Delta E2000      Delta CMC      
RGB ⇆   YUV

进行图形图像处理时,我们经常会遇到颜色转换的问题,这里列出了常见的颜色转换公式,基本上称得上“大全”了。

1、XYZ → Standard-RGB
————————————————————
//X, Y and Z input refer to a D65/2° standard illuminant.
//sR, sG and sB (standard RGB) output range = 0 ÷ 255

var_X = X / 100
var_Y = Y / 100
var_Z = Z / 100

var_R = var_X *  3.2406 + var_Y * -1.5372 + var_Z * -0.4986
var_G = var_X * -0.9689 + var_Y *  1.8758 + var_Z *  0.0415
var_B = var_X *  0.0557 + var_Y * -0.2040 + var_Z *  1.0570

if ( var_R > 0.0031308 ) var_R = 1.055 * ( var_R ^ ( 1 / 2.4 ) ) - 0.055
else                     var_R = 12.92 * var_R
if ( var_G > 0.0031308 ) var_G = 1.055 * ( var_G ^ ( 1 / 2.4 ) ) - 0.055
else                     var_G = 12.92 * var_G
if ( var_B > 0.0031308 ) var_B = 1.055 * ( var_B ^ ( 1 / 2.4 ) ) - 0.055
else                     var_B = 12.92 * var_B

sR = var_R * 255
sG = var_G * 255
sB = var_B * 255

2、Standard-RGB → XYZ
————————————————————
//sR, sG and sB (Standard RGB) input range = 0 ÷ 255
//X, Y and Z output refer to a D65/2° standard illuminant.

var_R = ( sR / 255 )
var_G = ( sG / 255 )
var_B = ( sB / 255 )

if ( 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.92

var_R = var_R * 100
var_G = var_G * 100
var_B = var_B * 100

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

3、XYZ → Adobe-RGB
————————————————————
//X, Y and Z input refer to a D65/2° standard illuminant.
//aR, aG and aB (RGB Adobe 1998) output range = 0 ÷ 255

var_X = X / 100
var_Y = Y / 100
var_Z = Z / 100

var_R = var_X *  2.04137 + var_Y * -0.56495 + var_Z * -0.34469
var_G = var_X * -0.96927 + var_Y *  1.87601 + var_Z *  0.04156
var_B = var_X *  0.01345 + var_Y * -0.11839 + var_Z *  1.01541

var_R = var_R ^ ( 1 / 2.19921875 )
var_G = var_G ^ ( 1 / 2.19921875 )
var_B = var_B ^ ( 1 / 2.19921875 )

aR = var_R * 255
aG = var_G * 255
aB = var_B * 255

4、Adobe-RGB → XYZ
————————————————————
//aR, aG and aB (RGB Adobe 1998) input range = 0 ÷ 255
//X, Y and Z output refer to a D65/2° standard illuminant.

var_R = ( aR / 255 )
var_G = ( aG / 255 )
var_B = ( aB / 255 )

var_R = var_R ^ 2.19921875
var_G = var_G ^ 2.19921875
var_B = var_B ^ 2.19921875

var_R = var_R * 100
var_G = var_G * 100
var_B = var_B * 100

X = var_R * 0.57667 + var_G * 0.18555 + var_B * 0.18819
Y = var_R * 0.29738 + var_G * 0.62735 + var_B * 0.07527
Z = var_R * 0.02703 + var_G * 0.07069 + var_B * 0.99110

5、XYZ → Yxy
————————————————————
Y = Y
x = X / ( X + Y + Z )
y = Y / ( X + Y + Z )

6、Yxy → XYZ
————————————————————
X = x * ( Y / y )
 Y = Y
 Z = ( 1 - x - y ) * ( Y / y )

7、XYZ → Hunter-Lab
————————————————————
//Reference-X, Y and Z refer to specific illuminants and observers.
//Common reference values are available below in this same page.

var_Ka = ( 175.0 / 198.04 ) * ( Reference-Y + Reference-X )
var_Kb = (  70.0 / 218.11 ) * ( Reference-Y + Reference-Z )

Hunter-L = 100.0 * sqrt( Y / Reference-Y )
Hunter-a = var_Ka * ( ( ( X / Reference-X ) - ( Y / Reference-Y ) ) / sqrt( Y / Reference-Y ) )
Hunter-b = var_Kb * ( ( ( Y / Reference-Y ) - ( Z / Reference-Z ) ) / sqrt( Y / Reference-Y ) )

8、Hunter-Lab → XYZ
————————————————————
//Reference-X, Y and Z refer to specific illuminants and observers.
//Common reference values are available below in this same page.

var_Ka = ( 175.0 / 198.04 ) * ( Reference-Y + Reference-X )
var_Kb = (  70.0 / 218.11 ) * ( Reference-Y + Reference-Z )

Y = ( ( Hunter-L / Reference-Y ) ^ 2 ) * 100.0
X =   ( Hunter-a / var_Ka * sqrt( Y / Reference-Y ) + ( Y / Reference-Y ) ) * Reference-X
Z = - ( Hunter-b / var_Kb * sqrt( Y / Reference-Y ) - ( Y / Reference-Y ) ) * Reference-Z

9、XYZ → CIE-L*ab
————————————————————
//Reference-X, Y and Z refer to specific illuminants and observers.
//Common reference values are available below in this same page.

var_X = X / Reference-X
var_Y = Y / Reference-Y
var_Z = Z / Reference-Z

if ( 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 )

10、CIE-L*ab → XYZ
————————————————————
//Reference-X, Y and Z refer to specific illuminants and observers.
//Common reference values are available below in this same page.

var_Y = ( CIE-L* + 16 ) / 116
var_X = CIE-a* / 500 + var_Y
var_Z = var_Y - CIE-b* / 200

if ( var_Y^3  > 0.008856 ) var_Y = var_Y^3
else                       var_Y = ( var_Y - 16 / 116 ) / 7.787
if ( var_X^3  > 0.008856 ) var_X = var_X^3
else                       var_X = ( var_X - 16 / 116 ) / 7.787
if ( var_Z^3  > 0.008856 ) var_Z = var_Z^3
else                       var_Z = ( var_Z - 16 / 116 ) / 7.787

X = var_X * Reference-X
Y = var_Y * Reference-Y
Z = var_Z * Reference-Z

11、CIE-L*ab → CIE-L*CH°
————————————————————
var_H = arc_tangent( CIE-b*, CIE-a* )  //Quadrant by signs

if ( var_H > 0 ) var_H = ( var_H / PI ) * 180
else             var_H = 360 - ( abs( var_H ) / PI ) * 180

CIE-L* = CIE-L*
CIE-C* = sqrt( CIE-a* ^ 2 + CIE-b* ^ 2 )
CIE-H° = var_H

12、CIE-L*CH° → CIE-L*ab
————————————————————
//CIE-H° range = 0 ÷ 360°

CIE-L* = CIE-L*
CIE-a* = cos( degree_2_radian( CIE-H° ) ) * CIE-C*
CIE-b* = sin( degree_2_radian( CIE-H° ) ) * CIE-C*

13、XYZ → CIE-L*uv 
————————————————————
//Reference-X, Y and Z refer to specific illuminants and observers.
//Common reference values are available below in this same page.

var_U = ( 4 * X ) / ( X + ( 15 * Y ) + ( 3 * Z ) )
var_V = ( 9 * Y ) / ( X + ( 15 * Y ) + ( 3 * Z ) )

var_Y = Y / 100
if ( var_Y > 0.008856 ) var_Y = var_Y ^ ( 1/3 )
else                    var_Y = ( 7.787 * var_Y ) + ( 16 / 116 )

ref_U = ( 4 * Reference-X ) / ( Reference-X + ( 15 * Reference-Y ) + ( 3 * Reference-Z ) )
ref_V = ( 9 * Reference-Y ) / ( Reference-X + ( 15 * Reference-Y ) + ( 3 * Reference-Z ) )

CIE-L* = ( 116 * var_Y ) - 16
CIE-u* = 13 * CIE-L* * ( var_U - ref_U )
CIE-v* = 13 * CIE-L* * ( var_V - ref_V )

14、CIE-L*uv → XYZ 
————————————————————
//Reference-X, Y and Z refer to specific illuminants and observers.
//Common reference values are available below in this same page.

var_Y = ( CIE-L* + 16 ) /116
if ( var_Y^3  > 0.008856 ) var_Y = var_Y^3
else                       var_Y = ( var_Y - 16 / 116 ) / 7.787

ref_U = ( 4 * Reference-X ) / ( Reference-X + ( 15 * Reference-Y ) + ( 3 * Reference-Z ) )
ref_V = ( 9 * Reference-Y ) / ( Reference-X + ( 15 * Reference-Y ) + ( 3 * Reference-Z ) )

var_U = CIE-u* / ( 13 * CIE-L* ) + ref_U
var_V = CIE-v* / ( 13 * CIE-L* ) + ref_V

Y = var_Y * 100
X =  - ( 9 * Y * var_U ) / ( ( var_U - 4 ) * var_V - var_U * var_V )
Z = ( 9 * Y - ( 15 * var_V * Y ) - ( var_V * X ) ) / ( 3 * var_V )

15、RGB → HSL 
————————————————————
//R, G and B input range = 0 ÷ 255
//H, S and L output range = 0 ÷ 1.0

var_R = ( R / 255 )
var_G = ( G / 255 )
var_B = ( B / 255 )

var_Min = min( var_R, var_G, var_B )    //Min. value of RGB
var_Max = max( var_R, var_G, var_B )    //Max. value of RGB
del_Max = var_Max - var_Min             //Delta RGB value

L = ( var_Max + var_Min )/ 2

if ( del_Max == 0 )                     //This is a gray, no chroma...
{
    H = 0
    S = 0
}
else                                    //Chromatic data...
{
   if ( L < 0.5 ) S = del_Max / ( var_Max + var_Min )
   else           S = del_Max / ( 2 - var_Max - var_Min )

del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max
   del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max
   del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max

if      ( var_R == var_Max ) H = del_B - del_G
   else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B
   else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R

if ( H < 0 ) H += 1
    if ( H > 1 ) H -= 1
}

16、HSL → RGB 
————————————————————
//H, S and L input range = 0 ÷ 1.0
//R, G and B output range = 0 ÷ 255

if ( S == 0 )
{

R = L * 255
   G = L * 255
   B = L * 255
}
else
{
   if ( L < 0.5 ) var_2 = L * ( 1 + S )
   else           var_2 = ( L + S ) - ( S * L )

var_1 = 2 * L - var_2

R = 255 * Hue_2_RGB( var_1, var_2, H + ( 1 / 3 ) )
   G = 255 * Hue_2_RGB( var_1, var_2, H )
   B = 255 * Hue_2_RGB( var_1, var_2, H - ( 1 / 3 ) )
}

Hue_2_RGB( v1, v2, vH )             //Function Hue_2_RGB
{
   if ( vH < 0 ) vH += 1
   if( vH > 1 ) vH -= 1
   if ( ( 6 * vH ) < 1 ) return ( v1 + ( v2 - v1 ) * 6 * vH )
   if ( ( 2 * vH ) < 1 ) return ( v2 )
   if ( ( 3 * vH ) < 2 ) return ( v1 + ( v2 - v1 ) * ( ( 2 / 3 ) - vH ) * 6 )
   return ( v1 )
}

17、RGB → HSV 
————————————————————
//R, G and B input range = 0 ÷ 255
//H, S and V output range = 0 ÷ 1.0

var_R = ( R / 255 )
var_G = ( G / 255 )
var_B = ( B / 255 )

var_Min = min( var_R, var_G, var_B )    //Min. value of RGB
var_Max = max( var_R, var_G, var_B )    //Max. value of RGB
del_Max = var_Max - var_Min             //Delta RGB value

V = var_Max

if ( del_Max == 0 )                     //This is a gray, no chroma...
{
    H = 0
    S = 0
}
else                                    //Chromatic data...
{
   S = del_Max / var_Max

del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max
   del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max
   del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max

if      ( var_R == var_Max ) H = del_B - del_G
   else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B
   else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R

if ( H < 0 ) H += 1
    if ( H > 1 ) H -= 1
}

18、HSV → RGB 
————————————————————
//H, S and V input range = 0 ÷ 1.0
//R, G and B output range = 0 ÷ 255

if ( S == 0 )
{
   R = V * 255
   G = V * 255
   B = V * 255
}
else
{
   var_h = H * 6
   if ( var_h == 6 ) var_h = 0      //H must be < 1
   var_i = int( var_h )             //Or ... var_i = floor( var_h )
   var_1 = V * ( 1 - S )
   var_2 = V * ( 1 - S * ( var_h - var_i ) )
   var_3 = V * ( 1 - S * ( 1 - ( var_h - var_i ) ) )

if      ( var_i == 0 ) { var_r = V     ; var_g = var_3 ; var_b = var_1 }
   else if ( var_i == 1 ) { var_r = var_2 ; var_g = V     ; var_b = var_1 }
   else if ( var_i == 2 ) { var_r = var_1 ; var_g = V     ; var_b = var_3 }
   else if ( var_i == 3 ) { var_r = var_1 ; var_g = var_2 ; var_b = V     }
   else if ( var_i == 4 ) { var_r = var_3 ; var_g = var_1 ; var_b = V     }
   else                   { var_r = V     ; var_g = var_1 ; var_b = var_2 }

R = var_r * 255
   G = var_g * 255
   B = var_b * 255
}

19、RGB → CMY 
————————————————————
//R, G and B input range = 0 ÷ 255
//C, M and Y output range = 0 ÷ 1.0

C = 1 - ( R / 255 )
M = 1 - ( G / 255 )
Y = 1 - ( B / 255 )

20、CMY → RGB 
————————————————————
//C, M and Y input range = 0 ÷ 1.0
//R, G and B output range = 0 ÷ 255

R = ( 1 - C ) * 255
G = ( 1 - M ) * 255
B = ( 1 - Y ) * 255

21、CMY → CMYK 
————————————————————
//C, M, Y and K range = 0 ÷ 1.0

var_K = 1

if ( C < var_K )   var_K = C
if ( M < var_K )   var_K = M
if ( Y < var_K )   var_K = Y
if ( var_K == 1 ) {
    C = 0          //Black only
    M = 0
    Y = 0
}
else {
    C = ( C - var_K ) / ( 1 - var_K )
    M = ( M - var_K ) / ( 1 - var_K )
    Y = ( Y - var_K ) / ( 1 - var_K )
}
K = var_K

22、CMYK → CMY 
————————————————————
//C, M, Y and K range = 0 ÷ 1.0

C = ( C * ( 1 - K ) + K )
M = ( M * ( 1 - K ) + K )
Y = ( Y * ( 1 - K ) + K )

23、XYZ (Tristimulus)  Reference values of a perfect reflecting diffuser
————————————————————
Observer    2° (CIE 1931)    10° (CIE 1964)    Note
Illuminant    X2    Y2    Z2    X10    Y10    Z10     
A    109.850    100.000    35.585    111.144    100.000    35.200    Incandescent/tungsten
B    99.0927    100.000    85.313    99.178;    100.000    84.3493    Old direct sunlight at noon
C    98.074    100.000    118.232    97.285    100.000    116.145    Old daylight
D50    96.422    100.000    82.521    96.720    100.000    81.427    ICC profile PCS
D55    95.682    100.000    92.149    95.799    100.000    90.926    Mid-morning daylight
D65    95.047    100.000    108.883    94.811    100.000    107.304    Daylight, sRGB, Adobe-RGB
D75    94.972    100.000    122.638    94.416    100.000    120.641    North sky daylight
E    100.000    100.000    100.000    100.000    100.000    100.000    Equal energy
F1    92.834    100.000    103.665    94.791    100.000    103.191    Daylight Fluorescent
F2    99.187    100.000    67.395    103.280    100.000    69.026    Cool fluorescent
F3    103.754    100.000    49.861    108.968    100.000    51.965    White Fluorescent
F4    109.147    100.000    38.813    114.961    100.000    40.963    Warm White Fluorescent
F5    90.872    100.000    98.723    93.369    100.000    98.636    Daylight Fluorescent
F6    97.309    100.000    60.191    102.148    100.000    62.074    Lite White Fluorescent
F7    95.044    100.000    108.755    95.792    100.000    107.687    Daylight fluorescent, D65 simulator
F8    96.413    100.000    82.333    97.115    100.000    81.135    Sylvania F40, D50 simulator
F9    100.365    100.000    67.868    102.116    100.000    67.826    Cool White Fluorescent
F10    96.174    100.000    81.712    99.001    100.000    83.134    Ultralume 50, Philips TL85
F11    100.966    100.000    64.370    103.866    100.000    65.627    Ultralume 40, Philips TL84
F12    108.046    100.000    39.228    111.428    100.000    40.353    Ultralume 30, Philips TL83

These are formulas used to calculate color difference (Δ) in the CIE-L*ab and CIE-L*CH° spaces:

24、Delta C* 
————————————————————
CIE-a*1, CIE-b*1                   //Color #1 CIE-L*ab values
CIE-a*2, CIE-b*2                   //Color #2 CIE-L*ab values

Delta C* = sqrt( ( CIE-a*2 ^ 2 ) + ( CIE-b*2 ^ 2 ) )
         - sqrt( ( CIE-a*1 ^ 2 ) + ( CIE-b*1 ^ 2 ) )
         
         
         
25、Delta H* 
————————————————————
CIE-a*1, CIE-b*1                   //Color #1 CIE-L*ab values
CIE-a*2, CIE-b*2                   //Color #2 CIE-L*ab values

xDE =  sqrt( ( CIE-a*2 ^ 2 ) + ( CIE-b*2 ^ 2 ) )
     - sqrt( ( CIE-a*1 ^ 2 ) + ( CIE-b*1 ^ 2 ) )

Delta H* = sqrt( ( CIE-a*2 - CIE-a*1 ) ^ 2
               + ( CIE-b*2 - CIE-b*1 ) ^ 2 - ( xDE ^ 2 ) )

26、Delta E* CIE 
————————————————————
CIE-L*1, CIE-a*1, CIE-b*1          //Color #1 CIE-L*ab values
CIE-L*2, CIE-a*2, CIE-b*2          //Color #2 CIE-L*ab values

Delta E* = sqrt( ( ( CIE-L*1 - CIE-L*2 ) ^ 2 )
               + ( ( CIE-a*1 - CIE-a*2 ) ^ 2 )
               + ( ( CIE-b*1 - CIE-b*2 ) ^ 2 ) )

27、Delta E1994 
————————————————————
CIE-L*1, CIE-a*1, CIE-b*1          //Color #1 CIE-L*ab values
CIE-L*2, CIE-a*2, CIE-b*2          //Color #2 CIE-L*ab values
WHT-L, WHT-C, WHT-H                //Weighting factors

xC1 = sqrt( ( CIE-a*1 ^ 2 ) + ( CIE-b*1 ^ 2 ) )
xC2 = sqrt( ( CIE-a*2 ^ 2 ) + ( CIE-b*2 ^ 2 ) )
xDL = CIE-L*2 - CIE-L*1
xDC = xC2 - xC1
xDE = sqrt( ( ( CIE-L*1 - CIE-L*2 ) * ( CIE-L*1 - CIE-L*2 ) )
          + ( ( CIE-a*1 - CIE-a*2 ) * ( CIE-a*1 - CIE-a*2 ) )
          + ( ( CIE-b*1 - CIE-b*2 ) * ( CIE-b*1 - CIE-b*2 ) ) )

xDH = ( xDE * xDE ) - ( xDL * xDL ) - ( xDC * xDC )
if ( xDH > 0 )
{
   xDH = sqrt( xDH )
}
else
{
   xDH = 0
}
xSC = 1 + ( 0.045 * xC1 )
xSH = 1 + ( 0.015 * xC1 )
xDL /= WHT-L
xDC /= WHT-C * xSC
xDH /= WHT-H * xSH

Delta E94 = sqrt( xDL ^ 2 + xDC ^ 2 + xDH ^ 2 )

28、Delta E2000 
————————————————————
CIE-L*1, CIE-a*1, CIE-b*1          //Color #1 CIE-L*ab values
CIE-L*2, CIE-a*2, CIE-b*2          //Color #2 CIE-L*ab values
WHT-L, WHT-C, WHT-H                //Wheight factors

xC1 = sqrt( CIE-a*1 * CIE-a*1 + CIE-b*1 * CIE-b*1 )
xC2 = sqrt( CIE-a*2 * CIE-a*2 + CIE-b*2 * CIE-b*2 )
xCX = ( xC1 + xC2 ) / 2
xGX = 0.5 * ( 1 - sqrt( ( xCX ^ 7 ) / ( ( xCX ^ 7 ) + ( 25 ^ 7 ) ) ) )
xNN = ( 1 + xGX ) * CIE-a*1
xC1 = sqrt( xNN * xNN + CIE-b*1 * CIE-b*1 )
xH1 = CieLab2Hue( xNN, CIE-b*1 )
xNN = ( 1 + xGX ) * CIE-a*2
xC2 = sqrt( xNN * xNN + CIE-b*2 * CIE-b*2 )
xH2 = CieLab2Hue( xNN, CIE-b*2 )
xDL = CIE-L*2 - CIE-L*1
xDC = xC2 - xC1
if ( ( xC1 * xC2 ) == 0 ) {
   xDH = 0
}
else {
   xNN = round( xH2 - xH1, 12 )
   if ( abs( xNN ) <= 180 ) {
      xDH = xH2 - xH1
   }
   else {
      if ( xNN > 180 ) xDH = xH2 - xH1 - 360
      else             xDH = xH2 - xH1 + 360
   }
}

xDH = 2 * sqrt( xC1 * xC2 ) * sin( dtor( xDH / 2 ) )
xLX = ( CIE-L*1 + CIE-L*2 ) / 2
xCY = ( xC1 + xC2 ) / 2
if ( ( xC1 *  xC2 ) == 0 ) {
   xHX = xH1 + xH2
}
else {
   xNN = abs( round( xH1 - xH2, 12 ) )
   if ( xNN >  180 ) {
      if ( ( xH2 + xH1 ) <  360 ) xHX = xH1 + xH2 + 360
      else                        xHX = xH1 + xH2 - 360
   }
   else {
      xHX = xH1 + xH2
   }
   xHX /= 2
}
xTX = 1 - 0.17 * cos( dtor( xHX - 30 ) ) + 0.24
               * cos( deg2rad( 2 * xHX ) ) + 0.32
               * cos( deg2rad( 3 * xHX + 6 ) ) - 0.20
               * cos( dtor( 4 * xHX - 63 ) )
xPH = 30 * exp( - ( ( xHX  - 275 ) / 25 ) * ( ( xHX  - 275 ) / 25 ) )
xRC = 2 * sqrt( ( xCY ^ 7 ) / ( ( xCY ^ 7 ) + ( 25 ^ 7 ) ) )
xSL = 1 + ( ( 0.015 * ( ( xLX - 50 ) * ( xLX - 50 ) ) )
         / sqrt( 20 + ( ( xLX - 50 ) * ( xLX - 50 ) ) ) )

xSC = 1 + 0.045 * xCY
xSH = 1 + 0.015 * xCY * xTX
xRT = - sin( deg2rad( 2 * xPH ) ) * xRC
xDL = xDL / ( WHT-L * xSL )
xDC = xDC / ( WHT-C * xSC )
xDH = xDH / ( WHT-H * xSH )

Delta E00 = sqrt( xDL ^ 2 + xDC ^ 2 + xDH ^ 2 + xRT * xDC * xDH )

CieLab2Hue( var_a, var_b )          //Function returns CIE-H° value
{
   var_bias = 0
   if ( var_a >= 0 && var_b == 0 ) return 0
   if ( var_a <  0 && var_b == 0 ) return 180
   if ( var_a == 0 && var_b >  0 ) return 90
   if ( var_a == 0 && var_b <  0 ) return 270
   if ( var_a >  0 && var_b >  0 ) var_bias = 0
   if ( var_a <  0               ) var_bias = 180
   if ( var_a >  0 && var_b <  0 ) var_bias = 360
   return ( rad2deg( atan( var_b / var_a ) ) + var_bias )
}

29、Delta CMC 
————————————————————
CIE-L*1, CIE-a*1, CIE-b*1          //Color #1 CIE-L*ab values
CIE-L*2, CIE-a*2, CIE-b*2          //Color #2 CIE-L*ab values
WHT-L, WHT-C                       //Weight factors

xC1 = sqrt( ( CIE-a*1 ^ 2 ) + ( CIE-b*1 ^ 2 ) )
xC2 = sqrt( ( CIE-a*2 ^ 2 ) + ( CIE-b*2 ^ 2 ) )
xff = sqrt( ( xC1 ^ 4 ) / ( ( xC1 ^ 4 ) + 1900 ) )
xH1 = CieLab2Hue( CIE-a*1, CIE-b*1 )

if ( xH1 < 164 || xH1 > 345 ) xTT = 0.36 + abs( 0.4 * cos( dtor(  35 + xH1 ) ) )
else                          xTT = 0.56 + abs( 0.2 * cos( dtor( 168 + xH1 ) ) )

if ( CIE-L*1 < 16 ) xSL = 0.511
else                xSL = ( 0.040975 * CIE-L*1 ) / ( 1 + ( 0.01765 * CIE-L*1 ) )

xSC = ( ( 0.0638 * xC1 ) / ( 1 + ( 0.0131 * xC1 ) ) ) + 0.638
xSH = ( ( xff * xTT ) + 1 - xff ) * xSC
xDH = sqrt( ( CIE-a*2 - CIE-a*1 ) ^ 2 + ( CIE-b*2 - CIE-b*1 ) ^ 2 - ( xC2 - xC1 ) ^ 2 )
xSL = ( CIE-L*2 - CIE-L*1 ) / ( WHT-L * xSL )
xSC = ( xC2 - xC1 ) / ( WHT-C * xSC )
xSH = xDH / xSH

Delta CMC = sqrt( xSL ^ 2 + xSC ^ 2 + xSH ^ 2 )

CieLab2Hue( var_a, var_b )          //Function returns CIE-H° value
{
   var_bias = 0
   if ( var_a >= 0 && var_b == 0 ) return 0
   if ( var_a <  0 && var_b == 0 ) return 180
   if ( var_a == 0 && var_b >  0 ) return 90
   if ( var_a == 0 && var_b <  0 ) return 270
   if ( var_a >  0 && var_b >  0 ) var_bias = 0
   if ( var_a <  0               ) var_bias = 180
   if ( var_a >  0 && var_b <  0 ) var_bias = 360
   return ( rad2deg( atan( var_b / var_a ) ) + var_bias )
}

30、YUV→ RGB(RGB:0-255)

————————————————————
  Y = 0.299R + 0.587G + 0.114B
  U = -0.147R - 0.289G + 0.436B
  V = 0.615R - 0.515G - 0.100B

31、YUV→ RGB(RGB:0-255)

————————————————————
  R = Y + 1.14V
  G = Y - 0.395U - 0.581V
  B = Y + 2.032U

颜色转换公式大全及转换表格(31种)相关推荐

  1. html color 转换,Color颜色转换的三种方式(c#)

    Color颜色转换 1.在.net中如何把一个色名称转换成HTML色? System.Drawing.Color color = System.Drawing.Color.White; string ...

  2. python绘图颜色代码大全_matplotlib指定绘图颜色的八种方式——python篇

    在使用matplotlib的pyplot库进行绘图时,经常会发现各种开源代码指定"color"的方式并不一致.通过查阅官方资料[1],发现共有8种指定color的方式.8种方式如下 ...

  3. 人工智能影响未来娱乐的31种方式

    来源:资本实验室 技术改变生活,而各种新技术每天都在重新定义我们的生活状态.技术改变娱乐,甚至有了互联网时代"娱乐至死"的警语. 当人工智能介入我们的生活,特别是娱乐的时候,一切又 ...

  4. IPv4向IPv6转换的几种技术分析(中科三方)

    一.IPv6介绍 随着互联网技术的不断发展,IPv4的许多缺陷逐渐暴露出来,其中最突出的是IP地址空间将被耗尽和主干路由表不断增长的问题.为了扩大地址空间,拟通过IPv6重新定义地址空间.IPv4中规 ...

  5. 前端将后端返回的带颜色的数据进行转换

    前端将后端返回的带颜色的数据进行转换 因为之前在调用后端接口的时候 后端返给我的数据显示乱码:具体如下图所示: 然后这些数据 在后台显示的是这样的的,如下图所示: 根据以上这三幅图片可以看到有些数据 ...

  6. Excel按单元格背景颜色查找单个单元格的2种操作

    今天小编要和大家分享的是,Excel按单元格背景颜色查找单个单元格的2种操作,比如说下图的黄色背景填充的单元格,该如何定位查找呢 (查找对话框) (方方格子插件) 1.先看动图演示吧 2.我们可以按C ...

  7. 【C# / Algorithm】RGB、HSV、HSL颜色模型的互相转换

    RGB.HSV.HSL颜色模型的含义本文就不赘述了,大家可以直接百度到. 在此提供一个封装好的可以对三种颜色模型进行互相转换的辅助类. 以上是使用该类写出的程序示例. 以下是颜色模型类的描述 #reg ...

  8. 人生失败的31种致命原因

    人生失败的31种致命原因 一.不利的遗传背景.天生智力不足的人,是没什么办法可想的.唯一的补救办法就是"以勤补拙". 二.缺乏明确的人生目标,凡是没有明确人生目标的人,便没有成功的 ...

  9. JAVA对象JSON数据互相转换的四种常见情况

    这篇文章主要介绍了JAVA对象JSON数据互相转换的四种常见情况,需要的朋友可以参考下 1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码代码如下:     JSONArray ...

最新文章

  1. 嵌套母版页中的控件访问
  2. 微服务部署:蓝绿部署、滚动部署、灰度发布等部署方案对比与总结
  3. java map集合遍历方法,Java的Map集合的三种遍历方法
  4. php中mysqli用法举例
  5. HDOJ1028-Ignatius and the Princess III(整数划分)
  6. 《信息通信技术与政策》丨盖国强:中国数据库服务生态与体系
  7. 【英语学习】【Level 07】U03 Amazing wonders L1 My hometown
  8. 容器入门(2) - podman
  9. 利用varnish构建httpd缓存服务器
  10. Linux中grep命令查找文件,Linux中使用grep命令搜索文件名及文件内容的方法
  11. 修改高通IPQ4019/4018的flash的分区
  12. 人脸识别5.2- insightface人脸3d关键点检测,人脸68个特征点、106个特征点;人脸姿态角Pitch、Yaw、Roll、
  13. 二维码会成为杀手级应用吗?
  14. 人工客服真的是真人吗?
  15. vo bo po dao pojo dto
  16. Echarts世界地图汉化及其数据包
  17. 如何下载建外街道卫星地图高清版大图
  18. Spring Ioc原理解析
  19. 【Matlab系列】常用模拟和数字通信系统仿真及Matlab实现
  20. 什么是进程、进程的概念?

热门文章

  1. Java通过mongo-java-driver-3.0+查询mongodb数据库
  2. 安妮的50句经典[转贴]
  3. GPU显存占满利用率GPU-util为0
  4. Real-time signal
  5. svn服务器现存的库文件导入,svn导入版本库及相关知识
  6. 【c++数据结构】栈混洗的甄别算法
  7. Python基础三、2、list列表练习题 引用随机数
  8. 800道Java后端经典面试题,希望你找到自己理想的Offer呀~
  9. MATLB|基于粒子群算法的能源管理系统EMS(考虑光伏、储能 、柴油机系统)
  10. OpenCV轮廓最大内接矩形(带角度)-计算与绘制(Python / C++源码)