### Highlights from Image Noise Reduction by Local Statistics

Join the 15-year community celebration.

Play games and win prizes!

4.0
4.0 | 1 rating Rate this file 9 Downloads (last 30 days) File Size: 156 KB File ID: #35556 Version: 1.6

# Image Noise Reduction by Local Statistics

### Tristan Ursell (view profile)

11 Mar 2012 (Updated )

Reduce image noise by measuring local pixel statistics and remapping intensities.

File Information
Description

Tristan Ursell
Relative Noise Transform
(c) November 2012

Iout=relnoise(Iin,sz,sigma);
Iout=relnoise(Iin,sz,sigma,'field');
[Iout,Ivar]=relnoise(Iin,sz,sigma,...);
[Iout,Ivar,Imean]=relnoise(Iin,sz,sigma,...);

Iin = the input image, of any numerical class.

sz = (3 < sz < min(size(Iin))) is the size of the filter block used to calculate means and variances. This value must be odd.

sigma (sigma > 0) is the weighting parameter that defines the standard
deviation relative to the filter block's standard deviation around which the center pixel will be Gaussian weighted. Setting sigma = 1 weights the current pixel using the STD of the current filter block. Lower values bring the current pixel closer to the mean, while high values are more tolerant of variations. As sigma -> Inf, Iout = Iin.

The field 'plot' will create an output plot comparing this transform to the original image, a Gaussian blur with STD = sz/2, and median filter with block size equal to sz. At first glance, this filter appears similar to a median transform, but it does a better job of preserving local intensity extrema. Comparison with the median filter requires the Image Processing Toolbox, but the rest of the script does not.

The field 'disk' or 'square' will choose between using a disk or square filter block shape, where sz is the disk diameter or square side length. The default is square.

The field 'custom' may be followed by a user-defined logical matrix or strel, e.g. relnoise(Iin,sz,sigma,'custom',strel('line',30,45)). In this case 'sz' will be unused.

Iout is the transformed output image.

Ivar is the variance of the pixel intensities in the filter block at every point in the image -- essentially the spatially varying variance of the image.

Imean is the mean smoothed image using the filter block, equivalent to a convolution averaging filter with the specified neighborhood.

Example:

Iout=relnoise(Iin,3,0.5,'square','plot');
%OR
Iout=relnoise(Iin,3,0.5,'custom',strel('line',30,0),'plot');

figure;
subplot(1,2,1)
imagesc(Iout-double(Iin))
title('What was removed from the original image.')
axis equal tight
box on

subplot(1,2,2)
imagesc(abs(fftshift(fft(Iout-double(Iin)))))
title('FFT of difference between original and filtered images.')
axis equal tight
box on

Required Products MATLAB
MATLAB release MATLAB 7.9 (R2009b)
15 Aug 2013 Tristan Ursell

### Tristan Ursell (view profile)

@ Krishna, what exactly do you mean by "unknown scaling" -- the output image is the same size as the input image, so there's no scaling there, and the intensity values are not scaled, they are of course adjusted by the calculation itself. You can subtract the input from the output and verify that it removes (mostly) noise ... and hence there is no scaling.

I designed this filter, but it is something like a cross between an averaging and median filter.

If this clarified things for you, please consider re-rating this to 5 stars.

Comment only
15 Aug 2013 Krishna Kuchibhotla

### Krishna Kuchibhotla (view profile)

It is awesome! Worked very well for the first time without IPT and not knowing much about the algorithm in use. 2 additional things would help much better...a) the axes are being scaled to unknown values; would be better to restore the scaling of Iout vector to Iin, b) any literature references to help understand the basics of the algorithm. Thanks.

15 Nov 2012 Tristan Ursell

### Tristan Ursell (view profile)

if you like this function, please consider rating it! (if you don't, please tell me why)

Comment only
15 Mar 2012 1.2

No longer requires the Image Processing Toolbox.

15 Mar 2012 1.3

fixed typos

09 Apr 2012 1.4

Improved how the algorithm handles regions of zero variance.

12 Apr 2012 1.5

improved edge pixel handling, fixed small bug

16 Nov 2012 1.6

support of arbitrary pixel neighborhoods, improved edge handling and normalization