Authors: Olivier Marchal (marchal_olivier at hotmail.fr)
and Jerome Mutterer (jerome.mutterer at ibmp-ulp.u-strasbg.fr)
History: 2005/01/20: First version
2005/02/08: Improved version
Limitations: Only works with 8-bit images Source: Haar_wavelet_filter.java Installation: Download Haar_wavelet_filter.java to the plugins folder and compile it with the "Compile and Run" command.
Restart ImageJ to add the "Haar Wavelet Filter" command to the Plugins menu.
Description: This plugin's purpose is to remove noise from noisy images. It makes use of image reconstruction from thresholded Haar wavelet transform coefficients. Thresholding factors should be input in the dialog, and will influence the amount of noise removed. An image with the removed noise can be generated.
Finding adequate factors is critical to remove sufficient noise without affecting signal, and these factors may vary from one image type to another. Too small thresholding factors remove too little noise, too large thresholding factors induce wavelet blocks artifacts. With suitable coefficients, most of the noise is removed, while the structures are left unaffected, with their details preserved.
This filter is macro-recordable, and an example macro is provided that helps finding suitable coefficients for a given image type.
GFP-labelled microtubules imaged with low laser power and high PMT gain settings.
Image width is 18 microns.
The denoised image shows a reduction of noise with preserved details inside the objects.
The wavelet filter is good at removing gaussian-type noise, while it can leave some kind of photon noise (very hot pixels for example). Thus an option is provided in the form of an optionnal adaptive median filter. This filter will detect pixels that differ from their context by more than a given multiple of the neighborhood's standard deviation. If marked as outlying, the pixel value is replaced by the median value of the neighborhood. A suggested default value is 1.6 * sd. The idea behind this filter is that if an adequate sampling was chosen upon acquisition, no such outlying (extreme value) pixels should be found.
The adaptive median filter might be useful alone. You can call it from a macro by something like :
run("Haar wavelet filter", "k1=0 k2=0 k3=0 non std=1.6")
A comparison with a rough median filters and other commonly used noise removing filters is shown below.