Read noise patterning — summary

I’m wrapping up my work on spatial frequency analysis of read noise, and in this post, I’ll summarize what I’ve found and provide links to posts with the details.

In all the cameras that I tested:

The spatial spectrum of the noise when the camera is exposed to a dark field is not white, but has higher energy at lower spatial frequencies than white noise. In this regard, the dark-field noise is different from photon noise (aka shot noise, aka Poisson noise) and photoreceptor non-uniformity (PRNU).

In this post, and in many of the ones that preceded it, I refer to dark-field noise and read noise interchangeably. Though I wish it were the case, this is not strictly accurate. In some cameras, the black point is subtracted from the real raw readings before the “raw” file is written. This process removes half the read noise, chopping all counts below the black point off and assigning them the value of the black point. As it turns out, aside from making the dark field images look twice as good as they really should, this practice has remarkably little effect on the spatial frequency characteristics of dark-field images.

The low-frequency component of the read noise is more visually objectionable than white noise. In fact, with most cameras it’s downright ugly. If you click on the links to each camera above, the next page shows images of that camera’s read noise after low-pass filters of various shapes and sizes.

In the cameras I tested, the low frequency content of the read noise is worse from top to bottom than side to side, or vice-versa. This seems to depend on the design of the sensor, and gives rise to the image defect that photographers call banding.

Fortunately, in the cameras that I tested, the level of the low-frequency part of the read noise is far enough down that you don’t see it in normal images. In the case of the Nikon D810, it’s hard to see it even if you go looking for it.

In the Nikon D810, almost all the low-frequency read noise is the same from frame to frame, and can be subtracted out in post processing. In the case of the Sony alpha 7S, that is unfortunately not true.

Although read noise does change somewhat with shutter speeds, at least in the case of the Nikon D810, it hardly changes at all in the hand-holding range of 1/3- second to 1/8000 second. Even throughout the range of 1/30 second to 30 seconds, the amount of read noise doesn’t change much, and the frequency characteristics change hardly at all in the D810.

 

 

D810 read noise characteristics vs shutter speed, long exposures

A few posts ago, I did a series of D810 dark-field exposures with different shutter speeds to make sure that one of my test methods, which involved varying exposure by varying shutter speed, wasn’t affecting the quality of the read noise. It wasn’t.

Today I did a similar series at long shutter speeds to find out if the integration of the leakage current from the photodiodes over longer periods of time changes the frequency characteristics of the read noise. I used ISO 1000, which is the highest D810 ISO with minimal histogram clipping and no digital gain (except for white balance prescaling), and shutter speeds from 1/30 second to 30 seconds. Long exposure noise reduction and high-ISO noise reduction were turned off. I used the whole frame — and all four channels — for the calculations.

The spectral characteristics of the read noise don’t change.

The plots:

d810leH

d810leV

They’re not as tight as the 1/30 – 1/8000 second plots, but they’re pretty close. You can see in this post that, starting at 1/4 second, Nikon applies some processing to the curve that lowers the dark-field noise, even if you tell it not to. After that, as the exposures get longer, the read noise gets worse, as you’d expect. However, the basic shape of the curves doesn’t change.

 

Pattern Error in Sony a7S dark-field images

A couple of posts ago I reported getting rid of almost all the Nikon 810 low-frequency dark-field noise by averaging many (256) dark-field images and subtracting the average from individual images.

I wondered if the same trick would work with the Sony alpha 7S. Sadly, the answer is no.

Here’s the standard deviation of the average of 7S dark-field images as they are added into the mix one by one:

First with the raw values as the vertical axis:

a7siso100avgc

And with the vertical axis converted to electrons:

a7siso100avg

Either way, it doesn’t look very promising. The curves are almost straight lines on the log-log plot, with vertical values halving every time the horizontal values are quadrupled, indicating that almost all the dark-field noise is different from exposure to exposure.

I tried testing at ISO 3200:

a7siso3200avgc

a7siso3200avge

That’s a little more promising. If we look at the histogram of the average of 256 exposures, we can see what’s going on:

Avgda7s3200histo

There are two Gaussian distributions, one narrow one (It’s only narrow because it’s the average of 256 exposures) and one wider one with slightly lower mean and much lower population. The latter one is the fixed error.

But subtracting our the averaged image makes little difference to the low-frequency energy:

Without subtraction:

a7s3200

With subtraction:

a7s3200subref

You win some, you lose some…

D810 dark-field pattern error images

In the preceding post, I presented data about the D810 fixed pattern read errors and the results of using averaged dark-field images to correct the fixed part of the read errors. We found that almost all of the low-frequency componts of the read errors were fixed — they didn’t change from exposure to exposure.

