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

📄 imagect.cpp

📁 主要是应用VC进行傅立叶变换和反变换的程序
💻 CPP
字号:

#include "stdafx.h"
#include "memBitmap.h"
#include "dft.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

void ImageDFT(wComplex *Data,memBITMAP &m_mBmp)
{
	int width=m_mBmp.GetWidth();
	int height=m_mBmp.GetHeight();
	wFOURIOR hDft(width);
	wFOURIOR vDft(height);
	int i,j;
	for(i=0;i<height;i++)
	{
		hDft.DFT(Data+i*width);
		for(j=0;j<width;j++)
			*(Data+i*width+j)/=(float)width;
	}
	BYTE *temp1=new BYTE[height*sizeof(wComplex)];
	wComplex *vData=(wComplex*)temp1;
	for(i=0;i<width;i++)
	{
		for(j=0;j<height;j++)
			*(vData+j)=*(Data+j*width+i);
		vDft.DFT(vData);
		for(j=0;j<height;j++)
			*(Data+j*width+i)=*(vData+j);
	}
	delete temp1;
	for(i=0;i<width;i++)
	{
		for(j=0;j<height;j++)
		{
			int x=int((Data+j*width+i)->abs());
			x=x>255?255:x;
			x=x<0?0:x;
			m_mBmp.SetPixel(i,j,RGB(BYTE(x),BYTE(x),BYTE(x)));
		}
	}
}

void ImageNDFT(wComplex *Data,memBITMAP &m_mBmp)
{
	int width=m_mBmp.GetWidth();
	int height=m_mBmp.GetHeight();

	wFOURIOR hDft(width);
	wFOURIOR vDft(height);
	hDft.SetInverse();
	vDft.SetInverse();

	int i,j;
	for(i=0;i<height;i++)
	{
		hDft.DFT(Data+i*width);
		for(j=0;j<width;j++)
			*(Data+i*width+j)/=(float)width;
	}
	BYTE *temp1=new BYTE[height*sizeof(wComplex)];
	wComplex *vData=(wComplex*)temp1;
	for(i=0;i<width;i++)
	{
		for(j=0;j<height;j++)
			*(vData+j)=*(Data+j*width+i);
		vDft.DFT(vData);
		for(j=0;j<height;j++)
			*(Data+j*width+i)=*(vData+j);
	}
	delete temp1;
	for(i=0;i<width;i++)
	{
		for(j=0;j<height;j++)
		{
			int x=int((Data+j*width+i)->abs());
			x=x>255?255:x;
			x=x<0?0:x;
			m_mBmp.SetPixel(i,j,RGB(BYTE(x),BYTE(x),BYTE(x)));
		}
	}
}

void ImageFFT(wComplex *Data,memBITMAP &m_mBmp)
{
	int width=m_mBmp.GetWidth();
	int height=m_mBmp.GetHeight();
	wFOURIOR hDft(width);
	wFOURIOR vDft(height);
	int i,j;
	for(i=0;i<height;i++)
	{
		if(!hDft.FFT(Data+i*width))return;
		for(j=0;j<width;j++)
			*(Data+i*width+j)/=(float)width;
	}
	BYTE *temp1=new BYTE[height*sizeof(wComplex)];
	wComplex *vData=(wComplex*)temp1;
	for(i=0;i<width;i++)
	{
		for(j=0;j<height;j++)
			*(vData+j)=*(Data+j*width+i);
		if(!vDft.FFT(vData))return;
		for(j=0;j<height;j++)
			*(Data+j*width+i)=*(vData+j);
	}
	delete temp1;
	for(i=0;i<width;i++)
	{
		for(j=0;j<height;j++)
		{
			int x=int((Data+j*width+i)->abs());
			x=x>255?255:x;
			m_mBmp.SetPixel(i,j,RGB(BYTE(x),BYTE(x),BYTE(x)));
		}
	}
}

void ImageNFFT(wComplex *Data,memBITMAP &m_mBmp)
{
	int width=m_mBmp.GetWidth();
	int height=m_mBmp.GetHeight();
	wFOURIOR hDft(width);
	wFOURIOR vDft(height);
	hDft.SetInverse();
	vDft.SetInverse();
	int i,j;
	for(i=0;i<height;i++)
	{
		if(!hDft.FFT(Data+i*width))return;
		for(j=0;j<width;j++)
			*(Data+i*width+j)/=(float)width;
	}
	BYTE *temp1=new BYTE[height*sizeof(wComplex)];
	wComplex *vData=(wComplex*)temp1;
	for(i=0;i<width;i++)
	{
		for(j=0;j<height;j++)
			*(vData+j)=*(Data+j*width+i);
		if(!vDft.FFT(vData))return;
		for(j=0;j<height;j++)
			*(Data+j*width+i)=*(vData+j);
	}
	delete temp1;
	for(i=0;i<width;i++)
	{
		for(j=0;j<height;j++)
		{
			int x=int((Data+j*width+i)->abs());
			x=x>255?255:x;
			m_mBmp.SetPixel(i,j,RGB(BYTE(x),BYTE(x),BYTE(x)));
		}
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -