Bit Depth part 3: 32-bit, HDR and tone mapping
A refresher about dynamic range
My previous article in the Photoshop by the Numbers series introduced the mechanics of 32-bit color coding. Somewhere in that piece, I loosely defined the concept of a “stop”. In the context of digital imaging, one stop simply means: twice as much, or twice as little, light. Light one candle in a dark room, register the amount of light, then light a second one, and you see one stop more light.
A typical monitor supports roughly 8 stops of dynamic range. From black to white, eight times a doubling of the amount of light. Detail is available within these limits. Anything lighter than white remains the same white. Anything darker than black remains black. Detail outside the dynamic range of any device – a monitor, a scanner, a camera, a printer – is lost.
Stops are a common way of defining dynamic range. The dynamic range of anything able to register or show images is the difference between the lightest possible and the darkest possible. Simply said: the difference between white and black.
The sensor of a good camera – say, a modern DSLR – can record more than 8 stops, likely something between 10 and 12. Still a lot less than what the human eye can perceive, which is estimated to be some 20 stops. We may clearly see detail and color in a natural scene, where the camera registers a lot of blacks and whites.
The photographer steps in
Such high dynamic range scenes present a common challenge for photographers: they want to record and reproduce them, with full detail and color everywhere, from the lightest to the darkest areas. The camera probably can’t do it in a single exposure: either highlights are blown out, or shadows are plugged. The solution: make multiple exposures, each capturing detail in areas of different lightness levels. Photoshop or some other dedicated tool can merge these different exposures so that detail is retained everywhere. As we’ve seen, the standard 8-bit dynamic range (8 stops!) is not enough to hold all this highlight and shadow detail. We need more. So this is where 32-bit coding can be employed.
Usually I don’t provide tutorials, but here is one. Assume you have multiple different exposures of a scene and want to merge them into one 32-bit image file. See figure 1 for an example of this, three images just raw processed without further enhancements.
Figure 1: Three exposures of one scene
Here is how to proceed:
Figure 2: Photoshop's representation of the 32-bit file
The numbers of 32-bit
What you see in figure 2 is of course a crippled representation of the 32-bit file. After all, the monitor is still 8-bit. Note the large blown out white area in the top of the image: believe it or not, it is full of detail. To check that, open the Info panel and set sampling to 32-bit (see figure 3). Now move the cursor over the white areas. All three of R, G and B are higher than 1, but different values everywhere. The detail is there, only you don’t see it.
Now that we are looking at RGB values, let’s search for the lightest point of the 32-bit image. Usually, one would do that by using the Threshold adjustment, but that’s not available in 32-bit. Instead, I had to open the darkest of the three original images and search the lightest point there. I did that and arrived at a point right of the middle of the white area. Similarly, I searched for the darkest point in the lightest version and found it at the tractor’s right tire. See figure 4.
Figure 3: Info Panel on the white area
Figure 4: Info Panel for the lightest and darkest points
In the merged file, the lightest point measures RGB 3.532, 3.605, 1.676. That’s not white but yellow, but a few stops lighter than the monitor’s white.
The darkest point is 0.004, 0.004, 0.003. Note that Photoshop does not introduce negative numbers when it creates a 32-bit HDR file like described above. (As I explained in the previous article, negatives are certainly allowed. We could introduce them by all sorts of adjustments.)
Back to 8-bit
Right. So now we have an image that contains the scene’s full dynamic range, but… it doesn’t show well on the monitor, it can’t be sent to a print lab, it can’t even be saved as a JPEG. In order to make it displayable or printable, obviously it must be converted back to 8-bit. All these extra stops of lights and darks must be squeezed into values between 0 and 255. Unlike converting between 8-bit and 16-bit, it is not straightforward how to turn a 32-bit image back into 8-bits. And the reason is… the high dynamic range.
Let me explain why. An obvious, straightforward way to compress the full dynamic range of the scene into 8 stops would be to invoke a Levels adjustment and move the Output Whites slider left until the RGB values of the lightest point of our image have become 1.0 or less. (Remember that the 8-bit maximum value 255 corresponds to 1.0 in 32-bit.)
I just did that, see figure 5 for the Levels adjustment and figure 6 for the resulting image.
Figure 5: Levels adjustment trying to bring the image back to 8-bit range
Figure 6: The resulting image
This doesn’t look good, does it? Forcing the highlights into such a limited range turns the photo into a dull drabness. The whole image is flattened, leaving hardly any detail in the shadow areas. All pixels move closer together, resulting in a lifeless whole. Even after lightening the image it still looks boring. We need something better. A conversion that compresses global contrast into the limited range of 8-bit coding, but somehow preserves local contrast.
What we are searching for is called tone mapping. Simply said, tone mapping is the process of redistributing the tonal values of an image so that detail (color and contrast) is not flattened, but brought out where possible. In theory, the aim is to reproduce what a human has observed. In practice though, many tone mapping algorithms go much further and result in an unnatural, surrealistic look. Shadows/highlights procedures can be seen as simple implementations of tone mapping, but more advanced procedures are of course available and quite popular.
Starting from our 32-bit image, let’s look at the options that Photoshop provides.
Go to the menu and: Image – Mode – 8 Bits/Channel. Instead of just converting, Photoshop shows a big popup window called “HDR Toning” where seemingly a lot of information can be entered (see figure 7).
Well… that depends.
Click the Method drop-down and note that four conversion methods exist. The one with the many options is the default (Local Adaptation), the others either have no options at all or just a few. Let me try to explain the methods, in the order in which they appear.
Figure 7: Photoshop's HDR Toning dialog box
Figure 8: Result of Highlight Compression method
Figure 9: Result of Equalize Histogram method
Figure 10: Possible result of Local Adaptation method
Figure 11: Histogram of figure 10
Interestingly, images like figure 10 are usually referred to as “High Dynamic Range” but in fact they are the results of extreme tone mapping. The histogram that belongs to this very example (figure 11) shows that the dynamic range of this image is in fact greatly reduced to mainly a lot of midtones.
Here is something to think about. Imagine we start with one of the flatter versions, say figure 8. It’s in Photoshop, 8-bit and ready for further processing, right? What about giving it a rather aggressive PPW treatment? Can we make it look better than figure 10 or not?
Gerald Bakker, 29 April 2017
Photoshop by the Numbers