50% Gray in RGB, Lab ang Gray-gamma 2.2: why are different?

Started Jan 15, 2013 | Discussions thread
OP NeroMetalliko Regular Member • Posts: 237

NeroMetalliko wrote:

technoid wrote:

One can certainly do a good B&W correction with a custom tone curve instead of an ICC profile. There really is no difference between profiling with an ICC profile or your own tone curve in B&W. The ICC profile is more standardized and can be used the same way in B&W and color and is widely supported in photo editing s/w.

Yes, I agree, in reality there is an important difference: a custom tone curve in Photoshop (or Gimp) allows for only 16 (17) points of correction (including the first and the last), so you can have a good overall smoothed correction but not an exact point-to-point perfect match over 256 (or 100) patches. I think that this limitation is one additional big advantage for choosing the .icc aproach.

The problem with B&W ICC profiles is finding s/w that generates good ones specifically for B&W.


I thought that the QTR utility could do the job, and this was my starting point, but after some test I have realized that something was not clear to me and I posted here the question regarding the 50% gray mismatch.

Actually, after what we have discussed, I wonder how one can do a BW linearization tone curve printing a gray (K%) equally spaced step wedge and then performing the compensation based over the measured L values. This seems to me to be wrong because of the different gamma of L*a*b* vs gamma 2.2.

What I do is generate a set of B&W patches from (0,0,0) to (255,255,255) (256 patches), print the patches then scan them with an X-rite IO.

So, you print full 256 RGB spaced patches and then you read L* values.

I load the 256 L values into Matlab along with a random printer profile then replace the white black points and 3DLUTs with a smoothed, interpolated table and write out the new profile. It's not too hard to do in Matlab but does require a good working familiarity with both Matlab and ICC profile structure. I wish there were specific programs people could do this with but I haven't found any.

Wonderful, I have no problem with Matlab, I used it a lot in the past, but I have no more access to a Matlab workstation today. And unlucky I have absolutely zero knowledge regarding .icc profile structure.

I'm currently making all the calculations using a PC and Libreoffice Calc spreadsheet (open source Excel equivalent). For this purpose I have spent some time writing a custom importing .xsl filter that allows me to directly load the exported .CxF Colormunki Colorpicker data file (a proprietary .xml format) and import all the data in a pre-formatted spreadsheet. It works great.

Now, due to the fact that I have created a step wedge using 21 L* equally spaced patches (from 0 to 100), and then reading the related L* values of the printed wedge, I can calculate a perfect compensation curve in L* values. The main limitation is that this curve is limited to 16 points 0-100 rounded integers values.

In addition, if the curve is made of L* values this means that, having a source gamma 2.2 image as I have usually), I have to perform a L*a*b* conversion, apply the correction curve, and then convert back to gamma 2.2 before printing. Not so convenient.

So, in order to semplify the workflow, what I miss currently is a mathematical exact relationship between L* values and K% (or RGB) values at gamma 2.2.

In this way I could be able to build the correction curve directly in Adobe 1998 RGB values, giving me the advantage of an higher degree of precision (255 integer values instead of 100 for both axis), and without the need to do the double color space conversion prior sending the file to the ABW driver.

I have searched the net but I have found nothing directly addressing this aspect, so I think that for these early tests I will simply build and use a plain table with all the 256 values listed.

Most of my printing is repro printing, where a print needs to match other art so I use absolute colorimetry a lot. A L*a*b tri-value needs to match it's printed value as close as I can get it. The interesting thing about B&W is that getting high quality profiles is a lot easier because one only has to look at one dimension, the tone curve. 256 patches gives the best possible estimate. A full color set of all possible patches would be over 16 million patches which isn't doable.

I'm interested in seeing what your testing shows.

Yes, the BW correction is adsolutely feasible, a perfect point-to-point compensation over 256 values would be ideal, but using a custom tone curve I'm limited to 16 points, for this reason I have started with only 21 patches.

First results:

printing/reading the L* wedge instead of the K% wedge (with same settings/paper) showed a noticeable difference to the point that I have decided to print the wedge using a different driver setting (neutral-normal instead of neutral-dark) to compare. After comparing the readings I have seen that the target straight line is in between these two settings (for this paper).

At this moment I have to choose the starting setting (I think I will choose the one that minimize the RMS error) and build the related L* Correction curve. I will do the corrected print using the double L*a*b* conversion in order to see if it works for now.

If the results are good I will implement the direct RGB building task (beacause Gimp does not support L*a*b*).

Please, note that In the long term my final target will be to be able to build a full BW .icc profile in any case, and I think that for this purpose I will try to see if using Argyll this could be done (and from what I have seen I think that this could be done succesfully).

This will be the optimal solution, relatively simple, with the best achievable results and, for all Colormunki users, will be the cheapest way too, because is performed by using 100% free tools (LibreOffice, Gimp, Argyll).

Let me know what do you think, and many thanks for sharing your findings, this is really appreciated.
Now I go to build a correction L* curve...

See you later, ciao.


only a short update to resume my first results:

- printing a 21 step wedge L equally spaced (ABW neutral dark) and measuring the printed patches with Colormunki gives me an average RMS error of ~3 (L*), with a max of 2.2 and a min of -4.8.

- after applying a custom correction curve in L* I got an average RMS error of ~1 (max: 0.7, min: -2.2).

The linearization was good but the still not perfect results are mainly due to three interacting aspects:

1) limited number of points allowed in curves tool (16 max)

2) correction values rounded to integers (0-100 range)

3) not so easy predictable shape of the resulting curve (due to probably a cubic spline algorithm I'm not exactly able to figure out perfectly)

- after applying a second correction curve in L* I got a near perfect linearization with RMS error of 0.44 (max: 0.6 and min: -0.9)

Given the above explained limitation this result should be considered really excellent: the L* graph is a near perfect straight line from max black to white, average error was reduced by ~85% and peak errors by ~70-80%.

Next step will be to go for Adobe RGB values based correction curve and/or dedicated .icc profile.

I think that the further developments will be better located in another dedicated thread.

Many thanks for now and let me know what do you think.


Keyboard shortcuts:
FForum PPrevious NNext WNext unread UUpvote SSubscribe RReply QQuote BBookmark MMy threads
Color scheme? Blue / Yellow