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