Tuesday, 19 February 2008

2005_01_01_archive



Color correction in linear vs. gamma corrected space

A brief example of how simple color corrections behave differently in

linear floating point space than in display-corrected space.

image 1

A big reason we color correct with gamma when working in clipped color

spaces is that we want to avoid flattening out white parts of the

image. This is a valid concern.

image 2

This image is color corrected by multiplying the channels against

constant RGB values. This is probably the simplest way to color

correct an image, and here the results are quite poor. Subtly poor in

how the tonal range is made inconsistent across light and shadow, but

profoundly poor in the flattening out of the highlights.

image 3

This image shows roughly the same color correction, but using gamma.

Because gamma correction does not affect white, the correction looks

much more pleasing. There is also a pronounced contrast change in the

image, which some may also consider pleasing, but some may wonder how

they could avoid.

Images 2 and 3 were CC'ed in video space, or the raw, uncorrected

pixels that we both store and display.

The next two images are CC'ed in eLin. They have been converted to a

linear color space and the detail in the blown out window has been

preserved.

image 4

Here is a similar gamma correction to the one used in image 3. As in

image 3, white remains untouched. But two problems have arisen.

Firstly, the linear color space reacts even more abruptly in the

contrast and tonal range than the video space image did. The shadows

get blocked up and the saturation and contrast changes quite a bit

with our adjustment.

but more insidiously, note the darkening layer that I have placed over

the window. As with image 3, white remains untouched by the gamma

adjustments, But above white we have done a very surprising thing --

we have inverted our desired tint.

In this graph of the gamma, or power, function, it's easy to see why.

As the gamma curve bends the midtones up and down, it remains pinned

at white and pivots there, causing the values above white to go in the

opposite direction. So as we gammaed down blue and green, we were

pushing values in those channels above 1.0 through the roof!

The scary thing here is that you might not see it at first, and you

would go on about your business until you layered something over your

windows, or darkened them with some other operation.

image 5

Here we are back to our simple multiplying of the RGB channels, but

now we are in linear space with overbrights. Note that we have tinted

the image warm without blocking up the shadows, changing the

saturation, or altering the contrast of the image. Note as well that

the overbright areas react in a very lovely way to the CC.

It's true that when you compare 5 to 3, you may find that some of the

"downsides" of the gamma correction in vid space are visually

pleasing. The enhanced contrast and variation across the tonal range

look a bit sexier than the clean and flat tinting in linear space. But

it's important to be able to color correct at a very simple level

without getting all this extra artifacting, and this is very

challenging in vid space. But in linear floating point, it's no

problem at all to add contrast in after a CC.

The other caveat is that we started with an image that had overbrights

(an EXR file). Had we not had this extra information in the windows,

image 5 would have the same clipped look as image 2.

It's not that you can't ever use gamma correction in linear floating

point -- you just have to be careful. I've found that in linear space,

gamma should be the last thing you adjust, not the first, and this is

very different than most peoples' current experience in clipped vid

space.

Comparotron2000(TM):


No comments: