Skip to content

WaveletBuffer

Bases: impl.WaveletBuffer

Universal buffer for the wavelet decomposition

Source code in python/src/wavelet_buffer/wavelet_buffer.py
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
class WaveletBuffer(impl.WaveletBuffer):
    """Universal buffer for the wavelet decomposition"""

    def __init__(
        self,
        signal_shape: List[int],
        signal_number: int,
        decomposition_steps: int,
        wavelet_type: WaveletType,
        decompositions=None,
    ):
        """
        Args:
            signal_shape: for 1D signal with size N [N], for 2DN signal with size MXN, [M,N]
            signal_number: N for 2DN signal, e.g. RGB image would be 3 signals
            decomposition_steps: number of decomposition steps
            wavelet_type: type WaveletType.NONE, DB{1..5}, if it is NONE no wavelet composition
            decompositions: you can create a buffer with initialized subbands
        """
        if decompositions:
            super().__init__(
                signal_shape,
                signal_number,
                decomposition_steps,
                wavelet_type,
                decompositions,
            )
        else:
            super().__init__(
                signal_shape, signal_number, decomposition_steps, wavelet_type
            )

    @staticmethod
    def decomposition_size(
        signal_shape: List[int], decomposition_steps: int, **_kwargs
    ) -> int:
        """
        Estimate number of subbands for specific parameters
        Args:
            signal_shape: for 1D signal with size N [N], for 2DN signal with size MXN, [M,N]
            decomposition_steps: number of decomposition steps
        Returns:
            number of subbands for each signal
        """
        return impl.WaveletBuffer.decomposition_size(
            signal_shape, 0, decomposition_steps, WaveletType.NONE
        )

    @staticmethod
    def parse(blob: bytes) -> "WaveletBuffer":
        """
        Restore serialized buffer from string
        Args:
            blob: serialized buffer
        Returns:
            restored wavelet buffer
        """
        return impl.WaveletBuffer.parse(blob)

    def decompose(self, data: "np.ndarray[np.float32]", denoiser: BaseDenoiser) -> None:
        """
        Decompose signal with wavelet decomposition
        The signal should have a shape which was set in the constructor of the buffer

        Args:
            data: signal to decompose
            denoiser: denoiser algorithm
        Returns:
            RuntimeError if input data isn't valid
        """
        super(WaveletBuffer, self).decompose(data, denoiser)

    def compose(self, scale_factor: int = 0) -> "np.ndarray[np.float32]":
        """
        Compose signal from subbands with given scale factor
        Args:
            scale_factor: who many steps of wavelet decomposition should be re-compose
        Returns:
            restored signals
        """
        return super(WaveletBuffer, self).compose(scale_factor)

    def serialize(self, compression_level: int = 0) -> bytes:
        """
        Serialize and compress buffer to binary string
        Args:
            compression_level: 0- no compression, 31 max compression (2-bits for each value)
        Returns:
            serialized and compressed buffer
        """
        return super(WaveletBuffer, self).serialize(compression_level)

    @property
    def parameters(self) -> WaveletParameters:
        """
        Returns:
            current wavelet parameters
        """
        return super(WaveletBuffer, self).parameters

parameters: WaveletParameters property

Returns:

Type Description
WaveletParameters

current wavelet parameters

__init__(signal_shape, signal_number, decomposition_steps, wavelet_type, decompositions=None)

Parameters:

Name Type Description Default
signal_shape List[int]

for 1D signal with size N [N], for 2DN signal with size MXN, [M,N]

required
signal_number int

N for 2DN signal, e.g. RGB image would be 3 signals

required
decomposition_steps int

number of decomposition steps

required
wavelet_type WaveletType

type WaveletType.NONE, DB{1..5}, if it is NONE no wavelet composition

required
decompositions

you can create a buffer with initialized subbands

