一、傅里叶变换的物理意义

从纯粹的数学意义上看,傅里叶变换是将-一个图像函数转换为一系列周期函数来处理的;从物理效果看,傅里叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。即傅里叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅里叶逆变换是将图像的频率分布函数变换为灰度分布函数。实际上对图像进行二维傅里叶变换得到频谱图就是图像梯度的分布图,傅里叶频谱图上看到的明暗不一的亮点,实际上图像上某一点 与邻域点差异的强弱,即梯度的大小,即该点的频率大小。如果频谱图中暗的点数更多,则实际图像是比较柔和的;反之,如果频谱图中亮的点数多,则实际图像是比较尖锐的,边界分明且边界两边像素差异较大

二、傅里叶变换的定义及性质

1、傅里叶变换的定义

傅里叶变换是在以时间为自变量的“信号”与频率为自变量的“频谱”函数之间的某域研究中较复杂的问题在频域中变得简单起来,从而简化其分析过程;另一方面使信号与系统的物理本质在频域中能更好地被揭示出来。当自变量“时间”或“频率”为连续形式和离散形式的不同组合时,就可以形成各种不同的傅里叶变换对,即“信号”与“频谱”的对应关系。傅里叶变换包含连续傅里叶变换、离散傅里叶变换、快速傅里叶变换和短时傅里叶变换等,在数字图像处理中使用的是二维离散傅里叶变换。

2、二维离散傅里叶变换性质


三、傅里叶变换的matlab实现

在MATLAB软件中,通过函数fft()进行一维离散傅里叶变换,通过函数ifft()进行一维离散傅立叶反变换

在MATLAB中,通过函数fft2()进行二维离散傅里叶变换,通过函数ifft2()进行二维离散傅里叶反变换。函数fft()和fft2()的关系为fft2(X)=fft(fft(X).‘).’。

在MATLAB软件中,通过函数ifft2()进行二维快速傅立叶反变换,该函数和函数fft2()互为反函数。

通过fft2得到的频谱坐标原点位于左上角,函数fftshift()将变换后的坐标原点移到频谱窗口中央,坐标原点是低频,向外是高频。函数fftshift()能够进行傅里叶平移,函数ifftshift()能够进行傅里叶反平移。简单理解,ifftshift就是撤消fftshift的结果。

1、矩阵和图像的二维离散傅里叶变换

% 矩阵的二维离散傅里叶变换(变换后得到的矩阵和原矩阵大小相等)
I1=ones(4)
I2=[2 2 2 2;1 1 1 1;3 3 0 0;0 0 0 0]
J1=fft2(I1)
J2=fft2(I2)% 图像的二维离散傅里叶变换
I=imread('cameraman.tif');
J=fft2(I);
K=abs(J/256);% 计算频率(频谱图即频率分布图)subplot(121),imshow(I);
title('原始图像');
subplot(122),imshow(uint8(K));% 显示频谱图(通过fft2得到的频谱图中,坐标原点在窗口的左上角,窗口的四角分布低频部分)
title('灰度图像的频谱图');

命令行结果:

I1 =1     1     1     11     1     1     11     1     1     11     1     1     1
I2 =2     2     2     21     1     1     13     3     0     00     0     0     0
J1 =16     0     0     00     0     0     00     0     0     00     0     0     0
J2 =18.0000 + 0.0000i   3.0000 - 3.0000i   0.0000 + 0.0000i   3.0000 + 3.0000i2.0000 - 4.0000i  -3.0000 + 3.0000i   0.0000 + 0.0000i  -3.0000 - 3.0000i10.0000 + 0.0000i   3.0000 - 3.0000i   0.0000 + 0.0000i   3.0000 + 3.0000i2.0000 + 4.0000i  -3.0000 + 3.0000i   0.0000 + 0.0000i  -3.0000 - 3.0000i

实现效果:

2、通过fftshift()对矩阵和图像进行平移

% 通过函数fftshift()进行平移
close all;
clear all;
clc;
N=0:4
X=fftshift(N)            % 平移
Y=fftshift(fftshift(N))  % 平移后再进行平移
Z=ifftshift(fftshift(N)) % 平移后再进行反平移(恢复原来结果)% 图像进行傅里叶变换和平移% 在以后进行的傅里叶变化都进行平移!!!
I=imread('peppers.png');
J=rgb2gray(I);
K=fft2(J);     % 傅里叶变换
K=fftshift(K); % 平移
L=abs(K/256);subplot(121),imshow(J);
title('原始图像');
subplot(122),imshow(uint8(L));% 显示频谱图(图像的能量主要集中在低频部分即频谱图的中央,四个角的高频部分幅值非常小)
title('灰度图像的频谱图');

命令行结果:

N =0     1     2     3     4
X =3     4     0     1     2
Y =1     2     3     4     0
Z =0     1     2     3     4

实现效果:

3、图像变亮后进行傅里叶变换

