Thread: [Lcms-user] Unexpected results with "zero error" IT8.7 test
An ICC-based CMM for color management
Brought to you by:
mm2
From: Mark R. <mar...@ya...> - 2003-01-22 18:24:16
|
I am experimenting with LCMS (thank you for creating it and making it available) and have some results which I don't understand. I created a synthetic image of an IT8.7 target, and measured it using qtmeasurementtool. I then wrote code using the LCMS library to convert these sRGB values to XYZ and L*a*b* and created an IT8.7 "data sheet". Finally, I used these two files with qtscannerprofiler to create a profile, and tested the profile on the original image using tifficc. I had expected the profile to have a zero average dE (the sRGB and XYZ and L*a*b* values exactly matched) and the output of tifficc to be identical to the originial image. Instead, qtscannerprofiler had very large dE values, and the tifficc output was almost entirely white (out of gamut overflow?). Following are details from the data and code. Any advice is welcome. A typical entry from the qtmeasurementtool output file: B6 200 79 73 0 Part of the header and the corresponding entry from the "data file". These values match the results of using icctrans manually. SAMPLE_ID XYZ_X XYZ_Y XYZ_Z LAB_L LAB_A LAB_B B6 29.14 18.85 6.32 50.52 48.83 29.74 Excerpts from the code used to translate sRGB to XYZ and L*a*b*: cmsHPROFILE srgb_icc = cmsCreate_sRGBProfile(), xyz_icc = cmsCreateXYZProfile (), lab_icc = cmsCreateLabProfile (NULL) ; icColorSpaceSignature srgb_space = cmsGetColorSpace(srgb_icc) ; DWORD dw_srgb = BYTES_SH(2) | CHANNELS_SH(_cmsChannelsOf(srgb_space)) ; cmsHTRANSFORM xyz_trans = cmsCreateTransform(srgb_icc, dw_srgb, xyz_icc, TYPE_XYZ_16, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOTPRECALC), lab_trans = cmsCreateTransform(srgb_icc, dw_srgb, lab_icc, TYPE_Lab_16, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOTPRECALC) ; WORD rgb[MAXCHANNELS], xyz[MAXCHANNELS], lab[MAXCHANNELS] ; sscanf(buffer + blank, "%d%d%d", rgb, rgb+1, rgb+2) ; rgb[0] *= 257 ; rgb[1] *= 257 ; rgb[2] *= 257 ; cmsDoTransform(xyz_trans, rgb, xyz, 1) ; cmsDoTransform(lab_trans, rgb, lab, 1) ; cmsCIEXYZ xyz_float ; cmsCIELab lab_float ; cmsXYZEncoded2Float(&xyz_float, xyz) ; cmsLabEncoded2Float(&lab_float, lab) ; fprintf(output, "%-4.*s %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n", blank, buffer, xyz_float.X * 100.0, xyz_float.Y * 100.0, xyz_float.Z * 100.0, lab_float.L, lab_float.a, lab_float.b) ; The errors from qtscannerprofiler: Average dE : 69.72 Standard deviation : 26.90 Peak : 127.33 Min : 0.00 I also tried using INTENT_PERCEPTUAL in the cmsCreateTransform(...) calls, which gave the same XYZ and L*a*b* values as INTENT_RELATIVE_COLORIMETRIC. Using INTENT_ABSOLUTE_COLORIMETRIC gave different values, but similar bad results: Average dE : 70.36 Standard deviation : 26.86 Peak : 131.91 Min : 0.00 ===== -- MARK mar...@ya... __________________________________________________ Do you Yahoo!? Yahoo! Mail Plus - Powerful. Affordable. Sign up now. http://mailplus.yahoo.com |
From: <ma...@li...> - 2003-01-22 19:07:47
|
Hi, What you are trying to do, is easely done by a utility called "icc2it8". You can find a Win32 binary in the utilities page: http://www.littlecms.com/newutils.htm#icc2it8 The profiler package for linux has the source code as well. That will generate a fake IT8 taking measures directly from profile. In your case icc2it8 -t3 -l "sRGB Color Space Profile.icm" srgb.it8 That is, using the sRGB standard profile, and absolute colorimetric intent (-t3) generate RGB and Lab values (-l). This will result in a srgb.it8 containing both RGB and Lab and ready to be used by the profilers. In this case, absolute intent is needed, since you are measuring absolute Lab as taken from real target reference sheets. If you want to try the scanner profiler, make sure to select this file as "Target". Since the RGB measurement is already in the sheet. Leave the "measurement" field blank. I have checked it and gives to me a dE of 0.29 and a peak of about 1.5. This peak is due to the special handling on gamut boundaries the scanners does need. Also, you can try to profile your sheet as monitor (and this should be more correct, since sRGB is really a monitor profile). On monitor profiler, select "I want to build accurate profile from measurement sheet", and enter the sheet name. The monitor profiler gives a dE of 0.18 and a peak again of 1.5. Comparing the obtained profile by qtProfileChecker against true sRGB gives identical gamut triangle and transfer curves. dE and Peak 0 could not be obtained easely, since IT8 target gamut is bigger than sRGB andt thus, some clipping always happens. Regards, Martí Maria The little cms project http://www.littlecms.com ma...@li... ----- Original Message ----- From: "Mark Rubin" <mar...@ya...> To: <lcm...@li...> Sent: Wednesday, January 22, 2003 7:24 PM Subject: [Lcms-user] Unexpected results with "zero error" IT8.7 test > I am experimenting with LCMS (thank you for creating it and making it > available) and have some results which I don't understand. > > I created a synthetic image of an IT8.7 target, and measured it using > qtmeasurementtool. I then wrote code using the LCMS library to > convert these sRGB values to XYZ and L*a*b* and created an IT8.7 "data > sheet". Finally, I used these two files with qtscannerprofiler to > create a profile, and tested the profile on the original image using > tifficc. > > I had expected the profile to have a zero average dE (the sRGB and > XYZ and L*a*b* values exactly matched) and the output of tifficc to be > identical to the originial image. Instead, qtscannerprofiler had very > large dE values, and the tifficc output was almost entirely white (out > of gamut overflow?). > > Following are details from the data and code. Any advice is welcome. > > > A typical entry from the qtmeasurementtool output file: > > B6 200 79 73 0 > > > Part of the header and the corresponding entry from the "data > file". These values match the results of using icctrans manually. > > SAMPLE_ID XYZ_X XYZ_Y XYZ_Z LAB_L LAB_A LAB_B > B6 29.14 18.85 6.32 50.52 48.83 29.74 > > > Excerpts from the code used to translate sRGB to XYZ and L*a*b*: > > cmsHPROFILE srgb_icc = cmsCreate_sRGBProfile(), > xyz_icc = cmsCreateXYZProfile (), > lab_icc = cmsCreateLabProfile (NULL) ; > > icColorSpaceSignature srgb_space = cmsGetColorSpace(srgb_icc) ; > > DWORD dw_srgb = BYTES_SH(2) | > CHANNELS_SH(_cmsChannelsOf(srgb_space)) ; > > cmsHTRANSFORM > xyz_trans = cmsCreateTransform(srgb_icc, > dw_srgb, > xyz_icc, > TYPE_XYZ_16, > INTENT_RELATIVE_COLORIMETRIC, > cmsFLAGS_NOTPRECALC), > lab_trans = cmsCreateTransform(srgb_icc, > dw_srgb, > lab_icc, > TYPE_Lab_16, > INTENT_RELATIVE_COLORIMETRIC, > cmsFLAGS_NOTPRECALC) ; > > WORD rgb[MAXCHANNELS], > xyz[MAXCHANNELS], > lab[MAXCHANNELS] ; > > sscanf(buffer + blank, "%d%d%d", rgb, rgb+1, rgb+2) ; > rgb[0] *= 257 ; > rgb[1] *= 257 ; > rgb[2] *= 257 ; > > cmsDoTransform(xyz_trans, rgb, xyz, 1) ; > cmsDoTransform(lab_trans, rgb, lab, 1) ; > > cmsCIEXYZ xyz_float ; > cmsCIELab lab_float ; > > cmsXYZEncoded2Float(&xyz_float, xyz) ; > cmsLabEncoded2Float(&lab_float, lab) ; > > fprintf(output, > "%-4.*s %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n", > blank, > buffer, > xyz_float.X * 100.0, > xyz_float.Y * 100.0, > xyz_float.Z * 100.0, > lab_float.L, > lab_float.a, > lab_float.b) ; > > > The errors from qtscannerprofiler: > > Average dE : 69.72 > Standard deviation : 26.90 > Peak : 127.33 > Min : 0.00 > > > I also tried using INTENT_PERCEPTUAL in the cmsCreateTransform(...) > calls, which gave the same XYZ and L*a*b* values as > INTENT_RELATIVE_COLORIMETRIC. Using INTENT_ABSOLUTE_COLORIMETRIC > gave different values, but similar bad results: > > Average dE : 70.36 > Standard deviation : 26.86 > Peak : 131.91 > Min : 0.00 > > > ===== > -- > MARK > mar...@ya... > > __________________________________________________ > Do you Yahoo!? > Yahoo! Mail Plus - Powerful. Affordable. Sign up now. > http://mailplus.yahoo.com > > > ------------------------------------------------------- > This SF.net email is sponsored by: Scholarships for Techies! > Can't afford IT training? All 2003 ictp students receive scholarships. > Get hands-on training in Microsoft, Cisco, Sun, Linux/UNIX, and more. > www.ictp.com/training/sourceforge.asp > _______________________________________________ > Lcms-user mailing list > Lcm...@li... > https://lists.sourceforge.net/lists/listinfo/lcms-user > > |