⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wfilter.cpp

📁 this walet there is pictures in it you can debug it
💻 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 + -