/*
 * class PyramidTransform
 *
 * $Date$
 * $Revision$
 *
 */

#ifndef PYRAMID_TRANSFORM_HH__
#define PYRAMID_TRANSFORM_HH__

#include "Wave/WaveletTransform.hh"
#include "WImage/miscdefs.h"

/** 
 * @addtogroup Wave 
 * @{ */

/** 
 * A Pyramid Transform. The transform is two-dimensional, 
 * it thus works on images.
 */
class 
PyramidTransform : public WaveletTransform
{
public:
  /** Constructor. Calls the superclass' constructor. 
   * @param img
   * the image
   * @param fil
   * the filter (wavelet)  */
  PyramidTransform (Image &img, FilterSet &fil) 
    : WaveletTransform (img, fil) { }
protected:
  /** Perform a Pyramid transform on the image. 
   * @param steps
   * the number of transform steps */
  virtual void doanalysis (int steps);
  /** Perform an inverse Pyramid transform on the image. 
   * @param steps
   * the number of inverse transform steps 
   * @param prevSteps 
   * if greater than 0, the number of previous decomposition steps
   * to assume. This is necessary to reconstruct images that are
   * not square and have side lengths which are not powers of two. */
  virtual void dosynthesis (int steps, int prevSteps = 0);
}; /* class PyramidTransform */

/** @} */

#endif /* PYRAMID_TRANSFORM_HH__ */


