Source code for astro.denoising.wavelet

# -*- coding: utf-8 -*-
##########################################################################
# pySAP - Copyright (C) CEA, 2017 - 2018
# Distributed under the terms of the CeCILL-B license, as published by
# the CEA-CNRS-INRIA. Refer to the LICENSE file or to
# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
# for details.
##########################################################################

"""WAVELET.

This module defines functions for wavelet decomposition.

"""

import numpy as np
from pysap import load_transform


[docs]def decompose(data, n_scales=4): """Decompose. Obtain the wavelet decomposition of the input data using an isotropic undecimated wavelet transform. Parameters ---------- data : numpy.ndarray Input 2D-array n_scales : int, optional Number of wavelet scales, default is ``4`` Returns ------- numpy.ndarray Wavelet decomposition 3D-array Raises ------ TypeError For invalid input ``data`` type TypeError For invalid input ``n_scales`` type Examples -------- >>> import numpy as np >>> from astro.denoising.wavelet import decompose >>> data = np.arange(9).reshape((3, 3)) * 0.1 >>> decompose(data) array([[[-1.50000006e-01, -1.12500034e-01, -7.50000030e-02], [-3.75000238e-02, -2.98023224e-08, 3.74999642e-02], [ 7.49999881e-02, 1.12499952e-01, 1.49999976e-01]], [[-1.56250030e-01, -1.17187500e-01, -7.81250298e-02], [-3.90625000e-02, 0.00000000e+00, 3.90625000e-02], [ 7.81250000e-02, 1.17187500e-01, 1.56250000e-01]], [[-5.85937500e-02, -4.39453125e-02, -2.92968750e-02], [-1.46484375e-02, 0.00000000e+00, 1.46484375e-02], [ 2.92968750e-02, 4.39453125e-02, 5.85937500e-02]], [[ 3.64843786e-01, 3.73632848e-01, 3.82421911e-01], [ 3.91210973e-01, 4.00000036e-01, 4.08789098e-01], [ 4.17578161e-01, 4.26367223e-01, 4.35156286e-01]]]) """ if not isinstance(data, np.ndarray) or data.ndim != 2: raise TypeError('Input data must be a 2D numpy array.') if not isinstance(n_scales, int) or n_scales < 1: raise TypeError('n_scales must be a positive integer.') trans_name = 'BsplineWaveletTransformATrousAlgorithm' trans = load_transform(trans_name)( nb_scale=n_scales, padding_mode="symmetric", ) trans.data = data trans.analysis() res = np.array(trans.analysis_data, dtype=np.float64) return res
[docs]def recombine(data): """Recombine. Recombine a wavelet decomposition. Parameters ---------- data : numpy.ndarray Input 3D-array Returns ------- numpy.ndarray Recombined 2D-array Raises ------ TypeError For invalid input ``data`` type Examples -------- >>> import numpy as np >>> from pysap.astro.denoising.wavelet import recombine >>> np.random.seed(0) >>> data = np.random.ranf((4, 3, 3)) >>> recombine(data) array([[2.65508069, 2.89877487, 2.52493858], [2.17664192, 2.58496449, 1.95360968], [1.21142489, 1.57070222, 2.55727139]]) """ if not isinstance(data, np.ndarray) or data.ndim != 3: raise TypeError('Input data must be a 3D numpy array.') return np.sum(data, axis=0)