二维离散傅里叶变换

article/2025/10/3 1:56:18

在学完一维的傅里叶变换后,紧接着就是二维的傅里叶变换了。直接上干货吧!!!
途中会用到opencv读取与显示图片。

一. 公式

  1. M表示图像的行数,N表示图像的列数。
    在这里插入图片描述
  2. 经过欧拉公式可以得一下形式,这样就可以轻松得到实部和虚部了。
    在这里插入图片描述
  3. 其逆变换
    在这里插入图片描述4. 将傅里叶保护后的图像中心化。只需要在傅里叶变换的f(x,y)前面成以一个(-1)的x+y次方就可以了。其数学推导可以自行去百度。
    在这里插入图片描述
    看完上面的公式之后,下面开始编程实现拉,使用的是C++。

二. 编程实现DTF

  1. 代码中有详细的注释。就不在这里作过多的解释了。

  2. 头文件包含及以下宏定义

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/core/core.hpp>
#include<iostream>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;#define PI 3.1415926535    //定义π
#define col 100				//图像的行数为100,再大的话运算量太大的。
#define row 100				//图像的列数为100。
  1. 类的定义
class FFT {
private:double img[col][row];    //保存输入的数据,输入的数据只有实部double re[col][row];    //保存DFT后的实部double im[col][row]; 	//保存DFT后的虚部Mat a = imread("1.jpg", 0);   //读取图像
public:void init();       //将读取的图像数据写入img中void dft();			//进行DFT变换void idft();		//进行DFT逆变换void reserve();void fudu();       //计算幅度值。void show();
};
  1. init()函数
void FFT::init()
{int b;resize(a, a, Size(100, 100));   //将图像resize到(100,100)for (int i = 0; i < 100; i++){for (int j = 0; j < 100; j++){b = a.at<uchar>(i, j);   //得到每一个像素值img[i][j] = b;}}
}
  1. dft()函数
