傅里叶变换

最近看了《数字图像处理》的书,一直纠结于傅里叶变换,因为没有人指导,所以看了好久才明白原理,写出代码。 傅里叶变化在数字图像处理中经常用到,把图像从空域变换到频域进行处理。并且根据傅里叶变换的性质不难得二维的傅里叶变换具有可分离性,可以通过对两个维度分别做傅里叶变换而得到,也就是说只要写出一维下的变换就可以了。 一下是一维傅里叶变换的核心代码,很简单:  
  
// 一维离散傅里叶变换
//sv : variable in spatial domain
//fv : variable in frequency domain
template
void DFT_1D(const vector &sv, vector &fv)
{
	assert(fv.size() == sv.size());

	for (size_t i = 0; i < fv.size(); i++)
	{
		for (size_t j =0; j < sv.size(); j++)
		{
			fv.at(i) += sv.at(j) * exp(T(0, -2*PI*i*j/fv.size()));
		}
	}
}
一维傅里叶变化的逆变换:
// 一维离散傅里叶逆变换
template
void IDFT_1D(const vector &fv, vector &sv)
{
	assert(fv.size() == sv.size());

	for (size_t i = 0; i < sv.size(); i++)
	{
		for (size_t j =0; j < fv.size(); j++)
		{
			sv.at(i) += fv.at(j) *
				(exp(T(0, 2.*PI*i*j/fv.size())) / T(sv.size(), 0));
		}
	}
}
posted @ 2011-09-06 19:51  zyqhi  阅读(303)  评论(0编辑  收藏  举报