Now I’lll show you some sample images. As usual in this read noise analysis series, they have been scaled into the range [0,1],  have had a gamma curve of 2.2 applied , been res’d down to 640×480, and JPEG’d.

A sample dark-field image:

Uncorrected Image

Uncorrected Image

The reason it’s so dark is that hot pixels control the scaling.

The 256-exposure averaged image:

Averaged Image

Averaged Image

It’s at least as dark, because the hot pixels are part of the fixed pattern.

The result of subtracting the averaged image from the uncorrected image:

Corrected Image

Corrected Image

Can’t see much, can you? Lets do some low pass filtering, first with a 36-pixel square kernel.

The dark-field image:

Uncorrected Image, square kernel, 36 pixels

Uncorrected Image, square kernel, 36 pixels

The averaged image:

Averaged Image, square kernel, 36 pixels

Averaged Image, square kernel, 36 pixels

The corrected image:

Corrected Image, square kernel, 36 pixels

Corrected Image, square kernel, 36 pixels

Now with a 216-pixel square kernel.

The dark-field image:

Uncorrected Image, square kernel, 216 pixels

Uncorrected Image, square kernel, 216 pixels

The averaged image:

Averaged Image, square kernel, 216 pixels

Averaged Image, square kernel, 216 pixels

The corrected image

Corrected Image, square kernel, 216 pixels

Corrected Image, square kernel, 216 pixels

:When you look at these images, don’t judge the overall noise level; it’s all been normalized so that the range on all the images is the range of the error. Look at how pleasing or ugly the patterns are.

 

 

 

 

Pattern error in D810 dark-field images

I’ve been analyzing the low-frequency behavior of read noise in several cameras for the last two weeks. Now I turn my attention to how much of the dark-field images vary from exposure to exposure, and how much form a fixed pattern. In addition, I will explore the differences in the spatial spectra of the fixed and variable parts of the dark-field image.

The camera I’ve chosen for my first set of experiments is the Nikon D810, I started by making a series of dark-field exposures at ISO 1000 and 1/8000 second. I chose ISO 1000 because that is the ISO where the D810 just starts to clip the left side of the dark-field histogram. It is also the highest ISO on the camera that has no digital gain applied.

I made 256 exposures, and averaged the raw images (all four channels), recording the standard deviation of the averaged image after each exposure was averaged in:

D810averaging

You can see that the curve flattens out after about 128 images in the average, which means that there’s a portion of the dark-field image that doesn’t vary from frame to frame.

Want to see it in electrons? Sure thing:

 

D810averagingE

The electron count of the curve’s intercept with the left axis may be bigger than you’re used to seeing. That’s because I took the standard deviation of the entire frame, not of a small crop.

Then I took one of the dark-field images and measured the way that the standard deviation varied with averaging kernels of three shapes (one dimensional horizontal, one dimensional vertical, and square) and many sizes:

d810rnlpnosub

You can see that the curves flatten out, indicating that there the spatial frequency content of the dark-field image is not flat, or white, but that there is more low frequency content than would be in an image with a flat frequency spectrum.

I performed the same set of calculations after subtracting the average of 256 frames from the dark-field image:

d810rnlpsub

Now there is very little flattening of the curves — although there is some with the largest vertical kernels — indicating that the corrected image has very little additional low-frequency content over that of an image whose noise is white.

We can get another angle on it by processing the averaged image:

d810rnlp256avg

Yes, indeed. That’s where the low frequency content is. Middle frequency, too, look how the curves start to flatten for even very small kernels.

It looks like almost all the low-frequency “read noise” of the D810 can be eliminated with the subtraction of a reference image.  You deep-sky photographers might want to take note of that.

 

D810 read noise characteristics vs shutter speed

There’s an assumption buried in the protocol for the experiment that led to yesterday’s post: that the read noise of the D810 doesn’t change character over the range of shutter speeds employed in the testing, which were from 1/60 (used to get the histogram that let us estimate the electron counts), and 1/8000 (the highest speed used). Unverified assumptions being A Bad Thing, I thought I’d run a test.

I set the ISO of a D810 to 3200, and made a series of dark-field exposures at shutter speeds from 1/15 through 1/8000, then subjected them to the same processing I earlier used to assess the read noise vs ISO characteristics of the camera.

The results:

D810RBHSS

D810RBVSS

Sensor referred:

D810RBHSSsensor

 

D810RBVSSsensor

As a ratio to ideal behavior:

D810RBratioHSS

D810RBratioVSS

There’s a little spread at the low-frequency, large kernel end of the horizontal averaging, but things look pretty consistent.

Just as a check, there’s the 1/8000 image with a square averaging kernel of 36 pixels:

D810ISO3200-8000-36

 

