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++离散傅里叶逆变换的更多相关文章

  1. Matlab信号处理基础

    一. 简介 离散傅立叶.离散余弦和离散小波变换是图像.音频信号常用基础操作,时域信号转换到不同变换域以后,会导致不同程度的能量集中,信息隐藏利用这个原理在变换域选择适当位置系数进行修改,嵌入信息,并确 ...

  2. FFT [TPLY]

    FFT [TPLY] 题目链接 https://www.luogu.org/problemnew/show/1919 https://www.luogu.org/problemnew/show/380 ...

  3. 「快速傅里叶变换(FFT)」学习笔记

    FFT即快速傅里叶变换,离散傅里叶变换及其逆变换的快速算法.在OI中用来优化多项式乘法. 本文主要目的是便于自己整理.复习 FFT的算法思路 已知两个多项式的系数表达式,要求其卷积的系数表达式. 先将 ...

  4. 快速傅里叶变换FFT& 数论变换NTT

    相关知识 时间域上的函数f(t)经过傅里叶变换(Fourier Transform)变成频率域上的F(w),也就是用一些不同频率正弦曲线的加 权叠加得到时间域上的信号. \[ F(\omega)=\m ...

  5. 口胡FFT现场(没准就听懂了)&&FFT学习笔记

    前言(不想听的可以跳到下面) OK.蒟蒻又来口胡了. 自从ZJOI2019上Day的数论课上的多项式听到懵逼了,所以我就下定决心要学好多项式.感觉自己以前学的多项式都是假的. 但是一直在咕咕,现在是中 ...

  6. 浅谈FFT&NTT

    复数及单位根 复数的定义大概就是:\(i^2=-1\),其中\(i\)就是虚数单位. 那么,在复数意义下,对于方程: \[ x^n=1 \] 就必定有\(n\)个解,这\(n\)个解的分布一定是在复平 ...

  7. $FFT$(快速傅里叶变换)

    - 概念引入 - 点值表示 对于一个$n - 1$次多项式$A(x)$,可以通过确定$n$个点与值(即$x$和$y$)来表示这唯一的$A(x)$ - 复数 对于一元二次方程 $$x^2 + 1 = 0 ...

  8. [拉格朗日反演][FFT][NTT][多项式大全]详解

    1.多项式的两种表示法 1.系数表示法 我们最常用的多项式表示法就是系数表示法,一个次数界为\(n\)的多项式\(S(x)\)可以用一个向量\(s=(s_0,s_1,s_2,\cdots,s_n-1) ...

  9. 「学习笔记」Fast Fourier Transform

    前言 快速傅里叶变换(\(\text{Fast Fourier Transform,FFT}\) )是一种能在\(O(n \log n)\)的时间内完成多项式乘法的算法,在\(OI\)中的应用很多,是 ...

随机推荐

  1. VS插件开发(生成实体类)

    写了N年的代码,回头过来看,其中有80%代码都是重复的代码,深入研究VS插件开发,应用到工作中,让自己减少基础的代码开发,增加开发效率 1.新增解决方案: Extensiblity->VSIX ...

  2. oracle 导入sql文件乱码

    查看  http://blog.csdn.net/fireofjava/article/details/53980966

  3. 浅谈JavaScript -- 正则表达式

    什么是正则表达式? 正则表达式是由一个字符序列形成的搜索模式.可用于文本搜索和文本替换. 语法:/正则表达式主体/修饰符(可选) var patt=new RegExp(pattern,modifie ...

  4. java内存及数据区

    Java运行时的数据区包括:(其中前两个是线程共享的) 1.方法区(Method Area) 存储已被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据 2.堆(Heap) 存放对象实例 ...

  5. 从零开始安装 Ambari (2) -- 准备本地 repository

    安装 Ambari,最后是为了用它部署 hadoop 集群.安装时默认使用的是 hortonworks 远程的资源,用它部署集群时,需要下载 Hadoop.Hive.HBase 的安装包,速度很慢.我 ...

  6. centos 7 安装python3

    centos系统默认已安装python2.7,python3需要手动安装.以上是安装步骤 一.备份原来的2.7版本 首先看一下默认的python2.7在哪里 [root@apple ~]# cd / ...

  7. 求第 i 个素数 Meissel Lehmer Algorithm + 二分 【模板】

    1473: L先生与质数V3 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1348  Solved: 147 [Submit][Status][Web ...

  8. CF447A DZY Loves Hash 模拟

    DZY has a hash table with p buckets, numbered from 0 to p - 1. He wants to insert n numbers, in the ...

  9. gitlab web客户端的使用

    3.2.1 新建项目 3.2.2 初始化项目(git init) 正如上图显示的,gitlab会给我们相应的命令供我们使用(需要安装客户端).初始化一个项目可以是一个新建的空项目,也可以是一个已经存在 ...

  10. promise封装小程序的请求类(request,清爽易懂)

    话不多说直接上代码,清爽易懂: import { config } from '../config.js' const tips = { 1:'抱歉出现了一个错误', 2:'网络错误', 1005:' ...