Transicc and also tificc both produce oddly wrong results when 
converting near-zero and zero RGB channel values from one RGB matrix 
profile to a second RGB matrix profile with a different TRC but the same 
colorants (as per converting a linear gamma sRGB image to regular sRGB).

Below are some transicc examples. The profile names indicate the profile 
spec version and the TRC. All the profiles were made using LCMS2 and 
have identical colorants and chad/white point.

First case: Both profiles have a true gamma TRC (V4 vs V2 makes no 
difference):

transicc -c0 -t1 -w -o sRGB-V2-g10.icc -i sRGB-V4-g20.icc

255 255 0
R=255.0000 G=255.0000 B=0.0134 (the B channel should be zero)

255 0 0
R=255.0000 G=0.0282 B=0.0000 (the G channel should be zero)

255 0 255
R=255.0000 G=0.0331 B=255.0000 (the G channel should be zero)

255 0.001 0.001
R=255.0000 G=0.5037 B=0.5051 (G and B should be equal to each other)


Going the other way produces negative RGB channel values:

transicc -c0 -t1 -w -i sRGB-V4-g20.icc -o sRGB-V2-g10.icc

255 0 0
R=255.0000 G=0.0000 B=-0.0000 (negative B channel)

255 0.001 0.001
R=255.0000 G=0.0000 B=-0.0000 (negative B channel)

70000 0.001 0.001
R=19215684.3750 G=-0.3511 B=0.0270 (the G and B channel values should be 
equal and positive)


Second case: The destination profile has the V4 sRGB parametric TRC:

transicc -c0 -t1 -w -i sRGB-V4-g10.icc -o sRGB-V4-srgbtrc.icc

0.0001 255 0.0001
R=0.0015 G=255.0000 B=0.0013 (R and G channels should be equal)

255 0 0
R=255.0000 G=0.0000 B=-0.0000 (negative B)

0 255 0
R=-0.0002 G=255.0000 B=-0.0000 (negative B)

0 0 255
R=-0.0001 G=0.0000 B=255.0000 (negative R)


When using GIMP 2.9 from git (which uses LCMS2) to do the same profile 
conversions, it turns out that the "zero" and "-zero" channel values are 
actually slightly positive and slightly negative at floating point 
precision. At 16- and 32-bit integer precision the "zero" values are 
slightly positive.

If the destination profile has the "V4-when-saved-as-V2" 4096-point sRGB 
TRC, then there are no negative channel values, and the near-zero 
channel values are always equal to each other if the channel values are 
equal to each other in the source color space. However, the resulting 
RGB channel values in the destination color space are quantized, which 
means information is lost.

Why the odd conversion results for zero and near zero channel values? Is 
there a workaround? Or perhaps I'm using the wrong LCMS ICC profile 
conversion parameters?

Best regards,
Elle


------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
Lcms-user mailing list
Lcms-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lcms-user

Reply via email to