Difference between revisions of "Example Wavelet Noise Removal"

From BoofCV
Jump to navigationJump to search
(Updated for v0.16)
m
Line 13: Line 13:


Example Code:
Example Code:
* [https://github.com/lessthanoptimal/BoofCV/blob/v0.16/examples/src/boofcv/examples/enhance/ExampleWaveletDenoise.java ExampleWaveletDenoise.java]
* [https://github.com/lessthanoptimal/BoofCV/blob/v0.19/examples/src/boofcv/examples/enhance/ExampleWaveletDenoise.java ExampleWaveletDenoise.java]


Concepts:
Concepts:
Line 40: Line 40:
ImageFloat32 noisy = input.clone();
ImageFloat32 noisy = input.clone();
GImageMiscOps.addGaussian(noisy, rand, 20, 0, 255);
GImageMiscOps.addGaussian(noisy, rand, 20, 0, 255);
ImageFloat32 denoised = new ImageFloat32(input.width,input.height);
ImageFloat32 denoised = noisy.createSameShape();


// How many levels in wavelet transform
// How many levels in wavelet transform
Line 57: Line 57:
gui.addImage(ConvertBufferedImage.convertTo(denoised,null),"Denoised");
gui.addImage(ConvertBufferedImage.convertTo(denoised,null),"Denoised");


ShowImages.showWindow(gui,"Wavelet Noise Removal Example");
ShowImages.showWindow(gui,"Wavelet Noise Removal Example",true);
}
}
}
}
</syntaxhighlight>
</syntaxhighlight>

Revision as of 21:14, 15 September 2015

Image noise removal is the process of attempting to under the corruption caused by noise. Often this noise is modeled as Gaussian noise being added to each pixel independently. Several different wavelet algorithms have been proposed for removing noise from image. These work by determining the statistical properties of the wavelet coefficients and removing the outliers.

Except in highly constrained situations when strong assumptions can be made, it is never possible to recover the original image perfectly. Wavelet based methods do have some advantages over other commonly used techniques. For example, they tend to preserve edge features better than applying Gaussian blur. To see a comparison between some of these techniques, click on the applet below.

In the example below a simply interface is used to instantiate a wavelet based image denoiser. This filter is then used to remove the noise and create a smoother image that appears less noisy.

Example Code:

Concepts:

  • Noise Removal
  • Wavelets

Relevant Applets:

Example Code

/**
 * Example of how to "remove" noise from images using wavelet based algorithms.  A simplified interface is used
 * which hides most of the complexity.  Wavelet image processing is still under development and only floating point
 * images are currently supported.  Which is why the image  type is hard coded.
 */
public class ExampleWaveletDenoise {

	public static void main( String args[] ) {

		// load the input image, declare data structures, create a noisy image
		Random rand = new Random(234);
		ImageFloat32 input = UtilImageIO.loadImage("../data/evaluation/standard/lena512.bmp",ImageFloat32.class);

		ImageFloat32 noisy = input.clone();
		GImageMiscOps.addGaussian(noisy, rand, 20, 0, 255);
		ImageFloat32 denoised = noisy.createSameShape();

		// How many levels in wavelet transform
		int numLevels = 4;
		// Create the noise removal algorithm
		WaveletDenoiseFilter<ImageFloat32> denoiser =
				FactoryImageDenoise.waveletBayes(ImageFloat32.class,numLevels,0,255);

		// remove noise from the image
		denoiser.process(noisy,denoised);

		// display the results
		ListDisplayPanel gui = new ListDisplayPanel();
		gui.addImage(ConvertBufferedImage.convertTo(input,null),"Input");
		gui.addImage(ConvertBufferedImage.convertTo(noisy,null),"Noisy");
		gui.addImage(ConvertBufferedImage.convertTo(denoised,null),"Denoised");

		ShowImages.showWindow(gui,"Wavelet Noise Removal Example",true);
	}
}