And the equivalent 1/60 second exposure:

D810ISO3200-60-36

 

Well, that’s one less thing to worry about.

Nikon D810 read noise in images

Over the past two weeks, I’ve done a series of read noise analyses on an exhausting, if not exhaustive, ground of cameras. I’ve done to build up a data base for correlating visible read noise phenomena with measurements. Today I’d like to start looking at read noise in photographs.

Before I do this, I’d like to give you my personal perspective on read noise. It hasn’t bothered me for years. I just don’t see it in my work. My idea of the minimum usable signal-to-noise ratio (SNR), is about ten to one. With that much photon noise, each pixel is collecting about 100 electrons, and with read noise at a few electrons, or maybe ten or twelve at worst, it’s increasing the photon noise by less than 50%.

People have told me repeatedly that such a view is shortsighted, that read noise is more objectionable than photon noise, which is white and Gaussian. That’s why I started doing the testing that has filled my posts for the last two weeks. And guess what? I’ve proved to myself, and to you all I hope, that read noise has more low frequency components than white noise, and that, with some specialized filtering, it can be seen to be something that you don’t want in your images.

But is that ugliness manifested in post processing that is not as specialized as the Matlab scripts that crunched the data graphed and the images shown in the last few posts? I attempted to find out.

I constructed a target image consisting of what and black areas, plus step wedges in red, green, blue, and gray. I  lit it with a Fotodiox 5500K LED source. I put a Zeiss 135mm f/2 APO Sonnar on a Nikon D810, and put a Heliopan variable neutral density filter on the lens. I set the aperture to f/16 or f/22, and dialed in enough ND to have the average exposure pretty far down in the mud. Then I made a series of exposures at shutter speeds from 1/60 to 1/8000 at ISOs from 64 to 12800. I’m going to show you some of those.

You’re not going to see the ones with ISOs below 3200, because they’re pretty darn boring from the read noise perspective, at least with the post processing that you can do in Lightroom. I suppose I could have brought the images into Photoshop and really tortured them, but that wouldn’t represent any possible realistic scenario.

Before we look at the histograms of the images that I’ll be showing you, let’s look at a set from an ISO 3200 image with two stops more exposure than the one you’ll be seeing.

D810ISO3200-60thhisto

I’ve marked some important levels. The left-most arrow is the black point for the camera. The arrow to its right is the average exposure in the black areas of the test image. There’s about a 10-count difference. What’s that mean in terms of electrons in the sensor? Since the unity gain ISO of the D810 is a bit over 300, that means that at ISO 3200, each count, on average, is 1/10 of an electron. So the black level on the sensor is about 1 electron.

Now look at the right-most arrow. That marks the white point, and it’s about 150 counts, or 15 electrons, over the black point.

Here’s the RawDigger histogram of an ISO 3200 image with two stops less exposure:

D810ISO3200hhisto

Note that the D810 cuts off part of the left side of the histogram. Two stops is a factor of four, so the black parts of the image must have an average exposure of 1/4 of an electron, and the lightest parts about four electrons. We are well below my 100-electron minimum level for the kind of photographic qualities that I like.

I brought that image into Lightroom, and applied the following aggressive post-processing:, with sharpening and noise reduction turned off

ISO12800LrProcSettings

Note the 5-stop exposure boost!

Here’s the image that results:

_8101174

You’re looking at a 640×480 JPEG’d version, but I can tell you that there is virtually no visible evidence of low frequency noise.

One of the things that I did previously to make the read noise more visible was to apply low-pass filtering to the dark-field images. Lightroom’s noise reduction algorithms have a low-pass  component, so I tried a ham-fisted LR NR move:

ISO3200LrNRSettings

That got me this:

_8101174-2

The D810’s pattern noise is MIA.

OK, what if we raise the stakes to ISO 6400? Here’s a raw histogram:

D810ISO6400hhisto

The white point of the image averages 2 electrons/pixel, and the black point about 1/8 of an electron.

In Lightroom applied this delicate adjustment:

ISO6400LrProcSettings

And got this image:

_8101183

There’s plenty of noise, but not much low-frequency noise.

With this noise reduction:

ISO6400LrNRSettings

We get this image:

_8101183-2

Now we’re starting to see a little low-frequency read noise. Look at the light band across the bottom.

Next stop, ISO 12800 (done with a different setup, and no ND filter):

D810ISO12800-8000thhisto

The white point of the image averages 1 electron/pixel, and the black point about 1/16 of an electron.

With this heroic move in Lightroom:

ISO12800LrProcSettings

We get this image:

_8101160

At last, the low frequency read noise is obvious: the light band at the bottom, the dark band above it, and other, mostly horizontal, patterning.

