六、C++离散傅里叶逆变换
C++离散傅里叶逆变换
一、序言:
该教程承接上文的离散傅里叶变换,用于进行离散傅里叶逆变换。
二、设计目标
对复数数组进行离散傅里叶逆变换,并生成可供使用的图像类。
三、详细步骤
输入:经傅里叶变换后产生的复数数组
输出:MyImage图像
定义:
static MyImage* Idft2(ComplexNumber *Scr,int const width,int const height);
实现:MyImage* MyCV::Idft2(ComplexNumber *Scr, int width, int height)
{
int bytesPerLine = (width*+)/*;
double* double_data = new double[width*height];
memset(double_data,,sizeof(double_data)*sizeof(double)); //全部赋值为0
double fixed_factor_for_axisX = ( * PI) / height; // evaluate i2π/N of i2πux/N, and store the value for computing efficiency
double fixed_factor_for_axisY = ( * PI) / width; // evaluate i2π/N of i2πux/N, and store the value for computing efficiency
for (int x = ; x<height; x++) {
for (int y = ; y<width; y++) {
for (int u = ; u<height; u++) {
for (int v = ; v<width; v++) {
double powerU = u * x * fixed_factor_for_axisX; // evaluate i2πux/N
double powerV = v * y * fixed_factor_for_axisY; // evaluate i2πux/N
ComplexNumber cplTemp;
cplTemp.SetValue(cos(powerU + powerV), sin(powerU + powerV));
double_data[y + x*width] = double_data[y + x*width] +
((Scr[v + u*width] * cplTemp).m_rl
/(height*width));
}
}
}
}
unsigned char *idft2_data = new unsigned char[bytesPerLine*height];//存储处理后的数据
for(int i=;i<height;i++)
for(int j=;j<width;j++)
{
idft2_data[i*bytesPerLine+j] = (unsigned char)double_data[i*width+j];
}
return new MyImage(idft2_data,width,height,MyImage::format::GRAY8);
}
至此,离散傅里叶逆变换的方法实现完成,效果图如下:


如果上述教程或代码中有任何错误,欢迎批评和指证。
六、C++离散傅里叶逆变换的更多相关文章
- Matlab信号处理基础
一. 简介 离散傅立叶.离散余弦和离散小波变换是图像.音频信号常用基础操作,时域信号转换到不同变换域以后,会导致不同程度的能量集中,信息隐藏利用这个原理在变换域选择适当位置系数进行修改,嵌入信息,并确 ...
- FFT [TPLY]
FFT [TPLY] 题目链接 https://www.luogu.org/problemnew/show/1919 https://www.luogu.org/problemnew/show/380 ...
- 「快速傅里叶变换(FFT)」学习笔记
FFT即快速傅里叶变换,离散傅里叶变换及其逆变换的快速算法.在OI中用来优化多项式乘法. 本文主要目的是便于自己整理.复习 FFT的算法思路 已知两个多项式的系数表达式,要求其卷积的系数表达式. 先将 ...
- 快速傅里叶变换FFT& 数论变换NTT
相关知识 时间域上的函数f(t)经过傅里叶变换(Fourier Transform)变成频率域上的F(w),也就是用一些不同频率正弦曲线的加 权叠加得到时间域上的信号. \[ F(\omega)=\m ...
- 口胡FFT现场(没准就听懂了)&&FFT学习笔记
前言(不想听的可以跳到下面) OK.蒟蒻又来口胡了. 自从ZJOI2019上Day的数论课上的多项式听到懵逼了,所以我就下定决心要学好多项式.感觉自己以前学的多项式都是假的. 但是一直在咕咕,现在是中 ...
- 浅谈FFT&NTT
复数及单位根 复数的定义大概就是:\(i^2=-1\),其中\(i\)就是虚数单位. 那么,在复数意义下,对于方程: \[ x^n=1 \] 就必定有\(n\)个解,这\(n\)个解的分布一定是在复平 ...
- $FFT$(快速傅里叶变换)
- 概念引入 - 点值表示 对于一个$n - 1$次多项式$A(x)$,可以通过确定$n$个点与值(即$x$和$y$)来表示这唯一的$A(x)$ - 复数 对于一元二次方程 $$x^2 + 1 = 0 ...
- [拉格朗日反演][FFT][NTT][多项式大全]详解
1.多项式的两种表示法 1.系数表示法 我们最常用的多项式表示法就是系数表示法,一个次数界为\(n\)的多项式\(S(x)\)可以用一个向量\(s=(s_0,s_1,s_2,\cdots,s_n-1) ...
- 「学习笔记」Fast Fourier Transform
前言 快速傅里叶变换(\(\text{Fast Fourier Transform,FFT}\) )是一种能在\(O(n \log n)\)的时间内完成多项式乘法的算法,在\(OI\)中的应用很多,是 ...
随机推荐
- contentType和dataType的区别
contentType: 告诉服务器,我要发什么类型的数据 dataType:告诉服务器,我要想什么类型的数据,如果没有指定,那么会自动推断是返回 XML,还是JSON,还是script,还是Stri ...
- BMFont使用图片自定义字体(无需字体文件)
网上搜BMFont做字体,很多都是从一个字体文件读取,然后选择需要的字,然后保存成图片文字,这个对于一般的文字的确很实用,因为Unity本身不支持中文,所以只好这样了. 但是做过游戏的都知道,策划总是 ...
- NVI模式
简介: --NVI即(Non-VIrtual Interface)模式强化依赖倒置,介于 Virtual与No Virtual 之间 允许子类重新实现 也可以在父类中对子类 进行限制和其它操作. 由来 ...
- Unity3d 脚本使用规则
脚本是Unity游戏开发的重要组成部分,通过脚本可以监听游戏中的相关事件和响应玩家的输入,并在游戏中安排事件发生.另外,脚本还可用于创建图形效果,控制对象的物理行为等.在Unity中使用脚本是需要注意 ...
- UVA - 12563 Jin Ge Jin Qu hao (01背包)
InputThe first line contains the number of test cases T (T ≤ 100). Each test case begins with two po ...
- angularjs 使用angular-sortable-view实现拖拽效果(包括拖动完成后的方法使用)
首先还是看效果图吧,方便大家可以快速得知是否是自己需要的功能:(抱歉电脑还未安装动图软件,先用.png) 如果上图是你需要的功能效果图,那么请往下看,我有写出来例子哦~ 使用这个插件有几个好处,首先: ...
- FTP原理与配置
FTP(file transfer protocol)文件传输协议(基于tcp协议).是用来传送文件的协议,使用FTP实现文件传输的同时,还可以保证数据传输的可靠性和高效性.通过学习我们需要掌握以下两 ...
- 简单的PHP+Mysql实现分页
<?php /** * PHP+Mysql实现分页 * **/ ?> <html> <head> <meta http-equiv="Content ...
- 74th LeetCode Weekly Contest Valid Number of Matching Subsequences
Given string S and a dictionary of words words, find the number of words[i] that is a subsequence of ...
- beeline连接hive
beeline -u jdbc:hive2://192.168.1.77:10000 zeppelin default jdbc: jdbc:hive2://nn01.ooccpp.com:2181/ ...