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