close all;
clear all;
clc;
I=imread('peppers.png');
J=rgb2gray(I);
% 将灰度图像的数据矩阵乘以e使灰度图像变亮
% 注意本例中乘以e后像素值最大为255,若某些例子中乘以e后可能会产生大于255的像素值越界,需要找到并重新赋值即J(find(J>255))=255;
J=J*exp(1);
K=fft2(J);          % 傅里叶变换
K=fftshift(K);      % 平移
L=abs(K/256);subplot(121),imshow(J);
title('变亮后的图像');
subplot(122),imshow(uint8(L));% 显示频谱图
title('变亮后图像对应的频谱图');
% 对比fourier2和fourier3的频谱图,图像变亮后中央低频部分变大
% 频谱图中央低频部分代表了灰度图像的平均亮度

实现效果:

4、图像旋转后进行傅里叶变换

% 图像旋转后进行傅里叶变换
close all;
clear all;
clc;
I=imread('peppers.png');
J=rgb2gray(I);
% 图像旋转B=imrotate(A,angle,method)中method包括nearest最临近插值-默认值、bilinear双线性的和bicubic双三次的
J=imrotate(J,45,'bilinear');
K=fft2(J);      % 傅里叶变换
K=fftshift(K);  % 平移
L=abs(K/256);subplot(121),imshow(J);
title('旋转后的图像');
subplot(122),imshow(uint8(L));% 显示频谱图(注意图像发生旋转,频谱图相应也会发生旋转)
title('旋转后图像对应的频谱图');

实现效果:

5、图像中添加高斯噪声后进行傅里叶变换

% 图像中添加高斯噪声后进行傅里叶变换
close all;
clear all;
clc;
I=imread('peppers.png');
J=rgb2gray(I);
J=imnoise(J,'gaussian',0,0.01);% 添加高斯噪声
K=fft2(J);     % 傅里叶变换
K=fftshift(K); % 平移
L=abs(K/256);subplot(121),imshow(J);
title('添加高斯噪声后的图像');
subplot(122),imshow(uint8(L));% 显示频谱图
title('添加高斯噪声后图像对应的频谱图');

实现效果:

6、灰度图像的傅里叶变换和反变换

% 灰度图像的傅里叶变换和反变换
close all;
clear all;
clc;
I=imread('onion.png');
J=rgb2gray(I);
K=fft2(J);    % 傅里叶变换
L=fftshift(K);% 平移
M=ifft2(K);   % 傅里叶反变换subplot(131),imshow(J);
title('原始图像');
subplot(132),imshow(uint8(abs(L/256)));% 经过傅里叶变换后得到的频谱图
title('傅里叶频谱');
subplot(133),imshow(uint8(M));         % 对傅里叶变换系数进行傅里叶反变换后得到的灰度图像
title('傅里叶反变换后的图像');

实现效果:

7、灰度图像的幅值谱和相位谱

% 灰度图像的幅值谱和相位谱
close all;
clear all;
clc;
I=imread('peppers.png');
J=rgb2gray(I);
K=fft2(J);    % 傅里叶变换
L=fftshift(K);% 平移
fftr=real(L); % real函数求复数的实部
ffti=imag(L); % imag函数求复数的虚部
% 令R(u,v)和I(u,v)表示傅里叶变换F(u,v)的实部和虚部,则原图像函数f(x,y)傅里叶变换的幅值谱定义为|F(u,v)|=[(R(u,v))^2+(I(u,v))^2]^(1/2)
A=sqrt(fftr.^2+ffti.^2);% 幅值谱
A=(A-min(min(A)))/(max(max(A))-min(min(A)))*255;% 归一化到0-255(y=(x-min)/(max-min)为归一到0-1之间))
B=angle(K);% 求复数相角
subplot(121),imshow(A);      % 灰度图像傅里叶变换后的幅值谱
title('傅里叶变换后的幅值谱');
subplot(122),imshow(real(B));% 灰度图像经过傅里叶变换后得到的相位谱
title('傅里叶变换后的相位谱');

实现效果:

8、编程实现二维离散傅里叶变换

% 编程实现二维离散傅里叶变换
close all;
clear all;
clc;
I=imread('onion.png');
J=rgb2gray(I);
J=double(J);
s=size(J);
M=s(1);N=s(2);% 获取图像的行数和列数
for u=0:M-1for v=0:N-1k=0;for x=0:M-1for y=0:N-1k=J(x+1,y+1)*exp(-j*2*pi*(u*x/M+v*y/N))+k;% 根据二维离散傅里叶变换公式所得(注意公式中j表示复数的虚部比如a+bj)endendF(u+1,v+1)=k;% 傅里叶变换结果end
end
K=fft2(J);
% K和F图的结果基本相同,但是编程实现的二维离散傅里叶变换计算速度比较慢,fft2函数计算速度比较快
subplot(121),imshow(K);
title('函数fft2得到的傅里叶频谱');
subplot(122),imshow(F);
title('编程实现的傅里叶频谱');

实现效果:

9、图像处理之理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器的matlab实现去噪

10、图像处理之理想高通滤波器、巴特沃斯高通滤波器和高斯高通滤波器的matlab简单实现

