摘要:二维图像的傅立叶变换,与一维傅立叶相比,在理解上要抽象很多。我在网上找了几篇相对较好的文章,并用matlab自己做了几个实验图像,希望能对大家理解二维图像的傅立叶变换有所帮助。

关键字:二维傅立叶变换,图像处理

本文是我旧博客中的博文,在CSDN图片显示不正常,请移步旧博客查看:https://imlogm.github.io/%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86/image-fft/

1. 一维傅立叶变换

如果是理工科的话,一维傅立叶变换应该在大学里都学过。如果有所遗忘的话,可以看这篇比较易懂又不失数学性的文章"如何理解傅里叶变换公式?-马同学的回答"。

一维傅立叶变换的公式为:
F(ω)=∫−∞+∞f(t)e−iωtdtF(\omega)=\int_{-\infty}^{+\infty}f(t)e^{-i\omega t}dt F(ω)=∫−∞+∞​f(t)e−iωtdt

2. 二维傅立叶变换

二维傅立叶变换的公式为:
F(u,v)=∫−∞+∞∫−∞+∞f(x,y)e−i(ux+vy)dxdyF(u,v)=\int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty}f(x,y)e^{-i(ux+vy)}dxdy F(u,v)=∫−∞+∞​∫−∞+∞​f(x,y)e−i(ux+vy)dxdy
由一维傅立叶的公式,能比较容易类比得到二维傅立叶变换公式。但注意,二维傅立叶不是x方向与y方向正弦余弦的简单叠加,而是乘积的叠加。

比如:一维傅立叶变换的三角函数系是sin(nx)sin(nx)sin(nx)、cos(nx)cos(nx)cos(nx)以及常数1,二维傅立叶变换的三角函数系是sin(ux+vy)sin(ux+vy)sin(ux+vy)、cos(ux+vy)cos(ux+vy)cos(ux+vy)和常数1.而sin(ux+vy)sin(ux+vy)sin(ux+vy)和cos(ux+vy)cos(ux+vy)cos(ux+vy)可以继续分解为sin(ux)sin(vy),sin(ux)cos(vy),cos(ux)sin(vy),cos(ux)cos(vy)sin(ux)sin(vy),\:\:sin(ux)cos(vy),\:\:cos(ux)sin(vy),\:\:cos(ux)cos(vy)sin(ux)sin(vy),sin(ux)cos(vy),cos(ux)sin(vy),cos(ux)cos(vy)这四个乘积的形式。

如果对上面一段话的内容有兴趣的话,可以参看这篇文章"二维傅里叶变换是怎么进行的?-CharlyGordon的回答"。看不懂也没关系,只需要知道二维傅立叶不是x方向与y方向正弦余弦的简单叠加。

注意1:二维傅立叶变换后生成的图像与原图上的像素点不存在一一对应关系。原图中的像素值是x,y坐标轴下的(即空间域),而傅立叶变换后的像素值是u,v坐标轴下的(即频域)。

注意2:图像的像素点是离散且有限的,故实际进行图像傅立叶变换时,使用的是离散傅立叶变换(DFT),需要把上述公式中的积分号∫−∞+∞\int_{-\infty}^{+\infty}∫−∞+∞​换成求和号∑\sum∑

3. 二维傅立叶变换的直观理解

原始图像经过二维傅立叶变换后得到的是u,v坐标系下的二维矩阵,由(u1,v1)(u_1,v_1)(u1​,v1​)、(u1,v2)(u_1,v_2)(u1​,v2​)、(u2,v1)(u_2,v_1)(u2​,v1​)等一系列点组成。每个位置(un,vn)(u_n,v_n)(un​,vn​)都有其对应的值F(un,vn)F(u_n,v_n)F(un​,vn​)。如果把这个二维矩阵归一化成傅立叶后的图像来显示,那么傅立叶后图像上像素点位置和像素点亮度就表征二维矩阵相应的点和该点的值。

如图1所示,有左中右三幅小图,我们先不管右小图,左小图是原始图像,中小图是傅立叶变换后的。可以看到傅立叶变换后的图片的两个斜对角出现了两个白点,这两点处的亮度值最大,其余点处亮度值为0。这表示原始图像可以由这两点所对应的三角波组成,三角波的幅值为其对应点的亮度。

