www.pudn.com > Imagewavelet.rar > omlib.cpp


// omlib.cpp: implementation of the Comlib class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "math.h" 
#include "omlib.h" 
 
//申请空间函数 
unsigned char **fspace_2d(int row,int col ) 
{ 
	unsigned char **pic; 
	pic=new unsigned char *[row]; 
	for (int i=0;i255) 
				dat=255; 
			image_out[j][i]=dat; 
		} 
	} 
} 
//小波变换 
void Wavelet1d(double *s0,int s_len,double *p,double *q,int sup, double *s1,double *w1) 
{ 
	int n,k; 
	int index; 
	for(k=0;kmaxs) maxs=value; 
			if(valuemaxv) maxv=value; 
			if(valuemaxh) maxh=value; 
			if(valuemaxd) maxd=value; 
			if(value>=1) 
		{ 
			bit=(ii&1)|bit; 
			if(++k==ex) 
				break; 
		} 
		b[i]=a[bit]; 
	} 
	for(i=0;imax) 
			max=norm; 
		} 
	} 
	for(j=0;j255) 
				data=255; 
			if(data<0) 
				data=0; 
			image_out[j][i]=(unsigned char)data; 
		} 
	} 
	free(ar); 
	free(ai); 
	return 0; 
} 
//对于任何尺寸的图像的一次小波变换 
void Once(unsigned char **image_in,unsigned char **image_out,int xsize,int ysize) 
{ 
	int i,j; 
	LONG nWide,nHeight; 
	LPBYTE temp1, temp2,m_pData2; 
	for(int k=1;k<=1;k++) 
    { 
		//分配临时数据空间 
		temp1 = new BYTE[xsize*ysize]; 
		temp2 = new BYTE[xsize*ysize]; 
		nWide=xsize/pow(2,k); 
		nHeight=ysize/pow(2,k); 
		//完成行变换 
		for(j = ysize*(1-1/pow(2,(k-1))); j < ysize; j ++)             
		{ 
			for(i = 0; i < nWide; i ++)            
			{ 
				int w = i *2; 
				temp1[j*xsize+i] = image_in[j][w];		//偶 
				temp1[j*xsize+nWide+i] = image_in[j][w+1];	//奇 
			} 
		} 
		//通过图像的差分,完成小波变换 
		for(j= ysize*(1-1/pow(2,(k-1))); j