11、图像处理之理想带阻滤波器、巴特沃斯带阻滤波器和高斯带阻滤波器的matlab实现去噪

由于刚刚开始学习图像处理,对于很多知识理解不到位。如有错误,恳请指正,任重而道远,慢慢加油!

图像处理之图像傅里叶变换相关推荐

  1. 《OpenCv视觉之眼》Python图像处理六 :Opencv图像傅里叶变换和傅里叶逆变换原理及实现

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  2. 【数字图像处理】图像的数学变换之傅里叶变换

    傅里叶变换是分析线性系统的一个有力工具.  从数学意义上说,傅里叶变换将一个任意的周期函数分解成为无穷个正弦函数的和的形式:从物理效果上看,傅里叶变换实现了将信号从空间域到频率域的转换.关于傅里叶变化 ...

  3. [Python图像处理] 二十二.Python图像傅里叶变换原理及实现

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  4. 【数字图像处理】图像直方图均衡化、空域滤波(均值滤波、中值滤波)、图像锐化(Laplace算子)、图像傅里叶变换实验

    图像直方图均衡化.空域滤波.图像锐化.图像傅里叶变换 一.图像直方图均衡化 二.图像空域滤波 1.均值滤波(滤波次数n→3) 2.中值滤波(滤波次数n→3) 3.图像锐化(Laplace算子) 三.图 ...

  5. 【OpenCV 例程200篇】76. OpenCV 实现图像傅里叶变换

    [OpenCV 例程200篇]76. OpenCV 实现图像傅里叶变换 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 ...

  6. 【OpenCV 例程200篇】75. Numpy 实现图像傅里叶变换

    [OpenCV 例程200篇]75. Numpy 实现图像傅里叶变换 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 ...

  7. OpenCV——图像傅里叶变换

    1.OpenCV傅里叶变换相关函数 首先我要说明的是,在使用OpenCV写代码做图像傅里叶变换的时候,并仅仅是调用dft函数做一个傅里叶变换这么简单的,而是先要对图像进行一些变换之后,才能得到正确的傅 ...

  8. java 图像傅里叶变换_图像频域滤波与傅里叶变换

    1.频率滤波 图像的空间域滤波:用各种模板直接与图像进行卷积运算,实现对图像的处理,这种方法直接对图像空间操作,操作简单.图像处理不仅可以在空间域进行还可以在频率域进行,把空间域的图像开窗卷积形式,变 ...

  9. 图像傅里叶变换:从空域转换到频域(包含频谱图分析、简单带阻滤波器理解)

    2021年10月21日10:24:05 占坑,这周五图像处理课讲完PPT后填. 2021年10月22日21:07:55 -> 讲课完毕 数字图像处理.图像恢复,噪声去除PPT 图像处理课课件,包 ...

  10. 4.3 Python图像处理之图像恢复-无约束滤波器(逆滤波)、有约束滤波器(维纳滤波器)

    4.3 Python图像处理之图像恢复-无约束滤波器(逆滤波).有约束滤波器(维纳滤波器) 文章目录 4.3 Python图像处理之图像恢复-无约束滤波器(逆滤波).有约束滤波器(维纳滤波器) 1 算 ...

最新文章

  1. 无线传感器网络WSN技术、协议、距离汇总
  2. Android适配器以及作用,Android RecyclerView 通用适配器的实现
  3. 统计特性和概率估计-1 (数学推导与证明)
  4. Mac配置NDK环境
  5. 720环物全景制作_什么是全景?关于360°全景和720°全景的区别你知道吗?
  6. 【Python成长之路】机器学习:10+分类算法汇总学习
  7. MyBatis→优缺点、select延迟加载、接口式MyBatis编程、一级缓存、二级缓存、集成Redis自定义缓存、Log4j
  8. vmware12安装vmtools
  9. App功能测试的7大注意点
  10. github精选awsome
  11. mysql 公历变农历_巧用SQL函数让公历变农历
  12. js清空浏览器cokie缓存_JS实现清除指定cookies的方法
  13. 电商系统之订单设计篇
  14. vi编辑器怎么不保存退出?
  15. AD软件—(如何从原理图生成PCB)
  16. linux qt fscanf,fscanf QT小部件C++
  17. java enum compare_Java中枚举类型
  18. upper_bound 和 lowwer_bound 用法
  19. 美国大学生数学建模竞赛选题、经验以及准备材料
  20. 程序员去外包公司有前途吗?

热门文章

  1. 20180329整理巡检系统代码
  2. mysql数据库巡检方案_美团 MySQL 数据库巡检系统的设计与应用
  3. JLink和JFlash使用方法笔记
  4. 推荐几款程序员值得拥有的写文档工具
  5. H5+JS表格全选和删除
  6. 【ANSYS命令流】通用后处理技术(三):列表显示结果及输出TXT文本(实例)
  7. 音视频的简介及其I2S协议
  8. java 生成war包_java利用Ant脚本生成war包全过程
  9. 最大团问题回溯法求解
  10. 最优化方法笔记-线性规划(大M法与两阶段法)