图1

那么这些三角波长什么样子呢?图2是我从网上找到的一幅图,原始出处未知。原来这张图是频移后的三角波,由于频移是下面才讲到的知识点,我感觉这样会对理解造成一定影响,所以我处理成频移前的,便于大家理解。相信对比图1和图2,你们能很快理解其中的关系。

图2

在图2的右小图中,我用红框标出了其中的一个三角波,这个三角波的外形与图1的原始图像最相似。结果也和我们预料的一样,傅立叶变换后,这个三角波的幅值是最大的,所以我们看到了图1中小图左上角的白点。

注意:图2的三角波对应于图1中小图的左上角的区域,所以我们得到了左上角的白点。至于图1中小图的右上、左下、右下区域的三角波长什么样子,请看下面一段话。

看到这里可能大家还有个疑问:左上角的白点明白了,但是右下角的白点怎么来的?如果你自己动手做实验的话,会发现这两个白点是对称的(换而言之,右下角区域的三角波和左上角区域的三角波对称)。这其实是由两个原因共同作用造成的:其一,傅立叶双边频谱关于原点对称;其二,上面提到过,二维图像傅立叶变换是离散傅立叶变换,离散傅里叶变换本质是周期信号求傅里叶级数,所以其实会有周期延拓

因为这两个性质涉及一些更深的知识,我不详细展开了。有兴趣的同学可以找信号处理方面的书来看,学过的同学应该能马上理解。

解决了图1中左小图、中小图的问题,那么图1的右小图是什么呢?右小图其实是中小图经过频移后的。为什么要频移,因为我们把傅立叶变换得到的二维矩阵用图像的方式显示时,默认的坐标原点(0, 0)位于图像的左上角。频移要做的就是把坐标原点移动到图像的中心。

可以想到,图1右小图的中间偏右下的点是由图1左小图左上角的点经过移动后得到的,而图1右小图的中间偏左上的点是由之前提到的“傅立叶双边频谱关于原点对称”这条性质得到的。

4. Matlab小实验

看了上面的内容,相信大家都已经对二维傅立叶有了一定的直观印象。我又用matlab写了个小程序,生成了几幅图片,帮助大家理解。

图3
图4
图5
图6
图7
图8

5. Matlab代码

最后附上我的matlab代码,便于大家自己做实验。

如果对傅立叶变换的代码有什么疑问的话,可以看这篇文章"使用matlab对图像进行傅里叶变换-三山音"。

% 用sin(x+y)的图像来帮助理解二维图像的傅立叶变换img_size = 100;     % 图片尺寸
x_step = 1;
y_step = 1;
image = zeros(img_size, img_size);
for x = x_step:x_step:x_step*img_sizefor y=y_step:y_step:y_step*img_sizeimage(x/x_step, y/y_step)=sin(4*pi*x/img_size + 4*pi*y/img_size);end
endsubplot(1,3,1)
imshow(image)       % 原图
title('原图')subplot(1,3,2)
image = im2double(image);
F_unshift = fft2(image);
F_unshift_abs = abs(F_unshift);
T = log(F_unshift_abs+1);
imshow(T);   % 傅立叶变换后,未频移前
title('傅立叶变换后,未频移')subplot(1,3,3)
F = fftshift(F_unshift);
F_abs = abs(F);
T = log(F_abs+1);
imshow(T)           % 傅立叶变换后,频移后
title('傅立叶变换后,频移后')