void FFT::dft()
{double a, b;for(int n=0;n<col;n++)for (int m = 0; m < row; m++){a = 0.0;b = 0.0;for (int i = 0; i < col; i++){for (int j = 0; j < row; j++){//根据公式列表达式a += pow(-1, i + j)*img[i][j] * cos(2 * PI*(((double(n*i) / double(col))+(double((m*j))/double(row)))));b += pow(-1, i + j)*img[i][j] * sin(2 * PI*(((double(n*i) / double(col)) + (double((m*j)) / double(row)))));}}//将计算的值写入对应的变量中,这里已经进行了中心化操作re[n][m] = a;im[n][m] = -b;}
}
  1. idft()函数
void FFT::idft()
{double a;for (int n = 0; n < col; n++){for (int m = 0; m < row; m++){a = 0.0;for (int i = 0; i < col; i++){for (int j = 0; j < row; j++){//这里只求其逆变换的实部,与原图片对比。a += re[i][j] * cos(2 * PI*((double(n*i) / double(col)) + (double(m*j) / double(row)))) - im[i][j] * sin(2 * PI*((double(n*i) / double(col)) + (double(m*j) / double(row))));}}re[n][m] = ((1. / (10000.))*a);}}
}
  1. fudu()函数
void FFT::fudu()
{int b;for(int i=0;i<col;i++)for (int j = 0; j < row; j++){//计算幅度值b = sqrt(re[i][j] * re[i][j] + im[i][j] * im[i][j]);b = b / 255;    //归一化到0-255//写入Mat中,便于可视化a.at<uchar>(i, j) = b;}//显示DTF幅度场imshow("aa", a);waitKey(0);
}
  1. show()函数
//显示逆变换后的图像,看看与原始图像是不是一样的。
void FFT::show()
{for(int i=0;i<col;i++)for (int j = 0; j < row; j++){a.at<uchar>(i, j) = re[i][j];}imshow("aa", a);waitKey(0);
}
  1. main()函数
int main(void)
{FFT a;a.init();a.dft();a.idft();a.fudu();//a.show();return 0;
}

所有的函数都实现了,下面来看看实现的效果吧!
原始图像
在这里插入图片描述
DFT后的振幅场
在这里插入图片描述
逆变换后的图像,差距有点大O(∩_∩)O。
在这里插入图片描述
Thank for your reading !!!!


http://chatgpt.dhexx.cn/article/nS2lRX1Z.shtml

相关文章

Matlab图像的二维傅里叶变换频谱图特点研究

一、先放一些相关的结论&#xff1a; 1、傅里叶变换的幅值称为傅里叶谱或频谱。 2、F(u)的零值位置与“盒状”函数的宽度W成反比。 3、卷积定理&#xff1a;空间域两个函数的卷积的傅里叶变换等于两个函数的傅里叶变换在频率域中的乘积。f(t)*h(t) <> H(u)F(u) 4、采…

OpenCV学习——图像二值化处理及二维傅里叶变换

小古在本学期选修了《计算机视觉原理与应用》&#xff0c;最近有一份作业 —— 利用matlab或者OpenCV对图像进行一些处理&#xff0c;由于完全没有接触过matlab和OpenCV,但是学习了一些python语言&#xff0c;所以便利用opencv-python来完成作业。 1 图像二值化处理 1.1 图像…

二维傅里叶变换是怎么进行的?

1.首先回顾一下一维FT 通俗来讲&#xff0c;一维傅里叶变换是将一个一维的信号分解成若干个三角波。 对于一个三角波而言&#xff0c;需要三个参数来确定它&#xff1a;频率,幅度 A &#xff0c;相位。因此在频域中&#xff0c;一维坐标代表频率&#xff0c;而每个坐标对应的…

二维傅里叶变换需知

from: https://blog.csdn.net/wenhao_ir/article/details/51037744 代码如下&#xff0c;这个代码是实现灰度图像作二维傅里叶变换后的非线性变换哈~ clear all; Iimread(coins.png); Ffft2((im2double(I))); Ffftshift(F); Fabs(F); Tlog(F1); subplot(1,2,1); imshow(F,[]…

傅里叶级数、一维傅里叶变换到二维傅里叶变换数理推导

傅里叶级数、一维傅里叶变换到二维傅里叶变换数理推导 参考资料&#xff1a; 如何理解傅里叶级数公式 二重傅里叶级数 从傅里叶级数到傅里叶变换 高维傅里叶变换的推导 连续傅里叶变换和离散傅里叶变换 二维离散傅里叶变换 IDL实现傅里叶变换 想要用傅里叶变换的思维处理一个…

二维傅里叶变换简化方式

在处理二维矩阵时&#xff0c;常想着如何把时域转换到频域来处理&#xff0c;因此翻来了以往数分里面的常用的傅里叶(Fourier Transform); &#xff08;Notes:一下公式中 M,N分别为二维矩阵的列数和行数&#xff0c;f(x,y) 代表改二维矩阵&#xff0c;F(u,v)为转换后的矩阵&…

C++中fftw库二维傅里叶变换笔记

目录 1.相关基础知识参考链接 2.二维傅里叶变换作用简介 3.FFTW二维傅里叶变换输出分析 &#xff08;1&#xff09;原始输出数据​ &#xff08;2&#xff09;频谱中心化后的输出数据 4.频谱图绘制 5.二维傅里叶变换逆变换 6.从输出结果中分离各平面波并画出波形平面图…

二维傅里叶变换的理解和使用

目录 似模似样的前言一维傅里叶二维傅里叶 似模似样的前言 最近的瑕疵检测项目需要在有纹理的产品上做很细致的检测。由于当前做项目使用的还是halcon居多&#xff0c;目前知道的方法还是傅里叶变换比较靠谱。 但仅靠halcon自带的样例并不能很好的理解和使用傅里叶&#xff0…

二维傅里叶变换频谱图的直观理解

众所周知&#xff1a;频谱中心代表低频&#xff0c;四周代表高频。 问&#xff1a;那&#xff08;u&#xff0c;v&#xff09;一点代表什么&#xff1f; 答&#xff1a; 1.当为水平方向的正弦图片时&#xff0c;二维傅里叶变换后&#xff0c;其只有u方向的频谱值&#xff1b; 2…

Matlab:二维傅里叶变换

Matlab:二维傅里叶变换 二维傅里叶变换二维衍射模式fft2 函数将二维数据变换为频率空间。例如,您可以变换二维光学掩膜以揭示其衍射模式。 二维傅里叶变换 以下公式定义 mn 矩阵 X 的离散傅里叶变换 Y。 i 是虚数单位,p 和 j 是值范围从 0 到 m–1 的索引,q 和 k 是值范围…

matlab二维傅里叶变换ffshift,形象理解二维傅里叶变换

点击上方“机器学习与生成对抗网络”,关注"星标" 获取有趣、好玩的前沿干货! 来自 | 知乎 阿姆斯特朗 链接 | https://zhuanlan.zhihu.com/p/110026009 文仅交流,侵删 1.回顾一下一维FT 公式: 通俗来讲,一维傅里叶变换是将一个一维的信号分解成若干个复指数波 …

傅里叶变换(二维离散傅里叶变换)

离散二维傅里叶变换 一常用性质&#xff1a; 可分离性、周期性和共轭对称性、平移性、旋转性质、卷积与相关定理&#xff1b; &#xff08;1&#xff09;可分离性&#xff1a; 二维离散傅里叶变换DFT可分离性的基本思想是DFT可分离为两次一维DFT。因此可以用通过计算两次一维…

二维傅里叶变换

fft2 函数将二维数据变换为频率空间。例如&#xff0c;可以变换二维光学掩膜以揭示其衍射模式。 二维傅里叶变换 以下公式定义 mn 矩阵 X 的离散傅里叶变换 Y。 和 是以下方程所定义的复单位根。 i 是虚数单位&#xff0c;p 和 j 是值范围从 0 到 m–1 的索引&#xff0c;q …

【深度好文】二维图像傅里叶变换 YYDS

1. 傅里叶变换原理 在数学中进行傅里叶变换为连续模拟信号&#xff0c;通常来说&#xff1a; 二维连续函数f(x,y)的傅里叶正变换为&#xff1a; 相应的傅里叶逆变换公式为&#xff1a; 但是在计算机领域&#xff0c;计算机一般处理的是数字信号&#xff0c;只能进行有限次计…

微信公众号开发模式没有域名怎么办?申请免费域名

微信公众号开发采用前后端分离模式&#xff0c;那么前端使用微信开发工具开发时&#xff0c;需要域名才能访问&#xff0c;那么域名从何而来呢&#xff1f; 1、申请域名 a)、NetApp申请免费域名 : https://natapp.cn/login b)、域名申请好以后&#xff0c;下载客户端&#xf…

freenom 申请免费域名

为了降低建站成本&#xff0c;可在freenom上申请免费域名&#xff0c;可以免费使用一年。 一. 注册域名 登录freenom.com&#xff0c;输入域名&#xff0c;检测通过后&#xff0c;输入邮箱&#xff0c;登录邮箱完成激活。 二. 配置DNS 上面申请的域名未绑定外网ip&#xff0c…

如何注册一个免费的网站空间和域名

https://www.jianshu.com/p/016c83f70d43 前几天想搞个网站玩玩&#xff0c;于是就上网搜哪里可以注册免费的网站空间和域名&#xff0c;折腾了好几天都没注册成&#xff0c;国内好像已经没有免费的了。只好用英文去搜国外的网站&#xff0c;才找到了一个能注册成功的&#xff…

Freenom免费域名申请

Freenom免费域名申请 准备条件操作流程注意选择域名确定并提交订单方法一(谷歌&#xff0c;FaceBook)方法二(开发者邮箱注册) 注册谷歌&#xff0c;Facebook 注册 防订单失败操作 准备条件 必须拥有一个 谷歌账号 或 Facebook 账号 亦或者 拥有一个 未注册Freenom的邮箱 登录 …

【免费域名】教你免费申请顶级域名

一、输入网址 &#xff1a;https://my.freenom.com/ 二、点击Service->Register a New Domain&#xff0c;注意这里有网络延时至少30秒 三、输入自己想要的域名&#xff0c;点击Check Avaliability&#xff0c;比如我的是abc5500&#xff0c;延时10秒 四、Get it now! ->…

免费域名证书最新申请方式大全

目前市场环境下&#xff0c;可获得域名SSL证书的方式有很多&#xff0c;一般有付费和免费划分。对于想免费使用域名SSL证书的朋友&#xff0c;这里收集整理了几个常用的SSL证书申请方式。 对于SSL证书的用处&#xff0c;简单的来说&#xff0c;就是加密数据传输&#xff0c;使…