With this noise reduction (and a tweak to the white balance):

ISO12800LrNRSettings

We get this image:

_8101160-2

OK, that LF noise is pretty ugly.

But look at how dim we had to make the image to get it to stand out! No wonder I haven’t been bothered by it in the past.

By the way. I didn’t show you any of the images before the big Lightroom Exposure moves because they look black, black, black.

 

Nikon D4 dark-field images

These are samples from the images used to create the curves in the previous post.

ISO 100, no filtering:

 

Nikon D4, ISO 100, no filtering

Nikon D4, ISO 100, no filtering

With 25 pixel kernels:

Nikon D4, ISO 100, 25 pixel horizontal averaging kernel

Nikon D4, ISO 100, 25 pixel horizontal averaging kernel

Nikon D4, ISO 100, 25 pixel vertical averaging kernel

Nikon D4, ISO 100, 25 pixel vertical averaging kernel

Nikon D4, ISO 100, 25 pixel square averaging kernel

Nikon D4, ISO 100, 25 pixel square averaging kernel

With 152-pixel kernels:

Nikon D4, ISO 100, 152 pixel horizontal averaging kernel

Nikon D4, ISO 100, 152 pixel horizontal averaging kernel

Nikon D4, ISO 100, 152 pixel vertical averaging kernel

Nikon D4, ISO 100, 152 pixel vertical averaging kernel

Nikon D4, ISO 100, 152 pixel square averaging kernel

Nikon D4, ISO 100, 152 pixel square averaging kernel

I don’t normally present the intermediate-ISO images, but I’m making an exception in this case for ISO 400, since it showed anomalous results in the curves of he preceding post.

With no filtering:

Nikon D4, ISO 400, no filtering

Nikon D4, ISO 400, no filtering

With 25-pixel kernels:

Nikon D4, ISO 400, 25 pixel horizontal averaging kernel

Nikon D4, ISO 400, 25 pixel horizontal averaging kernel

Nikon D4, ISO 400, 25 pixel vertical averaging kernel

Nikon D4, ISO 400, 25 pixel vertical averaging kernel

Nikon D4, ISO 400, 25 pixel square averaging kernel

Nikon D4, ISO 400, 25 pixel square averaging kernel

It’s pretty obvious that there’s some serious horizontal banding present.

With 152-pixel kernels:

Nikon D4, ISO 400, 152 pixel horizontal averaging kernel

Nikon D4, ISO 400, 152 pixel horizontal averaging kernel

Nikon D4, ISO 400, 152 pixel vertical averaging kernel

Nikon D4, ISO 400, 152 pixel vertical averaging kernel

 

Nikon D4, ISO 400, 152 pixel square averaging kernel

Nikon D4, ISO 400, 152 pixel square averaging kernel

Onward to ISO 6400. With no filtering:

 

Nikon D4, ISO 6400, no filtering

Nikon D4, ISO 6400, no filtering

With 25-pixel kernels:

Nikon D4, ISO 6400, 25 pixel horizontal averaging kernel

Nikon D4, ISO 6400, 25 pixel horizontal averaging kernel

Nikon D4, ISO 6400, 25 pixel vertical averaging kernel

Nikon D4, ISO 6400, 25 pixel vertical averaging kernel

 

Nikon D4, ISO 6400, 25 pixel square averaging kernel

Nikon D4, ISO 6400, 25 pixel square averaging kernel

With 152-pixel kernels:

Nikon D4, ISO 6400, 152 pixel horizontal averaging kernel

Nikon D4, ISO 6400, 152 pixel horizontal averaging kernel

Nikon D4, ISO 6400, 152 pixel vertical averaging kernel

Nikon D4, ISO 6400, 152 pixel vertical averaging kernel

Nikon D4, ISO 6400, 152 pixel square averaging kernel

Nikon D4, ISO 6400, 152 pixel square averaging kernel

 

 

Nikon D4 read noise analysis

Here are the read noise vs one-dimensional low pass filter size curves for the whole-f-stop ISOs of the Nikon D4. Unfortunately, the D4 chops off the left side of the histogram for dark-field images in its in-camera raw processing:

D4H

D4V

Here they are referred to the sensor:

D4Hsensor

D4Vsensor

You can see that, up until about ISO 800, increasing the in-camera ISO setting helps a lot in reducing read noise. You can also see that there’s something funny going on for the vertical averaging curve at ISO 400.

If the read noise were white and Gaussian, here’s what the sensor-referred curve would look like:

D4ideal

Normalizing the actual sensor-referred curves to the ideal ones results in these plots:

D4Hratio

D4vratio

This is mid-pack low-frequency read noise performance. It looks like skipping ISO 400 might be a good idea.