The movie industry these days is so focused on resolution that many people forget to consider a major aspect of image specification: color bit depth.
Color bit depth is very easy to understand. Every color pixel data can be (and usually is) stored by separating the Red, Green and Blue intensity values. Since we are talking about digital information, each value can be coded using different byte length. These days, the length generally are 8, 10, 12 or even 16 bits.
An 8bit RGB pixel value would look like this: 01101001 11001010 11110010. So each pixel data is (8×3=) 24bit long.
A 16bit-coded pixel would look like this:
1100110100100110 1110010100110101 1111001001100110
Here, each pixel data is (16×3=) 48 bit long. So a 16bit color depth image is twice the size of an 8bit one. (Of course, without considering the extra bits used for checksum, the header etc…)
In term of color resolution (I hate this term as it can be confused with image resolution), an 8bit file can represent 2^8 different levels of intensity for each primary color (red, green and blue). So, the number of different colors a pixel can display is (2^8)^3 or 2^24= 16,777,216
The industry came up with a very bad (IMHO) way of expressing it. Even on the professional monitors spec documents, it refers the bit depth at the number of color it can represents. For an 8bit monitor, you can usually read ‘16 million colors’. I have seen software representing a 16bit image as ‘trillions of color’. Both are correct, but color bit depth is a shorter and more accurate way of defining an image.
To add to the confusion, some systems refer bit depth at the total number of bit allocated per pixel. So an 8bit (per primary) color-coding is referred as 24bit, 10bit as 30bit, 12bit as 48bit and so forth.
Here is a table of the number of displayable colors depending on the bit depth:
|Bit depth per color||Levels per color||Color resolution|
As you can see, an 8bit color depth system can represents 16 million of different colors. It would be as true to say that the same system can represent (only) 256 different shades for each primary colors.
- A blu-Ray disc is encoded in 8bit.
- Most of LCD display panels are 8bit.
- HDCAM-SR is 8bit too unless you are in 444 (more about this later) which is 10bit.
- The new Apple ProRes 4444 codec is 12bit.
- The HDMI 1.3 specification defines bit depths of 10-bit, 12-bit & 16-bit per RGB color component.
- The ATI FireGL™ V8650 supports 8-bit, 10-bit & 16-bit per RGB color component.
In general, it can be cumbersome or even impossible to know the exact bit depth of a given equipment. I don’t know why manufactures are so reluctant to include it in their specs. For example: I called Apple the other day, as I wanted to have that information for my MacBook Pro and a Cinema Display I owe. After an hour of waiting on the phone (the tech guy had to ask his supervisor), their answer was ‘we guess it is 8bit’. A little surprising answer coming from such a company.
Why so many colors?
One could argue that we don’t need trillions of colors to represent an image, as the eye won’t be able to distinguish them all. This is partly true. The eye is actually more receptive to certain color range (green for instance. This comes from our past of hunting in forests or grass fields). Also, our eyes are able to distinguish more or less ‘details’ on different brightness levels. We see more details in the shaded areas than brighter ones. That is why we usually use gamma (like a logarithmic transfer function) to encode a captured image. That way, we can have more details allocated to the darkest part of an image. More about this in another post.
That said, it doesn’t mean 16bit color bit depth is a waste of space. The extra information can be used in post-production for instance. So a colorist can have a wider range available to tweak an image.
That is why it is very important to consider the use of an image before deciding whether we will encode it in 8, 10, 12 or 16bit. If the image is captured to be later ‘processed’ (like color corrected, used for a green screen, special effects etc) the bigger bit depth the better. But if the image is for broadcasting purposes and so won’t be altered in the future, a 10bit color depth should be sufficient.
Also, I am talking, in this blog, only about motion pictures. If you consider the other fields of image processing (medical imaging or astronomy to name just a few), 16bit color depth can be greatly insufficient.
The Alpha channel
There is another image information besides the red, green and blue information: the alpha channel.
The alpha channel is transparency information that can be carried alongside an image. It is often referred as a ‘mask’.
Let say you create an overlay graphic in After Effect to be inserted on an image (like a lower third graphic or a title). Not only you want to deliver the image with the proper color information, you also want to give a ‘mask’ that will be used to define, on a pixel per pixel basis, if the ‘below’ image will be seen through your image.
The alpha channel is monochromatic and just defines the level of transparency of each pixel. An image with an ‘x’bit of color depth will be accompany with an ‘x’bit alpha channel information. So, let say you create a 12bit moving graphic, each image’s pixel will have (2^12)^4 levels of color information. An image with alpha channel info will be, then, a third larger than one without it.
Color bit depth conversion – Banding and Dithering
As always, when you consider a processing or transport chain (aka workflow) for your image or video, make sure you will have color bit depth consistency.
If not, you will encounter artifacts when converting an image from (downgrading) one bit depth to another. And here comes the problem of banding.
Let say you have a part of a 12bit image defined by 4 different levels of adjacent red (or gray, or any other color group of your choosing). When you convert this image to 10bit, you will divide by 4 the number of available levels. So, in the new quantization, those 4 different levels will be leveled to one. Now, if you have an image that displays a gradient from white to pure red, each section of 4 different red levels will be flattened to just one. So, instead of a smooth transition, you will observe a ‘jump’ from one value to another. A little bit like if you were painting a sunset by numbers (remember those ‘paint by numbers’?).
It will look like ‘bands’ of color. That is why that artifact is called ‘color banding’.
One way to address this problem is to randomize the pixels near the edge of such ‘jumps’ in value. This solution is called dithering. Dithering is a process giving the illusion of more available colors by introducing noise to specific areas of an image. For more explanation, I will refer you to the well done Wikipedia page:
There are many dithering algorithms available. Some of them are quick, other much more processor intensive. And all of them with various results. But keep in mind that dithering is always a ‘trick’ used to improve the appearance of an image.
Be careful at what you are looking
As always, an image is as good as the weakest link in the process. And an image is ALWAYS processed. Just displaying an image requires it to be processed. If you look at a 16bit image on your computer, the image will be read on your hard drive, sent to the graphic card (which has it’s own bit depth and dithering process) then to your display panel (which also has its own bit depth and dithering process). Chances are, you are actually looking at an 8bit image! Same goes for printing.
So, as always, read the specs (or call the manufacturer) and plan your workflow accordingly.
P.S.: As a side note, I want to add that the issue of color bit depth is very similar to the audio world. But they are a little more in luck since, from day one, equipments were clearly labeled.
Copyright © 2010. Jean-Dominique Vandenberghe. All rights reserved