The curve is dead, long live the curve – the linearization game, part 3

After observing a bit of a problem with a lack of linearization and setting myself up for embarking on the effort of linearization, it’s time to describe this actual linearization process itself. It’s going to be a dish with inkjet digital negatives as the main ingredient, broiled in a broth of GIMP with generous lashes of Excel and a good whiff of intuition, topped off with some guesswork for good measure. It’s going to be a bumpy ride!

Right, let’s reiterate the problem statement in one picture to save us the dreary thousand words:

Non-linear CMY curves before linearization

Behold the messy curves I ended up with before linearization. Basically it’s all shadows until everything takes off like a rocket, and then each curve (yellow in particular) poops out in a nasty shoulder. Let’s make this into a fairly straight line.

Well, the concept is pretty simple. I’m going to print a set of greyscale bars using each of the carbon tissues, perform some measurements on those, record all that in Excel, chart it up to see how we’re doing, and then figure out what kind of compensation needs to be applied to the digital negatives in GIMP to get a more linear outcome. This, in a nutshell, is the entire story. And it really is as straightforward as this, give or take a few mishaps here and there and some inevitable trouble with GIMP not always playing a straight game (see part 2 for some lamentations on my behalf).

Just to remind you from the previous installment, this is the greyscale bar chart I used for this exercise:

Greyscale bars for linearization

I printed this onto Fixxons transparency film for digital negatives, initially without any linearization curves applied. The result, done for just a black tissue (which I started testing with), looked something like this:

Pre-linearization output on a black tissue

There are some oddities in here, so let me explain briefly. Firstly, what are we looking at? Well, the grey diagonal plot is just a 1:1 curve – I would have gotten this if everything would have been perfect right out of the box. Which is a pipe dream, so it just serves for reference here to show how far I’m off. The blue and the orange curves are more or less the same. The blue one is are the actual density measurements from the carbon print, but normalized to a 0 – 100% scale. I took these measurements by simply scanning the carbon print and then using the color sampler tool in GIMP to do my measurements. I only recorded the L measurement from the Lab scale, since it represents lightness, which I use as the proxy for overall density. This is what my actual data table for the plot above looked like:

Actual data table. For explanation of the columns, see text below

The left column is the input density – actually, it’s the inverse input density, but whether I let this range from 0 – 100% or from 100% to 0 doesn’t really matter. I picked 0 – 100% because it makes for a curve plot that looks similar to what you get in GIMP or PhotoShop. The second column is the actual L measurement I took from each bar on the scanned carbon print in GIMP. I used the color picker with a sampling average of the biggest square that would reliably fit within the bar width so that I could even out any pixel-level errors. There was still some variation if I repeated the same measurement in different places of the same bar, but I didn’t bother averaging such consecutive samples. Ideally, I should have, but really, there’s always going to be a little bit of non-linearity and I think it’s good to decide when to give it all you’ve got, and when to satisfice and cut some corners. Here, I did the latter.

The third column is the lightness/L measurement, but normalized on a 0-100% scale. Note that this makes these measurements unfit for absolute comparisons against some standard, or between each other when comparing e.g. different color tissues – or even comparisons between repeated tests within the same color. Basically, I didn’t measure if the deepest black I printed on the first test was the same as on the second, etc. I just assumed they would be provided decent control in the entire tissue-making and printing process. What this normalized value does allow is to make comparisons between curve shapes – and that’s exactly what I was after. Columns four and five are oddballs and I didn’t pursue them any further after a first test. They were part of an attempt to capture the curve shape in a mathematical formula (I included it in the plot; you can still see it there) because it looked – well, kind of too neat to be true, in a way. However, there didn’t appear to be much practical value in trying to parametrize the curve shape beyond satisfying my curiosity.

Well, long story short, based on the kind of plot shown above, I could decide what kind of curve shape I should apply to the negative to counter the non-linearities in the plot. In essence, the curve you’d apply to the negative is the exact inverse of the output curve you get in the print. In other words: by inverting the non-linearities of the real-world printing process and applying that as a correction onto itself, you should end up with a perfectly linear output.

Example linearization: orange is the actual printed density range, showing a severely sagging curve. Its inverse (blue plot) is the correction curve that, if applied to the digital negative, should linearize the output.

That’s the theory. In practice, it takes a few iterations in my experience to get a decent outcome. The main issue is that if the non-linearity is as severe as in the example shown above, the measurements especially towards the extremes of the curve tend to be far too unreliable to act as a basis of a decent correction. Note how the shadows up to around 20 on the x-axis remain pretty much in the murky depths of dmax, so we just don’t have much useful linearization data there. Instead of trying to do it first time right, I tried to do the best job I could on the first go, printed another test, and then tried to work away the remaining non-linearities in that version.

Sadly, the trick of inverting the output of the printed density and using that as the linearization curve only works the first time. After that, you would have to put a second correction curve on top of the first one in GIMP to include the correction readings from the second iteration. In practice, that is (1) very cumbersome, especially if you end up with more than two curves per color you need to apply and (2) it turns out that what essentially amounts to stacking curves on top of each other in GIMP just doesn’t work well. GIMP itself has some non-linearities in how it applies curves, and moreover, the different curves effectively multiply instead of adding on top of each other, causing very small errors in one adjustment curve resulting in dramatic density differences in the final print. In other words: I found that it’s actually easier (albeit less precise, in theory) to create one adjustment curve, and then adjust that adjustment curve on the basis of iterative measurements.

For instance, this is what an adjustment output somewhere halfway the linearization effort for the magenta curve looked like:

Iterative curve adjustment example; explanation, see text below

