April 7, 2012

LumoLabs: Nikon D800 video function demystified

Nikon D800 FX mode 1080p video frame (click for original size)
The Nikon D800 full frame SLR camera has created a lot of buzz recently. Some would call it hype. While it is clear that its 36 MP still resolution is pretty much unparalled in the 35mm camera class, the final verdict about its video subsystem is still out. Esp. in comparison with Canon's 5DmkIII.

One point of interest has been how either camera actually creates its video frames. I now had a chance to apply LumoLabs' testing methology to a loaner D800 camera and figure it out for 1080p video in FX mode. I am having a look at live view performance too.

You may jump to the conclusion at the end if you just want to read what we found, igoring how we did it :)

Nikon D800 FX mode FullHD 1080p video

The title image shows one frame from a 1080p video taken with the Nikon D800 (in FX mode, it supports a number of crop video modes too). It shows a zone plate test chart which can be used to perform a sampling error frequency analysis.

Please, read to learn more about the testing methodology incl. access to the original of the test chart allowing everybody to replicate my analysis.

There is a bit of (gray colored) moiré from the printing process. This is because scaling and printing of zone plates is a non-trivial art in itself ;) You can actually measure the printer's native resolution by inspecting the printed zone plate chart. Below, you find a photograph of the print (in 14.6 MP resolution) allowing you to determine what moiré patterns are from the printing process actually.

Printed zone plate chart (still shot with a 14.6 MP camera, for reference)

However, all colorful moiré patterns are artefacts introduced by the D800 video system. It allows us to precisely measure how it works. Let's have a close look at the one of the two center discs:

Analyzed region of interest in the D800 video frame

The big discs are constructed such that the 1080p Nyquist frequency emerges at its outer circle. The two center discs have their edge at twice this Nyquist frequency and the four tiny discs at four times this frequency. Therefore, the false color moiré disc emerges at (149px/258px x2) or 1.155x the 1080p Nyquist frequency (1247 px). This means that the Nikon D800 samples ~1247 horizontal lines from its sensor.

Now, let's make a back-of-the envelope calculation:

An FX frame in video mode is taken from a 6720 x 3780 px region (which actually is a 1.095x crop from the full 7360 x 4912 px frame (this information is from the Nikon user guide, translating physical dimensions into pixels). Because 3780 / 1247 = 3.03 and because 1% is our measurement error, we have proof that the Nikon D800 samples every third horizontal line from its sensor.

A second result is that the ever so slightly color moiré for horizontal frequencies disappears at the Nyquist frequency. The D800's AA filter is effective here, the remaining moiré is from the printing. The D800E would have a bit of additional color moiré here, but by far not as strong as in the vertical direction. So, I believe that the Nikon D800 samples every vertical row from its sensor.

Below is what I believe how Nikon implemented line skipping:

Likely D800 sensel sampling matrix

and here is a slightly more symmetrical scheme which I cannot entirely exclude although I think it isn't used in this mode:
Unlikely sensel sampling matrix
If you look at the likely sensel sampling matrix, you'll see that all sensels which are read out (the ones with a color) result in a new RGGB Bayer matrix of sensels. Which has the advantage that a standard demosaicing algorithm is applicable to create an RGB frame.

This is similiar to what the Canon 5DmkII did actually. However, there is one important aspect where the D800 is different:

A native 1080p video frame is 6720 x 1260 px, demosaiced to a 2240 x 1260 px RGB frame.

And the final 1080p video frame is further downsampled 7:6 to 1960 x 1080 px which gives the D800 a slight edge in resolution and edge flicker behaviour over a 5DmkII.

High ISO noise in video

What we found has one important consequence: High ISO noise in video! Because of the FX video crop and skipping two thirds of sensels, the ISO performance in video is shifted by a factor 3.60. E.g., At ISO 12,800, the noise looks (as bad) as at ISO 46,000 from a camera using all available sensors for video (except for the 16:9 ratio crop of course).

You may note however, that the D800 still samples 6720 x 1260 sensels for a 1920 x 1080 frame or 4.08 sensels per pixel. For this reason, at ISO 12,800, the noise looks (as good) as at ISO 3,200 from a still image when pixel peeping at a 100% (1:1) level. So, pixel noise in D800 video is 2 stops less compared to still while it could have been 3.85 stops less when reading out a maximum of sensels. If you consider this bad or good is up to you.

Below, I have extracted frames from the ISO comparison performed by

Video noise comparison D800 vs. 5DmkIII -- original frames (c) 2012
On the left hand stripe, I have shifted the D800 samples two stips down and I think, it is a good match for the 5DmkIII performance then.

From that, I can already conclude that the 5DmkIII reads out all its sensels, i.e., does no line skipping. However, I didn't run a resolution analysis for the 5DmkIII. However, hearing about resolution complaints for 5DmkIII video, I think they bin pixels before read out. This improves noise and aliasing performance but unlike downsampling, doesn't help the resolution.

Nikon D800 Live View implementation notes

I have applied our testing methodology to Nikon's live view implementation too.

D800 live view, photograph of the rear LCD (no zoom level)
You see the same false color moiré discs which we have analyzed already. Of course, there is some strong additional moiré from the LCD rasterization. I.e., the D800 only reads every third line when activating live view (in the example, it is FX video live view).

If we zoom in, we get a result as follows.

D800 live view, photograph of the rear LCD (high zoom level)
You now different false color moiré disc, they have moved outwards. The sampling frequency is  (1692px/1935px x2) or 1.749x the 1080p Nyquist frequency (1889 px). Because 3780 / 1889 = 2.00, we have proof that the Nikon D800 samples every second horizontal line from its sensor when zooming enough in live view.

In live view, the D800 switches from third line to second line skipping when zooming in!

Lessons for manual focusing: (1) zoom in and (2) focus onto vertical structures which have twice the resolution in live view! Focus on trees, edges of buildings rather than horizon or roof top.


The D800 creates FX 1080p video in the following way:
  1. Crop a region of 6720 x 3780 sensels (crop factor 1.095).
  2. Read only every third line out of this region, but all sensels in a line. The result is an 6720 x 1260 sensel RGGB Bayer pattern which can be demosaiced.
  3. The resulting 2240 x 1260 RGB image is downsampled 7:6 to the final 1920 x 1080 px resolution.
  4. Compared to an optimum architecture, only 1/3.6 of sensels are read which makes the D800 loose up to 1.8 stops in high ISO video performance.
  5. When zooming into a live view image, the D800 switches line skipping from 3x to 2x.
  6. Manual forcus should use zoomed live view focusing vertical edges.
Overall, I am personally pleased with the implementation Nikon has chosen. It refines an idea originally used in the 5DmkII which is more difficult to implement due to the higher overall number of pixels. Because of downsampling from 1260p to 1080p, I actually expect slightly better resolution than from a 5DmkII or a camera which bins sensels prior to demosaicing.

On the other hand, there will be no more excuses for line skipping in the future. Not after Nokia got rid of it in their 41 MP 808 mobile phone ...

Enjoy your read :)