jj2000.j2k.wavelet.analysis
Class SubbandAn

java.lang.Object
  |
  +--jj2000.j2k.wavelet.Subband
        |
        +--jj2000.j2k.wavelet.analysis.SubbandAn

public class SubbandAn
extends Subband

This class represents a subband in a bidirectional tree structure that describes the subband decomposition for a wavelet transform, specifically for the analysis side.

The element can be either a node or a leaf of the tree. If it is a node then ther are 4 descendants (LL, HL, LH and HH). If it is a leaf there are no descendants.

The tree is bidirectional. Each element in the tree structure has a "parent", which is the subband from which the element was obtained by decomposition. The only exception is the root element which has no parent (i.e.it's null), for obvious reasons.


Field Summary
 AnWTFilter hFilter
          The horizontal analysis filter used to decompose this subband.
 float l2Norm
          The L2-norm of the synthesis basis waveform of this subband, applicable to "leafs" only.
 SubbandAn parent
          The reference to the parent of this subband.
 float stepWMSE
          The contribution to the MSE or WMSE error that would result in the image if there was an error of exactly one quantization step size in the sample of the subband.
 SubbandAn subb_HH
          The reference to the HH subband resulting from the decomposition of this subband.
 SubbandAn subb_HL
          The reference to the HL subband (horizontal high-pass) resulting from the decomposition of this subband.
 SubbandAn subb_LH
          The reference to the LH subband (vertical high-pass) resulting from the decomposition of this subband.
 SubbandAn subb_LL
          The reference to the LL subband resulting from the decomposition of this subband.
 AnWTFilter vFilter
          The vertical analysis filter used to decompose this subband.
 
Fields inherited from class jj2000.j2k.wavelet.Subband
anGainExp, h, isNode, level, nomCBlkH, nomCBlkW, numCb, orientation, resLvl, sbandIdx, ulcx, ulcy, ulx, uly, w, WT_ORIENT_HH, WT_ORIENT_HL, WT_ORIENT_LH, WT_ORIENT_LL
 
Constructor Summary
SubbandAn()
          Creates a SubbandAn element with all the default values.
SubbandAn(int w, int h, int ulcx, int ulcy, int lvls, WaveletFilter[] hfilters, WaveletFilter[] vfilters)
          Creates the top-level node and the entire subband tree, with the top-level dimensions, the number of decompositions, and the decomposition tree as specified.
 
Method Summary
private  void assignL2Norm(float l2n)
          Assigns the given L2-norm to the first leaf that does not have an L2-norm value yet (i.e.
private  void calcBasisWaveForms(float[][] wfs)
          Calculates the basis waveform of the first leaf for which the L2-norm has not been calculated yet.
private  void calcL2Norms()
          Calculates the L2-norm of the sythesis waveforms of every leaf in the tree.
 Subband getHH()
          Returns the HH child subband of this subband.
 Subband getHL()
          Returns the HL (horizontal high-pass) child subband of this subband.
 WaveletFilter getHorWFilter()
          This function returns the horizontal wavelet filter relevant to this subband
 Subband getLH()
          Returns the LH (vertical high-pass) child subband of this subband.
 Subband getLL()
          Returns the LL child subband of this subband.
 Subband getParent()
          Returns the parent of this subband.
 WaveletFilter getVerWFilter()
          This function returns the vertical wavelet filter relevant to this subband
protected  Subband split(WaveletFilter hfilter, WaveletFilter vfilter)
          Splits the current subband in its four subbands.
 
Methods inherited from class jj2000.j2k.wavelet.Subband
getNextResLevel, getSubband, getSubbandByIdx, initChilds, nextSubband, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

parent

public SubbandAn parent
The reference to the parent of this subband. It is null for the root element. It is null by default.


subb_LL

public SubbandAn subb_LL
The reference to the LL subband resulting from the decomposition of this subband. It is null by default.


subb_HL

public SubbandAn subb_HL
The reference to the HL subband (horizontal high-pass) resulting from the decomposition of this subband. It is null by default.


subb_LH

public SubbandAn subb_LH
The reference to the LH subband (vertical high-pass) resulting from the decomposition of this subband. It is null by default.


subb_HH

public SubbandAn subb_HH
The reference to the HH subband resulting from the decomposition of this subband. It is null by default.


hFilter

public AnWTFilter hFilter
The horizontal analysis filter used to decompose this subband. This is applicable to "node" elements only. The default value is null.


vFilter

public AnWTFilter vFilter
The vertical analysis filter used to decompose this subband. This is applicable to "node" elements only. The default value is null.


l2Norm

public float l2Norm
The L2-norm of the synthesis basis waveform of this subband, applicable to "leafs" only. By default it is -1 (i.e. not calculated yet).


stepWMSE

public float stepWMSE
The contribution to the MSE or WMSE error that would result in the image if there was an error of exactly one quantization step size in the sample of the subband. This value is expressed relative to a nominal dynamic range in the image domain of exactly 1.0. This field contains valid data only after quantization 9See Quantizer).

See Also:
Quantizer
Constructor Detail

SubbandAn

public SubbandAn()
Creates a SubbandAn element with all the default values. The dimensions are (0,0) and the upper left corner is (0,0).


SubbandAn

public SubbandAn(int w,
                 int h,
                 int ulcx,
                 int ulcy,
                 int lvls,
                 WaveletFilter[] hfilters,
                 WaveletFilter[] vfilters)
Creates the top-level node and the entire subband tree, with the top-level dimensions, the number of decompositions, and the decomposition tree as specified.

This constructor just calls the same constructor of the super class, and then calculates the L2-norm (or energy weight) of each leaf.

This constructor does not initialize the value of the magBits or stepWMSE member variables. This variables are normally initialized by the quantizer (see Quantizer).

Parameters:
w - The top-level width
h - The top-level height
ulcx - The horizontal coordinate of the upper-left corner with respect to the canvas origin, in the component grid.
ulcy - The vertical coordinate of the upper-left corner with respect to the canvas origin, in the component grid.
lvls - The number of levels (or LL decompositions) in the tree.
hfilters - The horizontal wavelet analysis filters for each resolution level, starting at resolution level 0.
vfilters - The vertical wavelet analysis filters for each resolution level, starting at resolution level 0.
See Also:
Subband.Subband(int,int,int,int,int, WaveletFilter[],WaveletFilter[]), Quantizer
Method Detail

getParent

public Subband getParent()
Returns the parent of this subband. The parent of a subband is the subband from which this one was obtained by decomposition. The root element has no parent subband (null).

Specified by:
getParent in class Subband
Returns:
The parent subband, or null for the root one.

getLL

public Subband getLL()
Returns the LL child subband of this subband.

Specified by:
getLL in class Subband
Returns:
The LL child subband, or null if there are no childs.

getHL

public Subband getHL()
Returns the HL (horizontal high-pass) child subband of this subband.

Specified by:
getHL in class Subband
Returns:
The HL child subband, or null if there are no childs.

getLH

public Subband getLH()
Returns the LH (vertical high-pass) child subband of this subband.

Specified by:
getLH in class Subband
Returns:
The LH child subband, or null if there are no childs.

getHH

public Subband getHH()
Returns the HH child subband of this subband.

Specified by:
getHH in class Subband
Returns:
The HH child subband, or null if there are no childs.

split

protected Subband split(WaveletFilter hfilter,
                        WaveletFilter vfilter)
Splits the current subband in its four subbands. It changes the status of this element (from a leaf to a node, and sets the filters), creates the childs and initializes them. An IllegalArgumentException is thrown if this subband is not a leaf.

It uses the initChilds() method to initialize the childs.

Specified by:
split in class Subband
Parameters:
hfilter - The horizontal wavelet filter used to decompose this subband. It has to be a AnWTFilter object.
vfilter - The vertical wavelet filter used to decompose this subband. It has to be a AnWTFilter object.
Returns:
A reference to the LL leaf (subb_LL).
See Also:
Subband.initChilds()

calcBasisWaveForms

private void calcBasisWaveForms(float[][] wfs)
Calculates the basis waveform of the first leaf for which the L2-norm has not been calculated yet. This method searches recursively for the first leaf for which the value has not been calculated yet, and then calculates the L2-norm on the return path.

The wfs argument should be a size 2 array of float arrays (i.e. 2D array) and it must be of length 2 (or more). When returning, wfs[0] will contain the line waveform, and wfs[1] will contain the column waveform.

This method can not be called on an element that ahs a non-negative value in l2Norm, since that means that we are done.

Parameters:
wfs - An size 2 array where the line and column waveforms will be returned.

assignL2Norm

private void assignL2Norm(float l2n)
Assigns the given L2-norm to the first leaf that does not have an L2-norm value yet (i.e. l2norm is negative). The search is done recursively and in the same order as that of the calcBasisWaveForms() method, so that this method is used to assigne the l2norm of the previously computed waveforms.

This method can not be called on an element that ahs a non-negative value in l2Norm, since that means that we are done.

Parameters:
l2n - The L2-norm to assign.

calcL2Norms

private void calcL2Norms()
Calculates the L2-norm of the sythesis waveforms of every leaf in the tree. This method should only be called on the root element.


getHorWFilter

public WaveletFilter getHorWFilter()
This function returns the horizontal wavelet filter relevant to this subband

Specified by:
getHorWFilter in class Subband
Returns:
The horizontal wavelet filter

getVerWFilter

public WaveletFilter getVerWFilter()
This function returns the vertical wavelet filter relevant to this subband

Specified by:
getVerWFilter in class Subband
Returns:
The vertical wavelet filter