Reducing CCD Noise with The GIMP

Before After

Images captured by a CCD or CMOS imaging chip will often have some noise present. This noise typically can be seen as RGB “flecks”, especially noticable in the in the shadow areas of an image. The red and blue channels are especially susceptible. Higher ISO settings and higher ambient temperatures increase the likelihood of acquiring this noise along with your image.

If you find it necessary to shoot with a higher ISO and you find that you have an unpleasant amount of noise in your image, this tutorial will help you improve the image. This technique also helps deal with with film grain from traditional photography that is uncovered by high-resolution scanning.

The Procedure

There are a couple of filters that can come to your rescue here. Unfortunately, they don’t really eliminate the noise so much as blur it and make it less objectionable. This ends up softening the overall image a bit as well. Fortunately, you can sharpen the image to partially offset this.

Here is the original image. Notice how bad the noise is, especially in the shadows of the face and in the white wall (back right).

Technique #1

Right-click in the image and select Filters/Enhance/Despeckle.You can play around with the settings, but you’ll likely want to keep the radius pretty small and watch the White Level parameter too–too large a radius coupled with a lowered White Level and you’ll destroy details like the catchlights in the eye.

The “Recursive” option seems to cause a more aggressive filter effect. Try it if you have an especially noisy image.

Examine the resulting image, zooming in to examine shadow areas. You’ll notice that the noise is appreciably less objectionable. You cannot really eliminate it, but it is “smoothed out”.

Unfortunately, you may also notice that the image is softer; the despeckle filter actually blurs the image.

Technique #2

As an alternative to Despeckle, you can try Selective Gaussian Blur. Right-click in the image and select Filters/Blur/Selective Gaussian Blur.The radius works like you’d expect for a regular gaussian blur; as with Despeckle, you probably don’t want to get too aggressive with it or the image will be too soft.

The “Max. Delta” parameter controls how much of an edge needs to be defined for the blur to selectively skip it. It is a very rough control, obviously, so experimentation is the key.

I happen to think this one is just a tad better in terms of blurring the noise. It also is a little softer.

To offset the inevitable softening of either of these techniques you’ll want to use smart sharpening, explained elsewhere on this site.As an example, I took the selective gaussian blurred image and edge sharpened it on all RGB channels. Compare to above.

If you find edge (“smart”) sharpening too difficult, just apply a little global sharpening to offset the softening.

Tips and Suggestions

  • It may not be necessary to apply these filters across all RGB channels; as I mentioned earlier, CCD noise tends to show up predominantly in the blue or red channels. You can open the Layers dialog (Ctrl+L), click on the Channels tab and just select the channel(s) that you want to apply the filter to. To examine the individual channels for noise, right click in the image and select Image/Mode/Decompose; choose RGB for the decomposition.Similarly, you can try decomposing to HSV or LAB, running the despeckle filter on one or more parts (e.g. value channel from HSV) and recomposing.

    Note: along these lines I have seen it suggested from several sources that decomposing to LAB, applying a slight gaussian blur to the A+B channels and then sharpening the L channel is a good approach to reducing CCD artifacts. I have to say that so far in my experiments this approach has not worked for me; I find the despeckle or selective gaussian blur methods far superior.

  • Another technique that is much more complicated, but interesting to try is the following:
    • create an edge mask for the image
    • load it as a selection
    • (*) invert the selection
    • (*) run a gaussian blur
    • (*) invert the selection again
    • run unsharp mask

    i.e. essentially this is the same procedure described in the this smart sharpening tutorial, with the added steps (starred above) inserted.Theoretically this should do the same thing as the selective gaussian blur method described above, but with the added benefit of having more control over the blurring. I have tried this and almost always found that I get better results using the selective gaussian blur filter!

Other Examples

Despeckled and smart sharpened:

Further Reading on Reducing CCD Noise



  1. uhm.. allo the images are pointing some local path.. please check 🙂

    Comment by miziodel — March 20, 2010 @ 5:34 am

  2. miziodel, I’m aware of the issue. Going to fix it, pls be patient.

    Comment by Eric Jeschke — March 23, 2010 @ 11:39 pm

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Please log in using one of these methods to post your comment: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

Create a free website or blog at

%d bloggers like this: