wow#, *, scaling_function=None, n_scales=None, weights=None, whitening=True, denoise_coefficients=None, noise=None, bilateral=None, bilateral_scaling=False, soft_threshold=True, preserve_variance=False, gamma=3.2, gamma_min=None, gamma_max=None, h=0)[source]#

Processes an image with the Wavelets Optimized Whitening (WOW) algorithm.

This function manipulates the wavelet spectrum of the input image so that the power in the output image is equal at all locations and all spatial scales, thus “whitening” the wavelet spectrum. By doing so, the large scale structures are attenuated and the small scale structures are reinforced, with the objective criterion that the variance at all scales must be equal. The algorithm has the added advantage to allow attenuation of the noise at the same time, thus avoiding the usual explosion of noise usually inherent to enhancement methods.


  • The filter was developed with the intention to find an objective criterion for enhancement. By default, there are therefore no free parameters to adjust, except for the denoising coefficients. It is however possible to set the synthesis weights to be values other than 1 to tune the output. It is also possible to merge the output with a gamma-scaled version of the original image. The weight of the gamma scaled image can be adjusted using the parameter h, to the type of input image (e.g., wavelength or channel). For most purposes, the weights can be set to be equal for all scales.

  • We do not deal with NaN (Not a Number) in this implementation.

  • data (numpy.ndarray or – Image to be transformed.

  • scaling_function ({Triangle , B3spline}, optional) – The wavelet scaling function, comes from the watroo package. Defaults to B3spline.

  • n_scales (int, optional) – Number of scales used for the wavelet transform. If None, the number of scales is computed to be the maximum compatible with the size of the input. Defaults to None.

  • weights (list of float, optional) – Optional reconstruction weights used in the synthesis stage. By default, the weights are all set to 1. If the weights are not 1, the spectrum of the output is not white. Defaults to [].

  • whitening (bool) – If True (default), the spectrum is whitened, i.e., normalized to the local power at each scale. Defaults to True.

  • denoise_coefficients (list of float, optional) – Noise threshold, in units of the noise standard deviation, used at each scale to denoise the wavelet coefficients. Defaults to [].

  • noise (numpy.ndarray or None, optional) – A map of the noise standard deviation, of same shape as the input data. This can be used to take into account spatially dependent (i.e., Poisson) noise. Defaults to None.

  • bilateral (int or None, optional) – Uses bilateral convolution to form an edge-aware wavelet transform. The bilateral transform avoids the formation of glows near strong gradients. The recommended “natural” value is 1. Defaults to None.

  • bilateral_scaling (bool, optional) – Experimental, do not use. Defaults to False

  • soft_threshold (bool, optional) – Used only if denoise_coefficients is not []. If True, soft thresholding is used for denoising, otherwise, hard thresholding is used. Soft thresholding tends to create less artifacts. Defaults to True.

  • preserve_variance (bool, optional) – Experimental, do not use. Defaults to False.

  • gamma (float, optional) – The value used to calculate the global gamma-transformed image. Defaults to 3.2.

  • gamma_min (float or None, optional) – Minimum input to the gamma transform. If None, defaults to minimum value of data.

  • gamma_max (float or None, optional) – Maximum input to the gamma transform. If None, defaults to maximum value of data.

  • h (float, optional) – Weight of the gamma-scaled image wrt that of the filtered image. Defaults to 0.


numpy.ndarray or – Normalized image. If a map is input, a map is returned with new data and the same metadata.


  • Frédéric Auchère, Elie Soubrié, Gabriel Pelouze, Eric Buchlin, 2023, “Image Enhancement with Wavelets Optimized Whitening.”, Astronomy & Astrophysics, 670, A66 doi:10.1051/0004-6361/202245345