The orange plot was the density measurement I got from the previous test iteration. Based on this, I made a correction curve, and that resulted in the blue density plot in the present iteration. Inverted (the grey plot), this gives an impression of how the correction curve needs to be adjusted to achieve a more linear outcome. Note that in this case, I didn’t just apply the grey plot as a correction curve itself. I only used the shape of the grey plot compared to a straight diagonal to determine where I needed to lower or raise the existing adjustment curve a bit to make the output more linear. This part contains a fair share of guesswork and eyeballing, and hence, it’s not a very exact approach. This is what a couple of iterations of the magenta correction curve actually looked like:

Several versions of the magenta correction curve: version 2 in blue, version 3 in orange, version 4 in grey.

Here are the actual density output plots accompanying those curves:

Accompanying output density plots for versions 2 through 4 of the correction curves shown above. Blue is version 2 output, orange version 3 and grey version 4.

Note how I overshot the target when going from version 2 to version 3 in the correction curves above. But having the combination of the version 2 and the version 3 curve, I could then determine fairly well what kind of adjustment I needed for version 4 – namely, I could work out quite nicely that the shadow density (at the 10% and 20% steps) would have to fall pretty much halfway in-between the version 2 and version 3 curves. By applying this kind of logic, I could work out the 4th version of the curve, resulting in a pretty linear output.

I made many of these. Very, very many…

I did the process above for all four colors (CMYK) and got the following correction curves:

Correction curves version 4 for C, M, Y and K; plot colors represent tissue colors

Note a couple of things in the correction curves above:

  • Black actually is close, but I’m still working on that one. Motivation is kind of low because I’m not sure how to handle the black/key layer in the CMYK stack anyway, so I’m kind of winging it in terms of pigment concentration etc. I’m focusing my efforts on CMY instead. Those are pretty much complete….at least for now. See below for more comments.
  • The yellow correction curve is nearly linear. For some reason, with the yellow tissue, input negative density is more or less output print density, give or take a little bit. I don’t know why, but apparently the yellow pigment used here, and in this particular concentration, compensates for the non-linearities in the process. Fact of the matter is that so many variables interact, that it’s virtually impossible to explain in detail how you end up with a particular curve shape. I just observe, correct and marvel at the results, mostly.
  • All curves have their basic shape in common. There’s a steep bump in the lower corner, which represents the transition between paper white and the lightest highlights in the print. Then things follow a sagged curve and get quite steep (for magenta and cyan) in the top right, which represents the shadows in the print.

A few things are worthwhile to comment on a little more. If you look critically at the set of correction curves in the previous picture and the correction curves I presented in the earlier examples, you notice that they don’t match up very well. In fact, they are almost opposites. I put this down to the fact that somewhere halfway my testing, I switched to the current light source I’m using, having used a single LED panel at close distance before. I suspect that the light source, and particularly the distance between the light source and the contact frame in combination with the inkjet dots on the digital negatives create this awkward change in print curve.

The problem, I think, is that at close distance, there is considerable dot gain occurring on the digital negatives, which becomes less as the distance between the light source and the print is increased. But I admit I haven’t thought this through entirely and I certainly haven’t done any rigorous testing on the matter. All this does underline at least for me that inkjet digital negative aren’t entirely optimal. Frankly, I still consider the whole inkjet printed negative business as the weakest link of the entire process, and something I’d rather do without. But the alternatives aren’t exactly attractive either…

The other issue is the tricky bit at the start of the curve: the extreme highlights in the print. You might notice that in my test bar pattern, I start at 10% density and basically ignore everything between 0% and 10% density in the print. Well, not really, because I do have a continuous gradient on there for visual/subjective reference, but I don’t do any measurements on it. This might not be such a great idea, but it’s also not something that would help me much if I were to put a lot of effort into it, I think. Fact of the matter is that the extreme highlights in a carbon transfer print are kind of difficult to get right, and I first want to see what happens if I don’t fuss too much over them. If that doesn’t pan out, I’ll likely choose a different route than to try and get them to print well using a single continuous tone layer. I think I’d be better off using a separate highlights layer for each color (but: lots of work…) or convert to halftone screen negatives (but: how to pull that off with regular home/office equipment).

Well, at this point, shouldn’t we revisit that example I shared in part 1 of the color checker that came out looking kind of bold? Yeah, this one:

Color checker with rather bold colors. Because saturation is the name of the game…

Well, I decided to print another one with the present tissue version and the linearization curves I’ve been working on. Here it is, again without a key/black layer:

Decidedly less bold color checker

The difference is exaggerated a bit (well, lots…) because of the increased contrast of the first image compared to the second. That is, digitally increased contrast. In reality, both prints do have different contrast as well, but not as extreme as shown here. The bottom one is more true to life, actually, and it shows vastly more muted colors. It also shows a more linear range on the C, M and Y bars to the right – although the scan obfuscates much of the linearity that does show in the real print. Now, the colors are still problematic, but one thing has improved for sure: there’s now also room for some more subtle hues.

Earlier color checker (left) and one with linearized curves and lower pigment load (right). These are the prints shown in the separate images above; note how the differences are a little less extreme than the scans suggest – but they’re still very real.

Well, perhaps things are a bit too subtle, indeed. Because looking at the actual print, it does seem that I may have gone off the cliff a bit in terms of pigment density. I thought I could get away with much less pigment in the tissue than I used before, but perhaps, this was overdoing it (or rather, underdoing it) a bit. Moreover, there is a rather severe problem with color balance: while pure cyan and magenta print OK-ish, all mixed hues are pretty darn yellow. The ‘blacks’ are also some kind of reddish orange, and well, basically the whole color balance thing is a mess. Which means that I really have to look into the pigment ratio issue, which I already alluded to before. And this is probably going to involve redoing a lot of work…but hey, such are the woes of those who work in a haphazard way!

Leave a Reply

Your email address will not be published. Required fields are marked *