www.pudn.com > EZW_.rar > wtransform.h
#ifndef _WTRANSFORM_ #define _WTRANSFORM_ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /* Port to C from C++ * * Mow-Song, Ng 2/9/2002 * msng@mmu.edu.my * http://www.pesona.mmu.edu.my/~msng * * I do not claim copyright to the code, but if you use them or modify them, * please drop me a mail. * */ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /* Original copyright info */ /*---------------------------------------------------------------------------*/ // Baseline Wavelet Transform Coder Construction Kit // // Geoff Davis // gdavis@cs.dartmouth.edu // http://www.cs.dartmouth.edu/~gdavis // // Copyright 1996 Geoff Davis 9/11/96 // // Permission is granted to use this software for research purposes as // long as this notice stays attached to this software. // /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /* Some note * --------- * LL | LH * ------------- * HL | HH * * LH -> HPF row, LPF col * HL -> LPF row, HPF col * HH -> HPF row, HPF col * * Note that we can have the following convention: * The lowest scale subband, LL_0 has scale = 0, then we have LH_1, HL_1 and HH_1, * whihc have scale = 1, LH_2, HL_2 and HH_2 which have scale = 2 and so on. * To access a subband coeff, we specifiy the scale and orientation (0, 1 or 2), * and its (y,x) location in the subband, i.e coeff (y, x) in HL_2 is access via * * idx = 3*scale-2+orientation --> 3*2-2+1 = 5 * coeff = transform->subbandPtr[idx][y*transform->subbandHSize[idx] + x] * * In this convention, scale=0 has to be treated as special case. * * */ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ #include#include #include #include "wavelet.h" #include "image.h" #include "memchk.h" typedef struct WaveletTransformStruct{ int hsize, vsize; Real *value; WAVELET *wavelet; int nsteps; int symmetric; int nSubbands; int *subbandSize; int *subbandHSize; int *subbandVSize; Real **subbandPtr; } WTRANSFORM; WTRANSFORM *WaveletTransformAlloc(WAVELET *wavelet, FIMAGE *image, int nsteps, int symmetric); WTRANSFORM *WaveletTransformAllocBlank(WAVELET *wavelet, int hsize, int vsize, int nsteps, int symmetric); WTRANSFORM *WaveletTransformAllocCopy(WTRANSFORM *WaveletTransformSrc); void WaveletTransformDealloc(WTRANSFORM *WaveletTransform); void WaveletTransformForward(WTRANSFORM *WaveletTransform, FIMAGE *image, WAVELET *wavelet, int nsteps, int symmetric); void WaveletTransformInvert(WTRANSFORM *WaveletTransform, FIMAGE *invertedImage); Real WaveletTransformGetValue(WTRANSFORM *WaveletTransform, int scale, int orientation, int x, int y); void WaveletTransformSetValue(WTRANSFORM *WaveletTransform, int scale, int orientation, int x, int y, Real val); FIMAGE *WaveletTransformInvertThis(WTRANSFORM *WaveletTransform); void MallatToLinear(WTRANSFORM *WaveletTransform, Real *mallat); void LinearToMallat(WTRANSFORM *WaveletTransform, Real *mallat); void WaveletTransformInit(WTRANSFORM *WaveletTransform); void WaveletTransformFreeAll(WTRANSFORM *WaveletTransform); void WaveletTransformError(char *fmt, ...); void WaveletTransformWarning(char *fmt, ...); FIMAGE *WaveletTransformCodeCoeff(WTRANSFORM *WaveletTransform, int DrawLine); void WaveletTransformWriteCoeffToText(WTRANSFORM *WaveletTransform, char *filename); /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ #endif