?? wfilter.cpp
字號:
// WFilter.cpp: implementation of the CWFilter class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "wavelet.h"
#include "WFilter.h"
#include "WaveletTrans.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CWFilter::CWFilter()
{
}
CWFilter::~CWFilter()
{
}
void CWFilter::DWT_Inverse(int nHeight, int nWidth, int nLayer)
{
int iHeight = nHeight / 4, iWidth = nWidth / 4;
int iHeight_H = iHeight / 2, iWidth_H = iWidth / 2;
short **spTransData0, **spTransData1;
spTransData0 = new short * [nHeight];
spTransData1 = new short * [nHeight];
for(int i = 0; i < nHeight; i++)
{
spTransData0[i] = new short [nWidth];
spTransData1[i] = new short [nWidth];
}
CWaveletTrans WTrans;
for( i = nLayer; i >= 1; i--)
{
WTrans.DWTi_Once(spTransData0, spTransData1, m_FilterData, iHeight, iHeight_H, iWidth, iWidth_H, i, 1.414);
iHeight <<= 1; iWidth <<= 1;
iHeight_H = iHeight / 2; iWidth_H = iWidth / 2;
}
for(int y = 0; y < nHeight; y++)
{
for(int x = 0; x < nWidth; x++)
{
m_FilterData[y][x] = spTransData0[y][x];
}
}
}
void CWFilter::HPass_Filter(short **pData, int nHeight, int nWidth, int nLayer)
{
short **spOriginData, **spTransData0, **spTransData1;
int iHeight = nHeight, iWidth = nWidth;
spOriginData = pData;
spTransData0 = new short *[nHeight];
spTransData1 = new short *[nHeight];
m_FilterData = new short * [nHeight];
for(int i = 0; i < nHeight; i ++)
{
spTransData0[i] = new short [nWidth];
spTransData1[i] = new short [nWidth];
m_FilterData[i] = new short [nWidth];
for(int j = 0; j < nWidth; j ++)
{
m_FilterData[i][j] = 0;
}
}
CWaveletTrans *Trans;
Trans->DWT_Three(spOriginData, spTransData0, spTransData1, nHeight, nHeight/2, nWidth, nWidth/2, nLayer, 1.414);
for(i = (int) nHeight / 8; i < nHeight; i ++)
{
for(int j = (int) nWidth / 8; j < nWidth ; j ++)
{
m_FilterData[i][j] = spTransData1[i][j];
}
}
delete spTransData0;
delete spTransData1;
DWT_Inverse(iHeight, iWidth, 3);
}
void CWFilter::HPass_Filter2(short **pData, int nHeight, int nWidth, int nLayer)
{
short **spOriginData, **spTransData0, **spTransData1;
int iHeight = nHeight, iWidth = nWidth;
spOriginData = pData;
spTransData0 = new short *[nHeight];
spTransData1 = new short *[nHeight];
m_FilterData = new short * [nHeight];
for(int i = 0; i < nHeight; i ++)
{
spTransData0[i] = new short [nWidth];
spTransData1[i] = new short [nWidth];
m_FilterData[i] = new short [nWidth];
}
CWaveletTrans *Trans;
Trans->DWT_Three(spOriginData, spTransData0, spTransData1, nHeight, nHeight/2, nWidth, nWidth/2, nLayer, 1.414);
for(i = 0; i < nHeight; i ++)
{
for(int j = 0; j < nWidth ; j ++)
{
m_FilterData[i][j] = spTransData1[i][j];
if(i < nHeight / 8 && j < nWidth / 8)
m_FilterData[i][j] /= 2;
}
}
delete spTransData0;
delete spTransData1;
DWT_Inverse(iHeight, iWidth, 3);
}
void CWFilter::LPass_Filter(short **pData, int nHeight, int nWidth, int nLayer, int scale)
{
short **spOriginData, **spTransData0, **spTransData1;
int iHeight = nHeight, iWidth = nWidth;
spOriginData = pData;
spTransData0 = new short *[nHeight];
spTransData1 = new short *[nHeight];
m_FilterData = new short * [nHeight];
for(int i = 0; i < nHeight; i ++)
{
spTransData0[i] = new short [nWidth];
spTransData1[i] = new short [nWidth];
m_FilterData[i] = new short [nWidth];
for(int j = 0; j < nWidth; j ++)
{
m_FilterData[i][j] = 0;
}
}
CWaveletTrans *Trans;
Trans->DWT_Three(spOriginData, spTransData0, spTransData1, nHeight, nHeight/2, nWidth, nWidth/2, nLayer, 1.414);
for(i = 0; i < (int) nHeight / (4 * scale); i ++)
{
for(int j = 0; j < (int) nWidth / (4 * scale); j ++)
{
m_FilterData[i][j] = spTransData1[i][j];
}
}
delete spTransData0;
delete spTransData1;
DWT_Inverse(iHeight, iWidth, 3);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -