More Than a Bit of a Difference: 8-bit Versus 16-bit
If you've been learning about digital imaging, whether by shooting with a digital camera or by scanning your film images, you've probably come across the concept of 8-bit and 16-bit images. Support for 16-bit editing seems to be all the rage these days, especially since the release of Photoshop CS. Even the new Photoshop Elements version 3 supports many 16-bit operations. Given that 16-bit images are by definition twice as big as 8-bit ones, you may be wondering why anyone would even want them.
An 8-bit RGB (red, green and blue) image uses numbers from 0 to 255 to represent each constituent color, or "channel" in the image. Zero is the complete absence of that color while 255 represents the maximum amount of that color. Thus, a value of (255,0,0) represents pure red, (0,255,0) would be pure green, (0,0,0) and (255,255,255) would mean pure black and pure white respectively, and so on. Zero through 255 gives 256 total distinct values that each of these three channels can have. If you multiple 256 times 256 times 256, you get 16.7 million different combinations. That's a lot of different colors, hues and shades.
Or is it?
The problem is that nearly everything we do in the process of editing an image causes us to lose data. If an image is a bit underexposed and lacking in contrast, it may only use values between 0 and 199 perhaps (200 out of the possible 256 values). We can help fix things by spreading those values further apart so that they range between 0 and 255 instead of only 0 and 199, but we have no way to invent new values to fill in the resulting gaps. We still only have 200 discrete values; we've just moved them around to stretch all the way to 255. Worse yet, they are no longer evenly distributed. They can't be, in fact, since all we have are integer values and not fractional ones (we can use, for example, 128, but not 128.5). We'll still have 56 unused values just as we did to begin with, so about every fifth possible value will be left unused (56 out of 256 is about one fifth). Shown here are some sample values and what they will end up being after we stretch the range to 255 instead of only 199:
|| Error from Truncation
I've only shown a few values above, but you can see that information has been lost through truncation on most of them. Indeed, if we add things up over all 200 values, we find that the error introduced totals 99 in this example. That's a lot of lost information. Any edit that affect the tonal range or contrast of an image will do this. What may have been a smooth gradient in the original is no longer smooth. The inset image here shows an enlarged view of the Photoshop Levels display from making exactly this adjustment on an 8-bit gradient image. The gaps from missing data points are clearly visible. We may not notice the problem in the image itself from this one single change, but every time we do this we lose more and more information. Eventually, it will start to show in the image, even to a casual observer. If you've ever noticed a banded or striped sky in an image, you've seen the end result. Edits that reduce the tonal range can actually end up with previously distinct values collapsing down into a single value through truncation. If we later expand the range again, those missing values won't come back — they are gone forever. Clearly, we have a problem here.
By contrast, a 16-bit image provides us with 65,536 values for each channel instead of only 256. Multiplying this number by itself three times over gives us an astronomical 281 trillion total possible colors. The file will now take twice as much space of course, but that space clearly gives us a lot more information. But what is that extra information used for, and what good does it do us?
At first glance, it might seem that it would give us greater dynamic range. Instead of having to stop at 255, we would be able to go all the way up to 65 thousand, giving us the ability to represent brighter whites and more saturated colors. This isn't the case though. Instead, the extra values represent additional accuracy, rather than additional range. Think of them as being fractional values: we now have 255 additional values between each of our 8-bit values.
As we edit in 16-bit mode, we will still lose data, but much less than before. Better yet, since we will eventually print from 8-bit (all standard print drivers are 8-bit), we have lots of extra information to go around. We can afford to lose a fair bit of information and still have enough left over to print from. So long as we are left with at least one discreet value out of every 256, we can collapse things down to 8-bit with all data points properly accounted for. Performing the same edits we did on our 8-bit gradient, but this time on a 16-bit version gives a much improved Levels display as show here. Presto: no more gaps.
The moral of the story is that editing in 16-bit is a good thing. Photoshop CS supports most everything you need in 16-bit mode and the new Elements 3.0 is even getting in on the 16-bit bandwagon. If you've been looking for a reason to upgrade from an earlier version of either, this may be it.
As a side note, you may have wondered about RAW (NEF) mode on Nikon cameras that produce 12-bit files. In case you haven't already guessed, the concept is the same, but you only have 4,096 values instead of 16 thousand. Still a lot better than only 256 data points. Photoshop CS and Elements 3.0 can open the resulting file in either 8-bit or 16-bit. If I were you, I'd choose 16-bit.
As another side note, you may also have heard of 24-bit and 48-bit images. These are actually just 8-bit and 16-bit images under another name. Instead of counting the number of bits per channel, they are named after the total number of bits in all three channels together. Thus, both are off by a factor or three (8 bits per channel times 3 channels = 24 bits total, and 16x3 = 48 bits). If only there were a clearer standard about how to name things, but there you have it.
Update 12/04/2007 - Progress marches on: the new Nikon D3 and D300 allow you to create 14-bit NEF raw files.