- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三_图像的傅立叶变换
实验三、图像的傅立叶变换
一、实验目的
1了解图像变换的意义和手段;
2熟悉傅里叶变换的基本性质;
3熟练掌握FFT的方法及应用;
4通过实验了解二维频谱的分布特点;
5通过本实验掌握编程实现数字图像的傅立叶变换。
二、实验原理
1应用傅立叶变换进行图像处理
傅里叶变换是线性系统分析的一个有力工具,它能够定量地分析诸如数字化系统、采样点、电子放大器、卷积滤波器、噪音和显示点等的作用。通过实验培养这项技能,将有助于解决大多数图像处理问题。对任何想在工作中有效应用数字图像处理技术的人来说,把时间用在学习和掌握博里叶变换上是很有必要的。
2傅立叶(Fourier)变换的定义
对于二维信号,二维Fourier变换定义为: 二维离散傅立叶变换为: 图像的傅立叶变换与一维信号的傅立叶变换变换一样,有快速算法,具体参见参考书目,有关傅立叶变换的快速算法的程序不难找到。实际上,现在有实现傅立叶变换的芯片,可以实时实现傅立叶变换。
三、实验内容
1.根据二维离散Fourier变换的定义编写程序
2.实现图象的变换
3.画出图象的频谱图。
2提交实验的原始图像和结果图像。
3报告内容主要是将原理与实验现象相结合,利用原理简要解释观察到的现象。
六、思考题
1.傅里叶变换有哪些重要的性质?
2.图像的二维频谱在显示和处理时应注意什么?
1. 源程序:
// MyDIPView.cpp : implementation of the CMyDIPView class
//
#include stdafx.h
#include MyDIP.h
#include MyDIPDoc.h
#include MyDIPView.h
#include math.h
#includecomplex
using namespace std;
#define PI 3.14159
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/*************************************************************************
*
* 函数名称:
* FFT()
*
* 参数:
* complexdouble * TD - 指向时域数组的指针
* complexdouble * FD - 指向频域数组的指针
* r -2的幂数,即迭代次数
*
* 返回值:
* 无。
*
* 说明:
* 该函数用来实现快速付立叶变换。
*
************************************************************************/
VOID WINAPI FFT(complexdouble * TD, complexdouble * FD, int r)
{
// 付立叶变换点数
LONG count;
// 循环变量
int i,j,k;
// 中间变量
int bfsize,p;
// 角度
double angle;
complexdouble *W,*X1,*X2,*X;
// 计算付立叶变换点数
count = 1 r;
// 分配运算所需存储器
W = new complexdouble[count / 2];
X1 = new complexdouble[count];
X2 = new complexdouble[count];
// 计算加权系数
for(i = 0; i count / 2; i++)
{
angle = -i * PI * 2 / count;
W[i] = complexdouble (cos(angle), sin(angle));
}
// 将时域点写入X1
memcpy(X1, TD, sizeof(complexdouble) * count);
// 采用蝶形算法进行快速付立叶变换
for(k = 0; k r; k++)
{
for(j = 0; j 1 k; j++)
{
bfsize = 1 (r-k);
for(i = 0; i bfsize / 2; i++)
{
p = j * bfsize;
X2[i + p] = X1[i + p] + X1[i + p + bfsize / 2];
X2[i + p + bfsize / 2] =
文档评论(0)