Robert, This is some rambling, but you might find it helpful because I think we've gone through a lot of the same thought processes and struggles when it comes to the difference between absolute and relative colorimetric. I think for us laymen without color science backgrounds, the usual descriptions of absolute and relative colorimetric intents, though accurate, actually create tremendous confusion. From camera space to working space, it wasn't until Graeme eloquently described the difference to me that I think I got it. The PM5, InCamera & SilverFast input profiles I'd been using didn't make the same distinction between absolute and relative that Argyll makes, so it was very confusing to me for a long time. From working space to printer space, ColorThink Pro's 3d graphing ability that shows the color conversions as vectors helped me tremendously. Understanding the difference was also made much harder by the fact that some CMMs like Adobe Ace and LCM ignore the defined D65 white points of AdobeRGB and sRGB working spaces and do a hidden conversion to D50 in some directions but not others. When trying to understand out how absolute works through experimentation, not knowing about those hidden conversions was a major problem. Experimenting with Argyll's cctiff and trying BetaRGB as a working space (which IS D50) versus AdobeRGB finally helped clear up that confusion. When going from a working space into a printer space, relative colorimetric with BPC is probably shifting a lot more colors than you think, even ones inside the printer's gamut. A lot of light colors are getting pushed down to make room for the whole area between the working space L100 and paper white to get shifted into gamut. BPC does the same with dark colors, pushing a lot of them up to make room for bringing in the whole area between the working space L0 and the paper/ink black point to get shifted into gamut. Depending on the paper white and black points, you can end up with almost all colors getting shifted to some extent. That's different from what usually gets described. For me, the most fundamental task for understanding color management starts with absolute intent: to take a defined color, and, through the use of a good printer profile, know whether or not I even have a shot at reproducing that color accurately, and, if so, have the profile send values to the printer to get a very good match to that color WITHOUT ANY TRIAL AND ERROR. That is absolute colorimetric intent -- the in-gamut case. It's really not confusing. However, I think we laymen initially get totally tripped up by what happens to a working space white going absolute into a printer space, which is VERY confusing at first. It's outside the printer's gamut, so it gets converted to the absolutely closest possible spot on the printer's gamut, which is NOT usually paper white, it's usually a little bit below and to the side of the paper white. The 3d graphing vectors show this really well. Once you see what's really going on with absolute and relative from a working space to a printer space, you get ideas. For example, creating a luminosity mask in working space to isolate all pixels very near or above paper white and shifting just those pixels towards the working space RGB value for paper white. Then when doing a subsequent absolute conversion to printer space, everything that's in gamut gets mapped absolutely with no shifting at all while everything near or above paper white gets converted to be very close to or exactly paper white. Similar strategies can be used for out of gamut dark colors. You can have very fine control of all the shifting and clipping if you want it. But until we really see whats going on, we give up on even trying to understand absolute because it seems both confusing and useless, and we resort to relative colorimetric, but without realizing how much it actually shifts colors when going from a working space to a printer space. Or we rely on perceptual mappings, which can be very useful but can also seem to be all over the place. And so the whole thing can be a bit frustrating. - Brad -----Original Message----- From: argyllcms-bounce@xxxxxxxxxxxxx [mailto:argyllcms-bounce@xxxxxxxxxxxxx] On Behalf Of robert@xxxxxxxxxxxxxxxxxx Sent: Monday, November 03, 2014 12:47 PM To: argyllcms@xxxxxxxxxxxxx Subject: [argyllcms] Re: Question regarding White Point and spotread Hi Brad, Many thanks for taking the time to try to help me figure this out!! What you are suggesting makes me stop and think what I'm trying to achieve. Basically, I would like to be able to specify an RGB color, or range of colors, in the print space and verify how closely my printer achieves this. The reason I say an RGB color in the print (or destination) space, is that this guarantees that the color will be in gamut. So the first attempt I made was to specify a color (say RGB 120,80,60) in the destination space (Canson Baryta in this case), check its Lab value, print it, and using spotread find out what the Lab value of the printed color is. Of course I don't expect the figures to be exactly the same (a dE00 uncertainty of around 0.6 would seem reasonable, to account for the instrument, rounding and interpolation errors etc) - but the error I got was 1.6 if I recall, which seems too big. This made me think that the probable additional error was due to the fact that spotread does not compensate for the paper white. I then looked at using fakeread and colverify (which can compensate for paper white) and these do appear to give much tighter results. I'm not sure that I want to use Absolute Colorimetric as I don't use this in my normal printing (only Relative Colorimetric or Perceptual ... but I wouldn't attempt this sort of test with Perceptual because I would expect all the color values to be changed). BUT ... if you are trying to show that a known in-gamut color/s is printed accurately (enough), verified by spotread/chartread, then perhaps you should print it with no color management, scan it, and then compare the values to the target tiff file with AbsCol assigned as you suggest. Perhaps doing it this way you are automatically compensating for the paper white? To be honest I can't get my head around this :). I really think this whole discussion needs input from someone like Graham. Unfortunately there's only one Graham out there! Robert -----Original Message----- From: argyllcms-bounce@xxxxxxxxxxxxx [mailto:argyllcms-bounce@xxxxxxxxxxxxx] On Behalf Of Brad Funkhouser Sent: 03 November 2014 14:22 To: argyllcms@xxxxxxxxxxxxx Subject: [argyllcms] Re: Question regarding White Point and spotread Robert, I'm interested in what you're doing, but I'm a little lost in the details. To help clarify, here's an alternate version of what I think you're wanting to accomplish. ======================================== You have an existing printer profile (CansonBaryta) built from a large patch count target. To physically check that profile now and in the future you create a smaller (100 patch count) test target. You print the test target with no color management using exactly the same printer workflow as used when you built the CansonBaryta profile. You measure the test target and get a ti3 file with XYZ values for those RGB device printer values (having chartread also include D50 Lab values in the ti3 can be helpful for the following spot check). If you bring the test target TIFF file into Photoshop, assign it the CansonBaryta profile and set color conversion options to Absolute, then the Lab values in the info palette for each patch should closely match the measured D50 Lab values in the ti3. They shouldn't be too far off from the dE ranges that colprof reported when it originally built the CansonBaryta profile from the large patch count target. This lets you do spot checks, but in order to get data across all 100 patches, you need the whole list of expected XYZ values. Using Excel, extract just the printer device RGB list from either the ti1, ti2, or ti3 files. Those device RGB values are the same in all three files. Run that list in batch mode through the CansonBaryta profile using icclu to get absolute expected XYZ values. Using Excel, put the RGB values list side by side with the expected XYZ values list in a test target "expected results" ti3 file and use colverify to see the dEs of the expected results versus the measured results. They shoudn't be too far off from what colprof reported when it built the profile. In the future, print the test target again, measure it, and compare the new ti3 against the initial measurement ti3. Those dEs will encompass everything that has changed over time: paper batch, ink batches, printer aging, printer firmware changes, color management engine changes, measurement device aging, etc. etc. If those differences are beyond your tolerances, do the large patch count target profiling process again and replace the old profile. ========================================== Let me know how closely this matches what you're wanting to accomplish. There's probably a more elegant way to do this than what I've described, and I'm interested in learning what that is. Thanks. - Brad -----Original Message----- From: argyllcms-bounce@xxxxxxxxxxxxx [mailto:argyllcms-bounce@xxxxxxxxxxxxx] On Behalf Of robert@xxxxxxxxxxxxxxxxxx Sent: Sunday, November 02, 2014 5:09 PM To: argyllcms@xxxxxxxxxxxxx Subject: [argyllcms] Re: Question regarding White Point and spotread The whole thing is confusing, to be honest! I?m just going to write down my explanation of what I think happens in the commands I have below with the hope that someone will verify that this is correct, or correct it if I have it wrong. A. Producing and scanning target. A.1 targen makes the .ti1 file that has the RGB values A.2 printtarg uses the RGB values in the .ti1 file to produce a tiff file with no profile attached. It also produces a .ti2 file that has the spot color location information. A.3 cctiff assigns a profile to the tiff file. To do this it looks up the AToB1 table to get the Lab values then looks up the BtoA1 table to get the RGB values. The effect is that the Lab values of in-gamut colors will not be changed while the Lab values of out-of-gamut colors will be brought to the nearest in-gamut colors (using the mapping intent specified). A.3 The tiff file is printed with no color management (it already has the print profile embedded) A.4 The target is scanned, producing the D50 Lab values in a .ti3 file (the iPFTest.ti3 file in my command) B. Producing the simulated scanned target data B.1 targen makes the .ti1 file that has the RGB values B.2 fakeread takes the .ti1 RGB values and converts the values to Lab. To do this it looks up the AtoB1 relative colorimetric table to get the Lab values corresponding to the RGB values (it could also use the AtoB3 absolute table which is the default, but in my command I specify relative). This results in a .ti3 file (the iPFRef.ti3 file in my command) C. Comparing the test.ti3 to the reference.ti3 C.1 colverify normalises the Lab values in the .ti3 files produced in A and B above to XYZ white. I assume it does this by knowing that sample #1 in both files is white. C.2 colverify then does a straightforward comparison of the Lab values in the two files. So, is this right, or is it wrong? If it's right, then, going back to my original question, the missing thing in spotread would seem to be the normalisation to XYZ white ... which would account for the dE error. Robert ________________________________________ From: argyllcms-bounce@xxxxxxxxxxxxx [mailto:argyllcms-bounce@xxxxxxxxxxxxx] On Behalf Of Brad Funkhouser Sent: 02 November 2014 20:55 To: argyllcms@xxxxxxxxxxxxx Subject: [argyllcms] Re: Question regarding White Point and spotread Robert, I think I see why I was confused. I'm bringing art from a camera into BetaRGB as absolute colors in standard D50. If all of the artwork's colors are in-gamut for a printer space, then I can simply convert to that space using Absolute Colorimetric and I'll get a match to the original art when viewed under D50 light. There's no shifting of colors due to the difference between BetaRGB white and paper white in this absolute in-gamut case. The D50 colors are converted into printer space as accurately as they can be. So my mind naturally thinks of Lab values as D50. I have Photoshop conversion set to Absolute in color settings so the info palette Lab values I see are D50, and my i1pro measurements of printer patches and camera target patches are always D50 Lab. When some of an artwork's D50 colors are outside the gamut of a printer space, I have a variety of ways to bring them inside the space depending on what colors are outside and to what extent. So I think I see why I was confused about your wanting to compensate spotread Lab values for paper white. We're looking at how to use Lab from different perspectives. I'm always thinking in terms of absolute colors and D50 Lab is my standard. I know what all my paper whites and blacks are in terms of D50 Lab, but I don't ever change Lab in my mind to be those different printer spaces. Doing that would be confusing to me. - Brad From: argyllcms-bounce@xxxxxxxxxxxxx [mailto:argyllcms-bounce@xxxxxxxxxxxxx] On Behalf Of robert@xxxxxxxxxxxxxxxxxx Sent: Sunday, November 02, 2014 12:33 PM To: argyllcms@xxxxxxxxxxxxx Subject: [argyllcms] Re: Question regarding White Point and spotread Hi, yes, if I use Absolute rather than Relative the Lab value changes (but stays the same in Relative ? providing, of course, that the color is in-gamut). The reason for this, I think, is that since the white point is not shifted in Absolute, all the colors will get shifted, even those that are in-gamut. For example, if I take a color with Lab value of 50, -8, 48 and convert it with AbsCol the values change to 51, -8, 51 so the print will be more yellow. As the spotread on the paper white gave 97.74, 0.2, -0.59 this makes sense (L is increased, a is presumably decreased but we?re not seeing it because the figure is rounded, and b is increased). Actually, I think the way that AbsCol is described (that is that the white point is not shifted) is very confusing to common mortals like me. What really happens is that the destination white is matched to the source white. If the conversion is from working space to print, all colors will be shifted towards yellow if the working space white is yellower than the print white, as in this case. I have to say it surprises me a bit to find this out for the Canson Baryta because I would have said that it is a yellowish paper. But it does have some OBAs, and perhaps that?s throwing out the readings as I didn?t profile with OBA compensation. >> but when that setting is changed to "Absolute Colorimetric", the reported Lab value in the info box changes to 87 -12 78. If I printed that color and measured with spotread, I would expect to get a close match to the Absolute Colorimetric value. I think if you print the AbsCol values and compare the spotread to the RelCol value ? well, you will to some extent be compensating for the paper white, but you?re likely to screw up the colors, so I can?t see it working. I still think that it is probably necessary to compensate the spotread value for the paper white. After all, the profile does compensate for the paper white ? but spotread has no way of doing this, so it?s reading is almost bound to be wrong (unless the working space white happened to be identical to the paper white, which is very unlikely). With colverify you can normalise the file whites to XYZ, so presumably if you print a test target, use fakeread and then compare the fakeread values to the chartread values the whites will ?align? and the comparisons should be valid. This is the colverify test that (I understand was suggested by Graham): 1. targen -v -d2 -G -f100 iPFTest 2. copy iPFTest.ti1 iPFRef.ti1 3. printtarg -v -r -ii1 -a1.0 -T300 -M6 -pA4 iPFTest 4. cctiff -v -ir -e iPF6400_Canson_Baryta iPFTest.tif iPFTestO.tif 5. move /Y iPFTestO.tif iPFTest.tif Pause Print iPFTest.tif using no color management. 6. chartread iPFTest 7. fakeread -v -Ir iPF6400_Canson_Baryta iPFRef Pause The test results will be in iPFValidate.txt 8. colverify -v2 -N -k -s -w -x -L iPF6400_Canson_Baryta iPFRef.ti3 iPFTest.ti3 >iPFValidate.txt Line 1: First of all we create a target with RGB values ? which is fine, providing these are printed as is, with no color management. Line 3: The target is created. Still fine. Line 4: We now convert the target through the profile using RelCol. Line 6: We read the printed target using Chartread (this is equivalent to using spotread, so there is no white point compensation at this stage) Line 7: We get the Lab values of the target passed through the profile. This is equivalent to using xicclu, I think. Line 8: colverify only gives a valid comparison between the simulated target and the scanned target because of the ?N flag, which normalises the whites. If what I?m saying here is correct (which would be quite a fluke ?), then we need to do the equivalent of the ?N to the spotread data AND to the rendered image data before comparing them. A few days ago I suggested an ArgyllWiki to Graham (which I hope he will pick up on), precisely for questions like these, which are not answered in the Argyll documentation and which really need a color expert to give an answer / solution to. At this point I don?t even know if the command lines I have above are correct or not. Robert ________________________________________ From: argyllcms-bounce@xxxxxxxxxxxxx [mailto:argyllcms-bounce@xxxxxxxxxxxxx] On Behalf Of Brad Funkhouser Sent: 02 November 2014 15:15 To: argyllcms@xxxxxxxxxxxxx Subject: [argyllcms] Re: Question regarding White Point and spotread With a conversion into printer space using relative colorimetric with BPC, I wouldn't expect the Lab value to be the same after the conversion (unless the paper white exactly matched D50 L100 0 0 and the paper/ink black exactly matched D50 L0 0 0). At one point I was really confused by the following... Photoshop's info box data on the Lab value of a color changes depending on how "Color Settings/Conversion Options" is set. I filled an image with 90 -14 87 Lab value (in mode Lab color) then converted to a printer space using relative colorimetric with BPC. When the "Color Settings/Conversion Options" is set to "Relative Colorimetric with BPC" the Lab value reported in the info box is still 90 -14 87, but when that setting is changed to "Absolute Colorimetric", the reported Lab value in the info box changes to 87 -12 78. If I printed that color and measured with spotread, I would expect to get a close match to the Absolute Colorimetric value. Once converted to printer space, does your reported Lab value change with these two different Conversion Option settings? I'm still back on CS2, so yours might be different. Thanks. - Brad From: argyllcms-bounce@xxxxxxxxxxxxx [mailto:argyllcms-bounce@xxxxxxxxxxxxx] On Behalf Of robert@xxxxxxxxxxxxxxxxxx Sent: Sunday, November 02, 2014 7:41 AM To: argyllcms@xxxxxxxxxxxxx Subject: [argyllcms] Re: Question regarding White Point and spotread I?ve repeated the spotread using the scanning rig and the results are pretty much the same. If I do repeated tests after setting a reference, the dE94 starts off at around .005 and creeps up to around .02 over 15 or so readings. Moving the instrument changes the reading up to .25 max (over a 3cm square. Changing to the reflective read adaptor (without recalibrating) doesn?t seem to change things much (still around 0.3 max). Going back to my original question: could the error I?m seeing have to do with the white point? If I measure the paper white using spotread I get a value of 97.74, 0.2, -0.59, whereas xicclu gives 100.000000, -0.000062, 0.000060 for RGB of 1,1,1 (or a dELab of about 2.3). Robert ________________________________________ From: argyllcms-bounce@xxxxxxxxxxxxx [mailto:argyllcms-bounce@xxxxxxxxxxxxx] On Behalf Of Brad Funkhouser Sent: 02 November 2014 12:54 To: argyllcms@xxxxxxxxxxxxx Subject: [argyllcms] Re: Question regarding White Point and spotread Have you spotread the patch 10 to 15 times in succession, to see your measurement variability as the lamp heats up? Also move the read point around on the patch to mitigate small differences in direct reflections caused by texture? And even a tiny difference in instrument height above the patch will change luminosity reading. Is your spotread setup truly identical to strip reading of original target? Are you pressing down more, or less for different readings, etc. When I experimented with all these factors with i1pro, I was (wrongly) expecting near perfection, and was surprised by the degree of variability. - Brad On Nov 2, 2014, at 3:59 AM, <robert@xxxxxxxxxxxxxxxxxx> wrote: Hi Brad, Between print and profiling I left the print overnight (minimum 16 hours). After the spot test I left a couple of hours. I?ve just redone the measurement (so about 16 hours again) and the values are now: 88.01, -13.56, 87.23 (so a bit worse). BTW ? this may (or may not) be relevant: the profile was made using i1Profiler (with 2584 patches) and not Argyll. Robert ________________________________________ From: argyllcms-bounce@xxxxxxxxxxxxx [mailto:argyllcms-bounce@xxxxxxxxxxxxx] On Behalf Of Brad Funkhouser Sent: 02 November 2014 00:59 To: argyllcms@xxxxxxxxxxxxx Subject: [argyllcms] Re: Question regarding White Point and spotread Curious... how long did the inks dry between print and measurement of the profiling target? And between print and measurement of the spot color test? Thanks. - Brad On Nov 1, 2014, at 4:31 PM, <robert@xxxxxxxxxxxxxxxxxx> wrote: I wonder if you would be kind enough to clarify something for me? I?m trying to do a spot color test from a document through to print, and this is what I?m doing (using Photoshop and Argyll): 1. The spot color has a Lab value of 90, -14, 87 in Photoshop. 2. I convert the document to the print destination space (relative colorimetric with BPC). 3. After conversion, the spot color is RGB 240, 247, 52 (or 0.941176, 0.968627, 0.203922). The Lab value from Photoshop is still 90, -14, 87, as expected. 4. xicclu (rel. col.), with the RGB colors above through the profile (forwards), gives Lab 90.33650, -14.520704, 87.115660. I assume that Photoshop is effectively doing the same as xicclu but is rounding the values. 5. I also tried fakeread (rel.col) which gives me exactly the same Lab values as xicclu. 6. I print the image with no color management. 7. spotread gives me Lab values of 88.987, -13.637, 87.268. This is a dE-Lab of about 1.6 compared to the xicclu reading. The dE-Lab error seems too high as I have only just calibrated the printer (iPF6400) and profiled the paper (Canson Baryta, so good paper). colverify has an option to normalise each file?s readings to white XYZ, but xicclu, fakeread and spotread have no such adjustment. I would have thought that the paper white would need to be taken into account in comparing the spotread value to the image Lab value. Should the paper white be measured and the spotread value normalised? If so, how should this be done? I appreciate your help. Robert