New Noise Reduction Technique?

STEVE333

Well-known member
Hi All -

Because of my light pollution and limited imaging time I always have plenty of noise in my stacked images. Recently I have been successfully using a new technique to reduce the noise in the stacked image. It may be a known technique, but, I haven't seen it before.

The link below takes you to a tutorial showing how to use the technique. I've found that it takes about 2 to 3 minutes to perform the noise reduction.

https://theskysearchers.com/viewtopic.php?f=22&t=5799

After viewing the tutorial the following may help to explain how the noise reduction is achieved. The technique reduces the noise by averaging each pixel with it's four nearest neighbors (one at a time) and then averaging those four averages. It reduces noise by almost a factor of 2 while retaining all the pixels (no binning). It does slightly blur the image (very slightly) which is the tradeoff to reduce the noise (no free lunch as they say).

The equation below shows the four individual averages, and, then their average to produce the desired result. It is the averaging of noise from adjacent pixels (not the blurring) that leads to the noise reduction.

[(orig + R)/2 + (orig + L)/2 + (orig + U)/2 + (orig + D)/2] / 4 = Average

Comments welcomed.

Steve
 
i think you can accomplish this in one fell swoop with pixelmath:

(((pixel($T,x()+1,y())+$T)/2)+
((pixel($T,x()-1,y())+$T)/2)+
((pixel($T,x(),y()+1)+$T)/2)+
((pixel($T,x(),y()-1)+$T)/2))/4

rob
 
pfile said:
i think you can accomplish this in one fell swoop with pixelmath:

(((pixel($T,x()+1,y())+$T)/2)+
((pixel($T,x()-1,y())+$T)/2)+
((pixel($T,x(),y()+1)+$T)/2)+
((pixel($T,x(),y()-1)+$T)/2))/4

rob

Thanks so much rob. I've already edited my icon set to include this improvement. Definitely makes the process easier to implement. Now only one clone (I create a clone named Average) is required.

Cheers,

Steve
 
Just a little clarification about this technique.

This technique has benefits similar to the benefits of binning, but, binning isn't used. As mentioned previously, the noise is reduced by about a factor of two, also, the reduced image is the same size as the original, and, the stars remain round with no "blocky" stars like binning can produce. To achieve this same level of noise reduction by just gathering more data would require me to gather almost 4 times as much data. So, this noise reduction is a really big deal for me.

With Rob's nice improvement I simply create one clone of the target image and drag a PI icon (with all the shifting and adding and averaging included) onto the clone to do the noise reduction. The entire noise reduction takes only about 1 minute. Thanks again Rob!

Hope this proves useful for some of you.

Steve
 
if i remember right something like this was discussed on CN, though i think they were talking about creating shifted versions of each subexposure and then integrating them together. i did try that and saw some improvements but i ended up with the smaller stars getting a little blocky.

this is a lot less work since you only need to do it to the master frame...

rob
 
If I have understood correctly, I think this technique would be a convolution using this 3x3 matrix:
Code:
0 1 0
1 4 1
0 1 0
In this case it would be a really old and well known method for noise reduction.
 
That's true. It is a blur filter. It can also be implemented as a Convolution filter:

Code:
KernelFilter {
   name { Blur (3) }
   coefficients {
       0.000000   1.000000   0.000000 
       1.000000   4.000000   1.000000 
       0.000000   1.000000   0.000000 
   }
}

This is faster, probably because the Convolution process uses FFT. Rob's PixelMath expression is equivalent, modulo edge (boundary) effects.
 
Andres.Pozo said:
If I have understood correctly, I think this technique would be a convolution using this 3x3 matrix:
Code:
0 1 0
1 4 1
0 1 0
In this case it would be a really old and well known method for noise reduction.

Thanks Andres - I'm getting pretty old, so, only makes sense I would "invent" something that is really old and well known.

However, this "filter" helps my data very much with minimal "blurring". No masks, and, it doesn't make the background look "plastic".

Steve
 
dld said:
That's true. It is a blur filter. It can also be implemented as a Convolution filter:

Code:
KernelFilter {
   name { Blur (3) }
   coefficients {
       0.000000   1.000000   0.000000 
       1.000000   4.000000   1.000000 
       0.000000   1.000000   0.000000 
   }
}

This is faster, probably because the Convolution process uses FFT. Rob's PixelMath expression is equivalent, modulo edge (boundary) effects.

Thanks "did" - I tried running it as a Convolution process using your code and it worked perfectly. Unfortunately, I couldn't figure out how to save the filter for future use. Oh well, I have Rob's approach already saved in icon form.

Steve
 
You are welcome, Steve,

The Convolution process can be saved as an icon like all processes by dragging the "triangle" of the process window. If you are getting the warning that "the current filter library is not writable", just save the filter library in a different .filter file in a convenient place, and not where PI is installed.
 
dld said:
You are welcome, Steve,

The Convolution process can be saved as an icon like all processes by dragging the "triangle" of the process window. If you are getting the warning that "the current filter library is not writable", just save the filter library in a different .filter file in a convenient place, and not where PI is installed.

Thanks for the help. My first time into the world of Convolution!

Steve
 
Back
Top