颜色转换公式大全及转换表格(31种)
内容提纲:
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种)相关推荐
- html color 转换,Color颜色转换的三种方式(c#)
Color颜色转换 1.在.net中如何把一个色名称转换成HTML色? System.Drawing.Color color = System.Drawing.Color.White; string ...
- python绘图颜色代码大全_matplotlib指定绘图颜色的八种方式——python篇
在使用matplotlib的pyplot库进行绘图时,经常会发现各种开源代码指定"color"的方式并不一致.通过查阅官方资料[1],发现共有8种指定color的方式.8种方式如下 ...
- 人工智能影响未来娱乐的31种方式
来源:资本实验室 技术改变生活,而各种新技术每天都在重新定义我们的生活状态.技术改变娱乐,甚至有了互联网时代"娱乐至死"的警语. 当人工智能介入我们的生活,特别是娱乐的时候,一切又 ...
- IPv4向IPv6转换的几种技术分析(中科三方)
一.IPv6介绍 随着互联网技术的不断发展,IPv4的许多缺陷逐渐暴露出来,其中最突出的是IP地址空间将被耗尽和主干路由表不断增长的问题.为了扩大地址空间,拟通过IPv6重新定义地址空间.IPv4中规 ...
- 前端将后端返回的带颜色的数据进行转换
前端将后端返回的带颜色的数据进行转换 因为之前在调用后端接口的时候 后端返给我的数据显示乱码:具体如下图所示: 然后这些数据 在后台显示的是这样的的,如下图所示: 根据以上这三幅图片可以看到有些数据 ...
- Excel按单元格背景颜色查找单个单元格的2种操作
今天小编要和大家分享的是,Excel按单元格背景颜色查找单个单元格的2种操作,比如说下图的黄色背景填充的单元格,该如何定位查找呢 (查找对话框) (方方格子插件) 1.先看动图演示吧 2.我们可以按C ...
- 【C# / Algorithm】RGB、HSV、HSL颜色模型的互相转换
RGB.HSV.HSL颜色模型的含义本文就不赘述了,大家可以直接百度到. 在此提供一个封装好的可以对三种颜色模型进行互相转换的辅助类. 以上是使用该类写出的程序示例. 以下是颜色模型类的描述 #reg ...
- 人生失败的31种致命原因
人生失败的31种致命原因 一.不利的遗传背景.天生智力不足的人,是没什么办法可想的.唯一的补救办法就是"以勤补拙". 二.缺乏明确的人生目标,凡是没有明确人生目标的人,便没有成功的 ...
- JAVA对象JSON数据互相转换的四种常见情况
这篇文章主要介绍了JAVA对象JSON数据互相转换的四种常见情况,需要的朋友可以参考下 1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码代码如下: JSONArray ...
最新文章
- 嵌套母版页中的控件访问
- 微服务部署:蓝绿部署、滚动部署、灰度发布等部署方案对比与总结
- java map集合遍历方法,Java的Map集合的三种遍历方法
- php中mysqli用法举例
- HDOJ1028-Ignatius and the Princess III(整数划分)
- 《信息通信技术与政策》丨盖国强:中国数据库服务生态与体系
- 【英语学习】【Level 07】U03 Amazing wonders L1 My hometown
- 容器入门(2) - podman
- 利用varnish构建httpd缓存服务器
- Linux中grep命令查找文件,Linux中使用grep命令搜索文件名及文件内容的方法
- 修改高通IPQ4019/4018的flash的分区
- 人脸识别5.2- insightface人脸3d关键点检测,人脸68个特征点、106个特征点;人脸姿态角Pitch、Yaw、Roll、
- 二维码会成为杀手级应用吗?
- 人工客服真的是真人吗?
- vo bo po dao pojo dto
- Echarts世界地图汉化及其数据包
- 如何下载建外街道卫星地图高清版大图
- Spring Ioc原理解析
- 【Matlab系列】常用模拟和数字通信系统仿真及Matlab实现
- 什么是进程、进程的概念?
热门文章
- Java通过mongo-java-driver-3.0+查询mongodb数据库
- 安妮的50句经典[转贴]
- GPU显存占满利用率GPU-util为0
- Real-time signal
- svn服务器现存的库文件导入,svn导入版本库及相关知识
- 【c++数据结构】栈混洗的甄别算法
- Python基础三、2、list列表练习题 引用随机数
- 800道Java后端经典面试题,希望你找到自己理想的Offer呀~
- MATLB|基于粒子群算法的能源管理系统EMS(考虑光伏、储能 、柴油机系统)
- OpenCV轮廓最大内接矩形(带角度)-计算与绘制(Python / C++源码)