O sistema de cores subtrativas CIE LAB
O Lab é um sistema subtrativo de cor proposto pela Commision Internationale L'Eclairage - CIE.
Essa combinação de cores subtrativa é usada para definir as cores de materiais não emitentes especialmente os pigmentos que definirão as cores dos tecidos, plasticos e tintas.
Utiliza como o LUV um canal de luminância e dois de crominância. Mas aqui a luminância é substituida pela luminosidade (ou seja a medida de como a intensidade luminosa é percebida).
O sistema CIE Lab estabelece coordenadas uniformes no espaço
tridimensional de cor.
A conversão entre o CIE Lab e o RGB ou o XYZ é cara computacionalmente.
Conversão de XYZ para LAB
Dada pelas formulas abaixo: onde define-se:
L=luminosidade
A e B correspondem a matiz que é a crominância de uma cor.
Y - corresponde a luminância da cor.
X e Z comprimentos de onda do CIE padrão.
Os codigos abaixo fazem essas trabsformações.
LAB_TO_XYZ converte CIE L*a*b* to CIE XYZ .
Definição
O sistema de cores CIE L*a*b* descreve as cores basicas em
três qualidades:
L* é luminosidade, a* e b* contem a informação
de croma.
Uma cor dada será representada pelos três números,(L*,a*,b*).
As áreas são 0<=L*<=100,
-500<=a*<=500, -200<=b*<=200.
O sistema CIE XYZ descreve uma cor em termos das componentes X,Y
e Z primárias.
Em circunstâncias ordinárias, todas as três
destas componentes devem ser positivas.
Parameters:
Input, real LSTAR, ASTAR, BSTAR, the CIE L*a*b* color coordinates.
Output, real XCAP, YCAP, ZCAP, the CIE XYZ color coordinates.
Input, real XCAPN, YCAPN, ZCAPN, the CIE XYZ color coordinates of white.
Procedure LAB_TO_XYZ
real astar
real bstar
real cubert
real fx
real fy
real fz
real lstar
real xcap
real xcapn
real ycap
real ycapn
real zcap
real zcapn
!
if ( lstar .le. 0.0 ) then
ycap = 0.0
else if ( lstar .le. 8.0 ) then
ycap = lstar * ycapn / 903.3
else if ( lstar .le. 100.0 ) then
ycap = ycapn * ( ( lstar + 16.0 ) / 116.0 )**3
else
ycap = ycapn
end if
if ( ycap .le. 0.00856 * ycapn ) then
fy = 7.787 * ycap / ycapn + 16.0 / 116.0
else
fy = cubert ( ycap / ycapn )
end if
fx = fy + ( astar / 500.0 )
if ( fx**3 .le. 0.008856 ) then
xcap = xcapn * ( fx - 16.0 / 116.0 ) / 7.787
else
xcap = xcapn * fx**3
end if
fz = fy - ( bstar / 200.0 )
if ( fz**3 .le. 0.008856 ) then
zcap = zcapn * ( fz - 16.0 / 116.0 ) / 7.787
else
zcap = zcapn * fz**3
end if
return
end
subroutine lcc_to_rgbprime ( luma, chroma1, chroma2, yr, yg, yb,
rprime, gprime, bprime )
XYZ_TO_LAB converes CIE XYZ to CIE L*a*b*
O sistema de cores CIE L*a*b* descreve as cores basicas em
três qualidades:
L* é luminosidade, a* e b* contem a informação
de croma.
Uma cor dada será representada pelos três números,(L*,a*,b*).
As áreas são 0<=L*<=100,
-500<=a*<=500, -200<=b*<=200.
Parameters:
Input, real XCAP, YCAP, ZCAP, the CIE XYZ color coordinates.
Input, real XCAPN, YCAPN, ZCAPN, the CIE XYZ color coordinates
of white.
Output, real LSTAR, ASTAR, BSTAR, the CIE L*a*b* color coordinates.
Procedure XYZ_TO_LAB
real astar
real bstar
real cubert
real fx
real fy
real fz
real lstar
real xcap
real xcapn
real ycap
real ycapn
real zcap
real zcapn
if (
& xcapn .eq. 0.0 .or.
& ycapn .eq. 0.0 .or.
& zcapn .eq. 0.0 ) then
write ( *, * ) ' '
write ( *, * ) 'XYZ_TO_LAB - Fatal error!'
write ( *, * ) ' XCAPN, YCAPN and ZCAPN cannot be zero.'
write ( *, * ) ' XCAPN = ', xcapn
write ( *, * ) ' YCAPN = ', ycapn
write ( *, * ) ' ZCAPN = ', zcapn
stop
end if
//Compute the CIE lightness.
if ( ycap .le. 0.0 ) then
lstar = 0.0
else if ( ycap .le. 0.008856 * ycapn ) then
lstar = 903.3 * ycap / ycapn
else if ( ycap .le. ycapn ) then
lstar = 116.0 * cubert ( ycap / ycapn ) - 16.0
else
lstar = 100.0
end if
if ( xcap .le. 0.008856 * xcapn ) then
fx = 7.787 * xcap / xcapn + 16.0 / 116.0
else
fx = cubert ( xcap / xcapn )
end if
if ( ycap .le. 0.008856 * ycapn ) then
fy = 7.787 * ycap / ycapn + 16.0 / 116.0
else
fy = cubert ( ycap / ycapn )
end if
if ( zcap .le. 0.008856 * zcapn ) then
fz = 7.787 * zcap / zcapn + 16.0 / 116.0
else
fz = cubert ( zcap / zcapn )
end if
astar = 500.0 * ( fx - fy )
bstar = 200.0 * ( fy - fz )
return
end
subroutine xyz_to_luv ( xcap, ycap, zcap, xcapn, ycapn, zcapn,
lstar, ustar, vstar )