二维图像的傅立叶变换相关推荐

  1. 【深度好文】二维图像离散余弦变换

    1.引言 上节分享了二维图像离散傅里叶变换,本节来继续讲频域空间的另一种变换–二维离散余弦变换(Discrete Cosine Transform,DCT).从运算方式上来讲,离散傅里叶变换计算的对象 ...

  2. 用Matlab编程实现图像的傅立叶变换和逆变换并显示出来

    用Matlab编程实现图像的傅立叶变换和逆变换并显示出来 % 用Matlab编程实现图像的傅立叶变换并显示出来 % 可进行傅立叶变换和逆变换恢复 clear all close all clc I=i ...

  3. 【图像处理】二维付立叶变换和滤波 (Two-Dimensional Fourier Transform and Filtering)

    实验要求   该实验的目的是开发一个2-D FFT 程序包.要求程序能完成下面的功能:   (1.a) 用因子 (-1)x+y 乘以输入图像,以实现滤波的中心化变换:   (1.b) 计算付立叶变换: ...

  4. 对P5基本二维图像绘制库的交互性扩展

    5379@TOC 对P5基本二维图像绘制库的交互性扩展 因为课程需要接触学习了P5.js ,觉得还蛮有意思的 下面是对它的2D绘图函数的一些简单扩展. ///终于等到你/ 无非是用周期性.随机性.对称 ...

  5. 时间序列转二维图像方法及其应用研究综述

    目录 1 前言 2 方法综述 2.1 时频分析法 2.1.1 短时傅里叶变换 2.1.2 小波变换 2.1.3 希尔伯特-黄变换 2.2 图像编码方法 2.2.1 格兰姆角场 2.2.2 马尔可夫转移 ...

  6. 三维激光点云到二维图像的投影

    Camera系列文章 传感器融合是将多个传感器采集的数据进行融合处理,以更好感知周围环境:这里首先介绍Camera的相关内容,包括摄像头及图像知识基本介绍,OpenCV图像识别(特征提取,目标分类等) ...

  7. 二维图像旋转的坐标公式推导

    二维图像旋转后的坐标公式推导: 综上,图像顺时针和逆时针旋转的矩阵分别为: 对于此处红色字体的理解部分,有误解,图像没有翻转. 这个坐标转换只是让图像每个位置在某一坐标系的表达,转换到另一个坐标系上的 ...

  8. 【Python】函数图像绘制:二维图像、三维图像、散点图、心形图

    [Python]函数图像绘制:二维图像.三维图像.散点图.心形图 所有需要用的包 二维图像 三维图像 散点图绘制 心形图绘制 所有需要用的包 from mpl_toolkits.mplot3d imp ...

  9. python怎么画简单图片-Python绘制简易的二维图像

    大家好,我是飞向天空的牛. 最近学习了一下用Python绘制简易的二维图像,代码如下图所示:绘图代码 文本如下: import matplotlib.pyplot as plt import nump ...

最新文章

  1. 关于脉冲信号发生器的一点心得
  2. 阅读JavaScript高级程序设计(第二版)笔记
  3. nodejs(1)---mongodb
  4. aspen plus大小_AspenPlus
  5. 广告点击率常用模型的优点和缺点
  6. https证书互信解决方案—创建私有CA并申请证书
  7. 办公自动化-python编写ppt-创建第一页-主标题与内容的编写
  8. matlab中怎么查看变量,Matlab 查看内存中的变量,清空屏幕等命令
  9. 百度大脑语音能力引擎论坛定档 11.28,邀你一同解码 AI 语音的奥秘
  10. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感...
  11. Xgboost和lightgbm的区别
  12. 【iKBC poker2】使用说明书(简体中文版)
  13. 权威高清24色图(2种颜色叫不上名,青专业人士指点)-制作不易,对你有帮助麻烦点个赞
  14. 远程服务器批量管理员权限,Win10系统下怎样实现批量远程桌面管理?Win10系统进行批量远程管理的方法...
  15. 基于STM32F103的智能循迹小车(舵机加双电机加灰度传感器的方案)
  16. 搭建基于 Nginx 的 RTMP 服务器,并用 ffmpeg 来进行推流和拉流
  17. 智加助力解放完成“自动变道”国标验证,唯一量产自动驾驶重卡过考
  18. pygame 播放音乐
  19. Electron中的消息通知
  20. 北邮智能车仿真培训(一)—— 安装仿真环境

热门文章

  1. 网易云音乐无法正常运行
  2. 想骂人!开发语言不能统一成一个么?
  3. 联盟里这么多企业,哪一家会是我的东家?
  4. Python玩耍:一个小小的爬虫,在一堆公司列表里筛选出总部位于中国的公司
  5. Python可视化陈氏和R语言--星型图形展示
  6. 关于selenium, 你还在因为chromedriver的版本与Chrome的版本不一致,需要手动更新chromedriver而烦恼吗?
  7. canopen研发记录
  8. Scratch中的坐标系
  9. Virtualbox源码分析22 NEM(Hyper-V兼容)3 Emulation Thread
  10. SourceTree回滚代码