None
Source code in python/src/wavelet_buffer/wavelet_buffer.py
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
def __init__(
    self,
    signal_shape: List[int],
    signal_number: int,
    decomposition_steps: int,
    wavelet_type: WaveletType,
    decompositions=None,
):
    """
    Args:
        signal_shape: for 1D signal with size N [N], for 2DN signal with size MXN, [M,N]
        signal_number: N for 2DN signal, e.g. RGB image would be 3 signals
        decomposition_steps: number of decomposition steps
        wavelet_type: type WaveletType.NONE, DB{1..5}, if it is NONE no wavelet composition
        decompositions: you can create a buffer with initialized subbands
    """
    if decompositions:
        super().__init__(
            signal_shape,
            signal_number,
            decomposition_steps,
            wavelet_type,
            decompositions,
        )
    else:
        super().__init__(
            signal_shape, signal_number, decomposition_steps, wavelet_type
        )

compose(scale_factor=0)

Compose signal from subbands with given scale factor

Parameters:

Name Type Description Default
scale_factor int

who many steps of wavelet decomposition should be re-compose

0

Returns:

Type Description
np.ndarray[np.float32]

restored signals

Source code in python/src/wavelet_buffer/wavelet_buffer.py
106
107
108
109
110
111
112
113
114
def compose(self, scale_factor: int = 0) -> "np.ndarray[np.float32]":
    """
    Compose signal from subbands with given scale factor
    Args:
        scale_factor: who many steps of wavelet decomposition should be re-compose
    Returns:
        restored signals
    """
    return super(WaveletBuffer, self).compose(scale_factor)

decompose(data, denoiser)

Decompose signal with wavelet decomposition The signal should have a shape which was set in the constructor of the buffer

Parameters:

Name Type Description Default
data np.ndarray[np.float32]

signal to decompose

required
denoiser BaseDenoiser

denoiser algorithm

required

Returns:

Type Description
None

RuntimeError if input data isn't valid

Source code in python/src/wavelet_buffer/wavelet_buffer.py
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
def decompose(self, data: "np.ndarray[np.float32]", denoiser: BaseDenoiser) -> None:
    """
    Decompose signal with wavelet decomposition
    The signal should have a shape which was set in the constructor of the buffer

    Args:
        data: signal to decompose
        denoiser: denoiser algorithm
    Returns:
        RuntimeError if input data isn't valid
    """
    super(WaveletBuffer, self).decompose(data, denoiser)

decomposition_size(signal_shape, decomposition_steps, **_kwargs) staticmethod

Estimate number of subbands for specific parameters

Parameters:

Name Type Description Default
signal_shape List[int]

for 1D signal with size N [N], for 2DN signal with size MXN, [M,N]

required
decomposition_steps int

number of decomposition steps

required

Returns:

Type Description
int

number of subbands for each signal

Source code in python/src/wavelet_buffer/wavelet_buffer.py
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
@staticmethod
def decomposition_size(
    signal_shape: List[int], decomposition_steps: int, **_kwargs
) -> int:
    """
    Estimate number of subbands for specific parameters
    Args:
        signal_shape: for 1D signal with size N [N], for 2DN signal with size MXN, [M,N]
        decomposition_steps: number of decomposition steps
    Returns:
        number of subbands for each signal
    """
    return impl.WaveletBuffer.decomposition_size(
        signal_shape, 0, decomposition_steps, WaveletType.NONE
    )

parse(blob) staticmethod

Restore serialized buffer from string

Parameters:

Name Type Description Default
blob bytes

serialized buffer

required

Returns:

Type Description
WaveletBuffer

restored wavelet buffer

Source code in python/src/wavelet_buffer/wavelet_buffer.py
82
83
84
85
86
87
88
89
90
91
@staticmethod
def parse(blob: bytes) -> "WaveletBuffer":
    """
    Restore serialized buffer from string
    Args:
        blob: serialized buffer
    Returns:
        restored wavelet buffer
    """
    return impl.WaveletBuffer.parse(blob)

serialize(compression_level=0)

Serialize and compress buffer to binary string

Parameters:

Name Type Description Default
compression_level int

0- no compression, 31 max compression (2-bits for each value)

0

Returns:

Type Description
bytes

serialized and compressed buffer

Source code in python/src/wavelet_buffer/wavelet_buffer.py
116
117
118
119
120
121
122
123
124
def serialize(self, compression_level: int = 0) -> bytes:
    """
    Serialize and compress buffer to binary string
    Args:
        compression_level: 0- no compression, 31 max compression (2-bits for each value)
    Returns:
        serialized and compressed buffer
    """
    return super(WaveletBuffer, self).serialize(compression_level)