📄 sptransform.cpp
字号:
// SPTransform.cpp: implementation of the CSPTransform class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "HIC.h"
#include "SPTransform.h"
#include "math.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSPTransform::CSPTransform()
{
}
CSPTransform::~CSPTransform()
{
}
void CSPTransform::Dwt1D(int *buffer, int buflen)
{
float *l,*h,*d;
float *h1;
l=new float[buflen/2];
h=new float [buflen/2];
d=new float [buflen/2];
h1=new float [buflen/2];
//S变换
int i,j;
for(i=0;i<buflen;i=i+2)
{
l[i/2]=int(floor((buffer[i]+buffer[i+1])/2.));
h[i/2]=buffer[i]-buffer[i+1];
}
//预测
for(i=1;i<buflen/2-1;i++)
{
h1[i]=(2*l[i-1]+l[i]-3*l[i+1]-2*h[i+1])/8;
d[i]=h[i]-int(floor((h1[i]+0.5)));
}
//边界处理
h1[0]=(l[0]-l[1])/4;
h1[buflen/2-1]=(l[buflen/2-2]-l[buflen/2-1])/4;
d[0]=h[0]-int(floor(h1[0]+0.5));
d[buflen/2-1]=h[buflen/2-1]-int(floor(h1[buflen/2-1]+0.5));
for(i=0;i<buflen/2;i++)
{
buffer[i]=l[i];
buffer[buflen/2+i]=d[i];
}
delete []l;
delete []h;
delete []d;
delete []h1;
}
void CSPTransform::Dwt1D(int *buffer, int width, int lv)
{
int j,k;
int nwidth;
int *pbuffer;
for ( k=0; k<lv; k++)
{
nwidth=width>>k;
pbuffer = new int [nwidth];
for(j=0; j<nwidth; j++)
*(pbuffer+j) = *(buffer+j);
Dwt1D(pbuffer,nwidth);
for(j=0; j<nwidth; j++)
*(buffer+j) = *(pbuffer+j);
}
delete []pbuffer;
}
void CSPTransform::IDwt1D(int *buffer, int buflen)
{
float *l,*h,*d;
float *h1;
l=new float[buflen/2];
h=new float[buflen/2];
d=new float[buflen/2];
h1=new float[buflen/2];
int i,j;
for(i=0;i<buflen/2;i++)
{
l[i]=buffer[i];
d[i]=buffer[buflen/2+i];
}
h1[0]=(l[0]-l[1])/4;
h1[buflen/2-1]=(l[buflen/2-2]-l[buflen/2-1])/4;
h[0]=d[0]+int(floor(h1[0]+0.5));
h[buflen/2-1]=d[buflen/2-1]+int(floor(h1[buflen/2-1]+0.5));
for(i=0;i<buflen/2-2;i++)
{
h1[buflen/2-2-i]=(2*l[buflen/2-3-i]+l[buflen/2-2-i]-3*l[buflen/2-1-i]-2*h[buflen/2-1-i])/8;
h[buflen/2-2-i]=d[buflen/2-2-i]+int(floor(h1[buflen/2-2-i]+0.5));
}
for(i=0;i<buflen;i=i+2)
{
buffer[i]=int(floor((2*l[i/2]+h[i/2])/2+0.5));
buffer[i+1]=int(floor((2*l[i/2]-h[i/2])/2+0.5));
}
delete []l;
delete []h;
delete []d;
delete []h1;
}
void CSPTransform::Dwt2D(int *buffer, int height, int width, int lv)
{
int i,j,k;
int nheight,nwidth;
int *pbuffer1,*pbuffer2;
for ( k=0; k<lv; k++)
{
nheight=height>>k;
nwidth=width>>k;
pbuffer1 = new int [nheight];
pbuffer2 = new int [nwidth];
//列变换
for(j=0; j<nwidth; j++)
{
for (i=0; i<nheight; i++)
*(pbuffer2+i)= *(buffer+i*width+j);
Dwt1D(pbuffer2,nheight);
for(i=0; i<nheight; i++)
*(buffer+i*width+j) = *(pbuffer2+i);
}
delete []pbuffer2;
//行变换
for (i=0; i<nheight; i++)
{
for(j=0; j<nwidth; j++)
*(pbuffer1+j) = *(buffer+i*width+j);
Dwt1D(pbuffer1,nwidth);
for(j=0; j<nwidth; j++)
*(buffer+i*width+j) = *(pbuffer1+j);
}
delete []pbuffer1;
}
}
void CSPTransform::IDwt1D(int *buffer, int width, int lv)
{
int j,k;
int nwidth;
int *pbuffer;
for (k=0; k<lv; k++)
{
nwidth=width>>(lv-k-1);
pbuffer = new int [nwidth];
for(j=0; j<nwidth; j++)
*(pbuffer+j)=*(buffer+j);
IDwt1D(pbuffer,nwidth);
for(j=0; j<nwidth; j++)
*(buffer+j) = *(pbuffer+j);
}
delete []pbuffer;
}
void CSPTransform::IDwt2D(int *buffer, int height, int width, int lv)
{
int i,j,k;
int nheight,nwidth;
int *pbuffer1,*pbuffer2;
for (k=0; k<lv; k++)
{
nheight=height>>(lv-k-1);
nwidth=width>>(lv-k-1);
pbuffer1 = new int [nheight];
pbuffer2 = new int [nwidth];
//行反变换
for (i=0; i<nheight; i++)
{
for(j=0; j<nwidth; j++)
*(pbuffer2+j)=*(buffer+i*width+j);
IDwt1D(pbuffer2,nwidth);
for(j=0; j<nwidth; j++)
*(buffer+i*width+j) = *(pbuffer2+j);
}
delete []pbuffer2;
//列反变换
for(j=0; j<nwidth; j++)
{
for (i=0; i<nheight; i++)
*(pbuffer1+i) = *(buffer+i*width+j);
IDwt1D(pbuffer1,nheight);
for(i=0; i<nheight; i++)
*(buffer+i*width+j) = *(pbuffer1+i);
}
delete []pbuffer1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -