Canon EOS 5D's blown highlight indication

After I'd taken a few thousand pictures using my Canon EOS 5D, I started looking very carefully at the relationship between the way blown highlights are shown in-camera by flashing them on the LCD image, and the true state of the image after loading a camera-produced JPG file into Photoshop. I did this because I thought I'd noticed occasions when the camera indicated blown highlights but they were not in fact blown, and also occasions when the camera did not flash highlights that really were blown.

I then got to thinking "Well, what exactly does Canon regard as a blown highlight"? You see, I have a very clear idea of what I think is a blown highlight: it is any pixel that has any channel at 255. Putting it another way, if for any pixel either R, or G, or B (or any combination of them) is 255 then that pixel is blown. The rationale for that definition is that if one colour is limited in this way, and the other two colours are not, then you're going to get the wrong appearance for that pixel. Specifically, the brightness and saturation will be less than they should be. This is very obvious in the sky, where often the blue channel is limited at 255 and the other two are not. The result, perhaps slightly counter-intuitively, is that the sky appears a darker blue than it really was.

I was able to investigate this further by exploiting a feature of the EOS 5D: if you use your PC to copy any old JPG file onto a flash card, and then put that card back in the camera, the camera is quite happy to treat that JPG file as if it were an image taken by the camera. I've only tried this with images that are exactly the same size as images produced by the camera, but it certainly works regardless of the EXIF information in the JPG file.

So I created a test image using CorelDraw. It looks like this:

The figures along the top are luminance values and are derived from the standard formula: luminance = 0.3 * red + 0.59 * green + 0.11 * blue. All the squares in each column have the stated luminance value.

The first row, headed R, starts out with white at the left, and has G=B=255 all the way across. The R value varies along the row so as to produce the stated luminance. (For example, the R value of the square in the 252 column is 245, because 0.3 * 245 + 0.59 * 255 + 0.11 * 255 = 252.) Thus, according to my definition, every single pixel in the row is blown, but only the left hand one is blown on the basis of luminance.

The second row, headed G, is the same except that G varies across the row and R=B=255 throughout. Likewise, in the third row it is B that varies.

The fourth row, headed grey, has R=G=B all the way across and all three channels vary across the row to produce the stated luminance. (For example, R=G=B=252 produces a luminance of 252, not surpisingly.)

The last row, headed R254, is similar to the first row, except that G=B=254 all the way across and R varies across the row to produce the stated luminance. So the important characteristic of this row is that none of the pixels are blown either according to my definition or according to luminance, except the left hand one which has R=255. (Note: on this row only, the left hand pixel does not have luminance of 255 because to achieve that with G=B=254 it would be necessary for R to be 257 which is impossible.)

Note that I have outlined with a green box on the test image those squares that are not blown; and all the other squares on the test image are blown in two or more channels according to my definition.

(You can see the exact R, G & B values in each square here.)

So, what happens if you load this test image into a Canon EOS 5D and look at it on the 2.5 inch LCD screen in play back mode? Be my guest:-

You can see that the Canon EOS 5D is flashing the first seven columns to indicate blown highlights. Now we can see what the 5D's blown highlight indicator is doing: it works solely on luminance and it regards any luminance value >=249 as "blown".

The Canon EOS 5D doesn't care if one or two channels are at 255 so long as the luminance is under 249. This explains why so often it does not flash pixels that really are blown according to my definition. On this test image there are 27 squares in the first three rows that should be flashing but aren't.

Also, if the luminance is over 248 the 5D will flash those pixels even if all three channels are below 255, thus giving a false indication that a pixel is blown when it isn't. On this test image, there are 12 squares in the bottom two rows that are flashing when they should not be.

This way of showing blown pixels does not meet my requirements. It has flashed those pixels that it ought not to have done, and has left unflashed those pixels that it ought to have flashed, and there is no health in it.

Can you help me?

Do you have a Canon EOS 1D or 1Ds mark I or II, or an up-market Nikon for that matter? If so, download my test image and try it on your camera and let me know how it behaves.

Right click and SAVE AS to download the test image here (1.0 MB).

Please note: I have corrected small errors in this file on May 16th 2006.

To use this, please observe the following points:-

Peter Facey, Winchester, England
Updated 20060616