Wavelet Packets¶
PyWavelets implements one-dimensional, two-dimensional and n-dimensional wavelet packet transform structures. The higher dimensional structures almost completely sharing programming interface with the one-dimensional tree structure.
In order to achieve this simplification, a new inheritance scheme was used
in which a BaseNode
base node class is a superclass for the
Node
, Node2D
and NodeND
classes.
The node classes are used as data wrappers and can be organized in trees (
binary trees for 1D transform case, quad-trees for the 2D one and 2**N-ary
trees in ND). They are also superclasses to the WaveletPacket
,
WaveletPacket2D
and WaveletPacketND
classes that
are used as the decomposition tree roots and contain a couple additional
methods.
Here 1D, 2D and ND refer to the number of axes of the data to be transformed. All wavelet packet objects can operate on general n-dimensional arrays, but the 1D or 2D classes apply transforms along only 1 or 2 dimensions. The ND classes allow transforms over an arbtirary number of axes of n-dimensional data.
The below diagram illustrates the inheritance tree:
BaseNode
- common interface for 1D and 2D nodes:
Node
- data carrier node in a 1D decomposition tree
WaveletPacket
- 1D decomposition tree root nodeNode2D
- data carrier node in a 2D decomposition tree
WaveletPacket2D
- 2D decomposition tree root nodeNodeND
- data carrier node in a ND decomposition tree
WaveletPacketND
- ND decomposition tree root node
BaseNode - a common interface of WaveletPacket, WaveletPacket2D and WaveletPacketND¶
-
class
pywt.
BaseNode
¶ Note
The BaseNode is a base class for
Node
,Node2D
, andNodeND
. It should not be used directly unless creating a new transformation type. It is included here to document the common interface of the node and wavelet packet transform classes.-
__init__
(parent, data, node_name)¶ Parameters: - parent – parent node. If parent is
None
then the node is considered detached. - data – The data associated with the node. An n-dimensional numeric array.
- node_name – a name identifying the coefficients type.
See
Node.node_name
andNode2D.node_name
for information on the accepted subnodes names.
- parent – parent node. If parent is
-
data
¶ Data associated with the node. An n-dimensional numeric array.
-
parent
¶ Parent node. Used in tree navigation.
None
for root node.
-
axes
¶ A tuple of ints containing the axes along which the wavelet packet transform is to be applied.
-
mode
¶ Signal extension mode for the
dwt()
(dwt2()
) andidwt()
(idwt2()
) decomposition and reconstruction functions. Inherited from parent node.
-
level
¶ Decomposition level of the current node.
0
for root (original data),1
for the first decomposition level, etc.
-
path
¶ Path string defining position of the node in the decomposition tree.
-
path_tuple
¶ A version of
path
, but in tuple form rather than as a single string. The tuple form is easier to work with for n-dimensional transforms. The length of the tuple will be equal to the number of levels of decomposition at the current node.
-
node_name
¶ Node name describing
data
coefficients type of the current subnode.See
Node.node_name
andNode2D.node_name
.
-
maxlevel
¶ Maximum allowed level of decomposition. Evaluated from parent or child nodes.
-
has_any_subnode
¶ Checks if node has any subnodes (is not a leaf node).
-
reconstruct
([update=False])¶ Performs Inverse Discrete Wavelet Transform on subnodes coefficients and returns reconstructed data for the current level.
Parameters: update – If set, the data
attribute will be updated with the reconstructed value.Note
Descends to subnodes and recursively calls
reconstruct()
on them.
-
get_subnode
(part[, decompose=True])¶ Returns subnode or None (see decomposition flag description).
Parameters: - part – Subnode name
- decompose – If True and subnode does not exist, it will be created using coefficients from the DWT decomposition of the current node.
-
__getitem__
(path)¶ Used to access nodes in the decomposition tree by string
path
.Parameters: path – Path string composed from valid node names. See Node.node_name
andNode2D.node_name
for node naming convention.Similar to
get_subnode()
method with decompose=True, but can access nodes on any level in the decomposition tree.If node does not exist yet, it will be created by decomposition of its parent node.
-
__setitem__
(path, data)¶ Used to set node or node’s data in the decomposition tree. Nodes are identified by string
path
.Parameters: - path – Path string composed from valid node names.
See
Node.node_name
andNode2D.node_name
for node naming convention. - data – numeric array or
BaseNode
subclass.
- path – Path string composed from valid node names.
See
-
__delitem__
(path)¶ Used to delete node from the decomposition tree.
Parameters: path – Path string composed from valid node names. See Node.node_name
andNode2D.node_name
for node naming convention.
-
get_leaf_nodes
([decompose=False])¶ Traverses through the decomposition tree and collects leaf nodes (nodes without any subnodes).
Parameters: decompose – If decompose
isTrue
, the method will try to decompose the tree up to themaximum level
.
-
walk
(self, func[, args=()[, kwargs={}[, decompose=True]]])¶ Traverses the decomposition tree and calls
func(node, *args, **kwargs)
on every node. If func returnsTrue
, descending to subnodes will continue.Parameters: - func –
callable accepting
BaseNode
as the first param and optional positional and keyword arguments:func(node, *args, **kwargs)
- decompose – If
decompose
isTrue
(default), the method will also try to decompose the tree up to themaximum level
.
Args: arguments to pass to the
func
Kwargs: keyword arguments to pass to the
func
- func –
-
walk_depth
(self, func[, args=()[, kwargs={}[, decompose=False]]])¶ Similar to
walk()
but traverses the tree in depth-first order.Parameters: - func –
callable accepting
BaseNode
as the first param and optional positional and keyword arguments:func(node, *args, **kwargs)
- decompose – If
decompose
isTrue
, the method will also try to decompose the tree up to themaximum level
.
Args: arguments to pass to the
func
Kwargs: keyword arguments to pass to the
func
- func –
-
WaveletPacket and Node¶
-
class
pywt.
Node
(BaseNode)¶ -
node_name
¶ Node name describing
data
coefficients type of the current subnode.- For
WaveletPacket
case it is just as indwt()
: a
- approximation coefficientsd
- details coefficients
- For
-
-
class
pywt.
WaveletPacket
(Node)¶ -
__init__
(data, wavelet[, mode='symmetric'[, maxlevel=None[, axis=-1]]])¶ Parameters: - data – data associated with the node. N-dimensional numeric array.
- wavelet – Wavelet to use in the transform. This can be a name of the wavelet from the
wavelist()
list or aWavelet
object instance. - mode – Signal extension mode for the
dwt()
andidwt()
decomposition and reconstruction functions. - maxlevel – Maximum allowed level of decomposition. If not specified
it will be calculated based on the
wavelet
anddata
length usingpywt.dwt_max_level()
. - axis – The axis of the array that is to be transformed.
-
get_level
(level[, order="natural"[, decompose=True]])¶ Collects nodes from the given level of decomposition.
Parameters: - level – Specifies decomposition
level
from which the nodes will be collected. - order – Specifies nodes order - natural (
natural
) or frequency (freq
). - decompose – If set then the method will try to decompose the data up
to the specified
level
.
If nodes at the given level are missing (i.e. the tree is partially decomposed) and the
decompose
is set toFalse
, only existing nodes will be returned.- level – Specifies decomposition
-
reconstruct
([update=True])¶ Reconstruct data from the subnodes.
Parameters: update – A boolean indicating whether the coefficients of the current node and its subnodes will be replaced with values from the reconstruction.
-
WaveletPacket2D and Node2D¶
-
class
pywt.
Node2D
(BaseNode)¶ -
node_name
¶ - For
WaveletPacket2D
case it is just as indwt2()
: a
- approximation coefficients (LL)h
- horizontal detail coefficients (LH)v
- vertical detail coefficients (HL)d
- diagonal detail coefficients (HH)
- For
-
expand_2d_path(self, path):
-
-
class
pywt.
WaveletPacket2D
(Node2D)¶ -
__init__
(data, wavelet[, mode='symmetric'[, maxlevel=None[, axes=(-2, -1)]]])¶ Parameters: - data – data associated with the node. N-dimensional numeric array.
- wavelet – Wavelet to use in the transform. This can be a name of the wavelet from the
wavelist()
list or aWavelet
object instance. - mode – Signal extension mode for the
dwt()
andidwt()
decomposition and reconstruction functions. - maxlevel – Maximum allowed level of decomposition. If not specified
it will be calculated based on the
wavelet
anddata
length usingpywt.dwt_max_level()
. - axes – The axes of the array that are to be transformed.
-
get_level
(level[, order="natural"[, decompose=True]])¶ Collects nodes from the given level of decomposition.
Parameters: - level – Specifies decomposition
level
from which the nodes will be collected. - order – Specifies nodes order - natural (
natural
) or frequency (freq
). - decompose – If set then the method will try to decompose the data up
to the specified
level
.
If nodes at the given level are missing (i.e. the tree is partially decomposed) and the
decompose
is set toFalse
, only existing nodes will be returned.- level – Specifies decomposition
-
reconstruct
([update=True])¶ Reconstruct data from the subnodes.
Parameters: update – A boolean indicating whether the coefficients of the current node and its subnodes will be replaced with values from the reconstruction.
-
WaveletPacketND and NodeND¶
-
class
pywt.
NodeND
(BaseNode)¶ -
node_name
¶ - For
WaveletPacketND
case it is just as indwtn()
: - in 1D it has keys ‘a’ and ‘d’
- in 2D it has keys ‘aa’, ‘ad’, ‘da’, ‘dd’
- in 3D it has keys ‘aaa’, ‘aad’, ‘ada’, ‘daa’, …, ‘ddd’
- For
-
-
class
pywt.
WaveletPacketND
(NodeND)¶ -
__init__
(data, wavelet[, mode='symmetric'[, maxlevel=None[, axes=None]]])¶ Parameters: - data – data associated with the node. N-dimensional numeric array.
- wavelet – Wavelet to use in the transform. This can be a name of the wavelet from the
wavelist()
list or aWavelet
object instance. - mode – Signal extension mode for the
dwt()
andidwt()
decomposition and reconstruction functions. - maxlevel – Maximum allowed level of decomposition. If not specified
it will be calculated based on the
wavelet
anddata
length usingpywt.dwt_max_level()
. - axes – The axes of the array that are to be transformed.
-
get_level
(level[, decompose=True])¶ Collects nodes from the given level of decomposition.
Parameters: - level – Specifies decomposition
level
from which the nodes will be collected. - decompose – If set then the method will try to decompose the data up
to the specified
level
.
If nodes at the given level are missing (i.e. the tree is partially decomposed) and the
decompose
is set toFalse
, only existing nodes will be returned.- level – Specifies decomposition
-
reconstruct
([update=True])¶ Reconstruct data from the subnodes.
Parameters: update – A boolean indicating whether the coefficients of the current node and its subnodes will be replaced with values from the reconstruction.
-