www.pudn.com > vc++wavelettransforminimageprocessing.rar > WvltTransDib.cpp
// WvltTrans.cpp: implementation of the CWvltTrans class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "windowsx.h"
#include "math.h"
#include "MainFrm.h"
#include "DynSplitView2.h"
#include "WvltTransDib.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CWvltTransDib::CWvltTransDib()
{
}
CWvltTransDib::~CWvltTransDib()
{
}
/********************************************************************************
*函数描述: Hangbianhuan实现小波行变换
*函数参数: 无
*函数返回值:函数无返回值
*********************************************************************************/
void CWvltTransDib::Hangbianhuan()
{
int i,j;
LONG wide,height;
LPBYTE temp1,m_pData2;
wide=this->GetWidth();
height=this->GetHeight();
m_pData2=this->GetData2();
int nWide=wide/2;
//分配临时数据空间
temp1 = new BYTE[height*wide];
//从设备缓存中获得原始图像数据
for(j = 0; j < height; j ++)
{
for(i = 0; i < nWide; i ++)
{
int w = i *2;
temp1[j*wide+i] = m_pData2[j*wide+w]; //偶
temp1[j*wide+nWide+i] = m_pData2[j*wide+w+1]; //奇
}
}
//通过图像的差分,完成小波变换
for(j=0; jGetWidth();
height=this->GetHeight();
m_pData2=this->GetData2();
int nHeight=height/2;
//分配临时数据空间
temp = new BYTE[height*wide];
for(i = 0; i < wide; i ++)
{
for(j = 0; j < nHeight; j ++)
{
int h = j *2 ;
temp[j*wide+i] = m_pData2[h*wide+i]; //even
temp[(nHeight + j)*wide+i] = m_pData2[(h+1)*wide+i]; //odd
}
}
//通过图像的差分,完成小波变换
for(i=0; iGetWidth();
height=this->GetHeight();
m_pData2=this->GetData2();
//分配临时数据空间
temp1 = new BYTE[height*wide];
temp2 = new BYTE[height*wide];
nWide=wide/pow(2,k);
nHeight=height/pow(2,k);
//完成行变换
for(j = height*(1-1/pow(2,(k-1))); j < height; j ++)
{
for(i = 0; i < nWide; i ++)
{
int w = i *2;
temp1[j*wide+i] = m_pData2[j*wide+w]; //偶
temp1[j*wide+nWide+i] = m_pData2[j*wide+w+1]; //奇
}
}
//通过图像的差分,完成小波变换
for(j= height*(1-1/pow(2,(k-1))); j=1;k--)
{
wide=(this->GetWidth());
height=(this->GetHeight());
m_pData2=this->GetData2();
//分配临时数据空间
temp1 = new BYTE[height*wide];
temp2 = new BYTE[height*wide];
temp3 = new BYTE[height*wide];
nWide=wide/pow(2,k);
nHeight=height/pow(2,k);
memcpy(temp1,m_pData2,height*wide);
for(i=0; iGetWidth();
height=this->GetHeight();
m_pData2=this->GetData2();
nWide=wide/2;
nHeight=height/2;
Once(n);
for(j=0;j=height*(1-1/pow(2,(n-1))))&&(iGetWidth();
height=this->GetHeight();
m_pData2=this->GetData2();
nWide=wide/2;
nHeight=height/2;
LONG lLineBytes = (wide*3+3)/4 *4;
Once(n);
for(j=height*(1-1/pow(2,(n-1)));j