Linearising Fine-Art Monochrome Prints
May. 28th, 2007 12:37 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
From SarahWiki
For some time now, I've been using an Epson R2400 to produce fine-art monochrome prints, with results ranging from sadly lacking to outstanding. The problem has been consistency -- though in colour mode, I've had good results using the standard profiles, in advanced Monochrome mode, the closed loop between what's shown on the screen and what ends up on paper is broken. Generally speaking, my prints always ended up way too dark, so I'd end up creating gamma curves manually in Photoshop, looking something like this:
Simple adjustment curve -- not really good enough
With a few manual tweaks and iterations, I could generally manage to get a decent print, but it was a frustrating and annoying process. It was particularly disheartening to get something that really sings on the screen and just never quite manage to translate it into a print.
This is something that has been bothering me for quite some time now, though until now I've not really been able to come up with an adequate solution.
The problem
Put simply, the problem is that the curve that maps image information to the brightness of pixels on the monitor isn't sufficiently similar to the curve that maps that same information to ink on the paper. I knew I wasn't going to be able to attack this conventionally and still be able to use the Epson's Advanced B&W mode, so I decided to come up with an engineer's hack.
The conventional way to address this is to have a monitor profile that maps from the image's colour space to the monitor's colour space, and a printer profile that does the same thing in the printer world. A bit of maths, and you end up with a glued-together transform inside Photoshop that results in the correct colours on the page. My hack is basically to leave all of that machinery alone, let it do its thing, then come up with a way to map the errors in such a way that this could be used to fix the problem.
My first thought was to write some fancy software, and maybe even to build my own screen/print densitometer from scratch, but happily I figured out an easier, if slightly laborious, way to do it.
The solution
The first step was to make a grey scale ramp that covered the full 0-255 range in steps of 1. I actually created this with about 50 lines of Java code, but there's no reason other than impatience that's why I couldn't (far more laboriously) have constructed it in Photoshop or Illustrator directly.
Monochrome ramp target
(The full-resolution version can be downloaded here, should you want to try this for yourself: bwtarget.png)
I then loaded this into Photoshop, and made a letter-size print on my usual Epson Premium Glossy with all my usual driver settings. Next, I fired up my Bronica/Megavision camera and photographed the target image, being careful to make sure that the lighting was uniform and that no reflections were noticeable. I had to set the camera's contrast as low as it would go with full bit depth, but I managed to find an exposure that accommodated the full-black and the full-white squares without clipping. Keeping exactly the same camera settings (varying only aperture), I photographed the same target on the screen, opened in Photoshop.
Test images
These are the images I got -- you can tell I didn't put a tremendous amount of effort into it, other than being careful to avoid reflections (hence the slight angle on the print). Using the Photoshop crop tool in perspective mode soon yielded a couple of usable versions:
Cropped versions
At this stage, comparisons between these results aren't really valid, because the white and black levels aren't lined up. We need, in effect, to do the by-hand equivalent of a relative colorimetric mapping, so the best place to start is to extend the range of both of those images by applying levels layers:
Levels-adjusted versions
The levels settings were carefully tweaked to leave the top-left full-black square at or very close to 0, and the bottom-right full-white square at or very close to 255, but without clipping. It's essential to get this right. From the above, it's clear that there isn't a huge difference between the images, but the print target is definitely noticeably darker.
OK, here comes the stunt. You now need to pull all of this into a single photoshop file, ideally using adjustment layers, looking something like this:
Structure of Photoshop file
I've grouped everything relevant to the print images into one folder, and everything relevant to screen images into the other. Having the print images at the top is important. The levels laters you can see are the ones created that were mentioned above. In the print folder, and extra curves layer has been created -- we'll come back to that shortly. The directory containing the print files has been given a layer mask -- basically, this is just a series of vertical stripes, making it possible to look at both targets at once, butted up against each other, so you can visually get an idea of how they differ. You should end up with something like this:
Unadjusted 'vertical blinds' image
It's now immediately visually clear that the two ramps don't match exactly. In some places they are pretty close, but in other places they are way off.
Now, we go back to the curves layer created in the print folder -- the trick here is to manually tweak it as accurately as you can, trying to get the two ramps to line up so that you can't see the changes in tone. I ended up with a curve like this:
Correction curve
which gave me a somewhat better match between the ramps:
Unadjusted 'vertical blinds' image
Notice that there are still a couple of areas that aren't perfect -- it's possible to go a bit too far with tweaking, generally if you find you're creating too big a spike in the curve it's probably due to some artefact of the test images -- in my case I think I still had a small reflection in the black area, so I chose to let this be and kept the curve smoother there.
It was a lot of work, but we've now got a curve that you can save (hit the 'Save...' button in the Curves box) and apply to pretty much any image. The way to use it is very simple: keep it turned off while you are working on the image on screen, then turn it on immediately before printing the image.
Getting a bit fancier
The method described so far certainly works very well, and I've had a few very nice prints from it so far. Being a bit of a glutton for punishment, I wanted to take this a bit further so I could create a proper transfer curve that I could type into Photoshop and thereby not have to deal with an annoying extra curves layer. Doing this is straightforward, but a little laborious. Start by opening the curves box for the adjustment curve. You'll probably want to make the box big (click the icon in the bottom right corner if you have the small version displayed). You'll also need to set the grid to 10x10, rather than the default 4x4 -- to do this, hold down Alt (or its Mac equivalent) and click once in the grid area.
Next, you need to start taking down some numbers by carefully measuring the curve. The idea is to measure the height of the curve at each 10% horizontal interval -- to do this, start with the first grid line on the left and hover the mouse over the exact pixel where the curve crosses the grid line. The Input and Output readings should track the movements of the cursor -- if they don't, close and reopen the curves box and try again. Write down the number shown for output for each grid line, e.g.
Grid Line | Output |
0 | 0 |
1 | 17 |
2 | 52 |
3 | 90 |
4 | 115 |
5 | 134 |
6 | 160 |
7 | 185 |
8 | 218 |
9 | 237 |
10 | 255 |
Turning this into a set of numbers that you can type into the transfer curve box in the print dialogue is a little laborious. There are two problems -- the numbers here have a 0-255 range, whereas we actually need a 0-100 range. Also, we have numbers that increase with brightness, whereas we actually need numbers that increase with the amount of ink (i.e. that decrease with brightness). Doing this is easy enough. First, divide by 2.55 to get to the 0-100 range, then subtract this result from 100 to get the ink level. This now gives something that can be typed in directly:
From | To |
100% | 100% |
90% | 93.4% |
80% | 79.6% |
70% | 64.7% |
60% | 54.9% |
50% | 47.5% |
40% | 37.3% |
30% | 27.5% |
20% | 14.5% |
10% | 7.7% |
0% | 255 |
Note that the 'from' percentages are in reverse order, because they are based on ink density not brightness.
Once you've created the curve, save it, because Photoshop will zero it out if you change the print settings significantly so you'll need to be able to reload it later. Comparing prints made with this technique to those made by the (ostensibly slightly more accurate) adjustment curve layer shows them to be extremely similar -- if anything, I prefer the transfer curve results, perhaps because the inherent smoothing out of the transfer curve looks somewhat more pleasing even though it might be slightly less accurate.
Conclusions
Using this technique, I seem to (at long last) be able to go from an on-screen visualisation of an image to a print that basically retains the same tonal quality quite repeatably. Of course, no print ever looks exactly the same as its on-screen equivalent, but the important thing to take away from this is that if I can get something to really 'pop', glow, look three dimensional, whatever I'm trying to achieve on screen, really, this technique greatly increases the chance that a print will possess the same qualities.
(no subject)
Date: 2007-05-28 11:18 am (UTC)the only step i wonder about is taking a picture of the printout indoors. i don't know anything about the logic inside digital cameras, but do they adjust for brightness/contrast? if they only adjust linearly, you're fine, but if they have a levels curve that can change shape, then you'll have problems.
maybe if you take pictures in raw format?
(no subject)
Date: 2007-05-28 11:33 am (UTC)(no subject)
Date: 2007-05-28 04:12 pm (UTC)(no subject)
Date: 2007-05-28 04:23 pm (UTC)I was using a scanner as data source, equating max and min black, and then linearizing inside that range, mostly, and that was working quite well for what I wanted.
(no subject)
Date: 2007-05-28 05:03 pm (UTC)(no subject)
Date: 2007-05-28 05:05 pm (UTC)(no subject)
Date: 2007-05-28 05:15 pm (UTC)Though my gear is quite nontraditional, I do have quite a traditionalist approach to the presentation of my images -- I like glossy prints with deep blacks, neutral tones, lots of sharpness, good contrast, etc. The R2400 with Epson Premium Glossy paper is quite remarkably good, actually -- my current results are way better than anything I ever managed in a wet darkroom. It's been a lot of work to get that far, of course, but I think it's worth it!
(no subject)
Date: 2007-05-28 05:09 pm (UTC)(no subject)
Date: 2007-05-29 05:02 pm (UTC)(no subject)
Date: 2007-05-29 08:48 pm (UTC)(no subject)
Date: 2007-05-30 04:29 pm (UTC)(no subject)
Date: 2007-06-13 02:59 am (UTC)I was just wondering if your ideas overlap the patents held originally by whitehead/University of British Columbia http://www.physics.ubc.ca/ssp/ssp_impact.htm.
http://66.102.9.104/search?q=cache:xnkBYCv1yGsJ:www.brightsidexdr.com/people.php+Dr.+Lorne+Whitehead+hdr&hl=en&ct=clnk&cd=2&client=firefox-a
just thought you might be interested