"Cinema has no commercial future whatsoever." Louis Lumière to Georges Méliès - 1895

Color depth

Posted: August 22nd, 2010 | Author: | Filed under: Uncategorized | 1 Comment »

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
8 256 16,777,216
10 1024 1,073,741,824
12 4096 68,719,476,736
16 65536 281,474,976,710,656

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.

Some examples:

- 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:

http://en.wikipedia.org/wiki/Dithering

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.

JD

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


Camera resolution and Bayer patterns.

Posted: May 22nd, 2010 | Author: | Filed under: Uncategorized | 1 Comment »

Each pixel of a CDD or CMOS sensor transform the amount of light received during exposure into an electrical level that is then quantized into a binary value. This means that those chips are only sensitive to the brightness component of light and not its chromatic value.

One way of recording color with such chips is to use 3 sensors and two dichroic prisms assembled back to back (sometimes called a trichroic prism).

As you can see on the diagram, after the light enters the prism a first dichroic mirror (F1) separates the blue component and send it to a first sensor. The second mirror (F2) separates the red component and sends it to a second sensor. What remains (green light) hits a third sensor.

A three-chip system is more expensive since you need three of them plus the prism. It also takes more space, especially if you want 35mm size sensors, and is heavier. Finally, you must be certain that the 3 sensors are perfectly aligned otherwise you will end up with some unwanted artifacts.

Yet, the light absorption of the prism is minimal.

The Bayer Pattern

There is another way of capturing a color image, by using a Bayer pattern.

The Bayer filter is applied right on top of the sensor so each ‘pixel’ records only the intensity value of one primary color. As you can see, the Bayer filter has 2 green filters for each blue and red one. This is to mimic the human eye in which the cones sensitive to (what is almost our) pure green are as twice more sensitive to the blue are red ones. We are, then, more sensitive to green information than any of the two other primary colors.

The image coming out of a Bayer sensor contains only one intensity value per pixel.

So, if your camera has a pixel count of 11,480,800 intensity values for each image, it records only 2,870,200 red and blue values as well as 5,740,400 green values.

To recreate a color image, it has to go through what is called a ‘de-Bayering’ process. That process interpolates the other color values of each pixel through an interpolation using its neighbor’s information.

There are different de-bayering processes with different processing loads and time. But you should always use the highest quality de-bayer process available.

Also, a typical Bayer filter absorbs at least two-thirds of the visible light before it hits the sensor. Because of that, the three-chip sensor has better low light capabilities.

People are often over-focused on resolution while forgetting about low-light sensitivity and color depth, which is, to me, far more important and will be discussed in another post.

JD

Copyright © 2010. Jean-Dominique Vandenberghe. All rights reserved