MATLAB 中图像的正向和反向傅里叶变换
在本文中,我们将对图像应用傅里叶变换。傅里叶变换是一种数学技术,有助于将时域函数x(t) 转换为频域函数X(ω)。在本文中,我们将了解如何在 MATLAB 中找到傅立叶变换。
傅里叶变换的性质:
- 线性度: 对应于两个频谱相加的两个函数相加称为线性度。如果我们将一个函数乘以一个常数,则结果函数的傅里叶变换将乘以相同的常数。两个或多个函数之和的傅里叶变换是函数的傅里叶变换之和。
- 缩放:缩放是用于改变自变量或数据特征的范围的方法。如果我们在时域中按因子拉伸函数,则在频域中按相同因子压缩傅里叶变换。
- 微分:关于时间的微分函数产生初始函数的常数倍数。
- 卷积: 它包括两个函数的乘法。两个函数卷积的傅里叶变换是它们各自傅里叶变换的逐点乘积。
- 频移和时移:频率根据坐标偏移。时域和频域之间存在对偶性,频移会影响时移。时间变量偏移也影响频率函数。时移特性得出结论,时间上的线性位移对应于频域中的线性相位因子。
本文实验选用的图像是著名的摄影师图像。
DFT 方程:
IDFT 方程:
脚步:
- 阅读图像。
- 应用正向傅里叶变换。
- 显示日志和移位 FT 图像。
使用的函数:
- imread( ) 内置函数用于图像。
- fft2( ) 内置函数用于对 2D 信号应用正向傅里叶变换。
- ifft2( ) 内置函数用于对二维信号应用傅里叶逆变换。
- fftshift( ) 内置函数用于在 FT 图像中将角移到中心。
- log( ) 内置函数用于计算 FT 复信号的对数。
- imtool( ) 内置函数用于显示图像。
例子:
Matlab
% MATLAB code for Forward and
% Inverse Fourier Transform
% FORWARD FOURIER TRANSFORM
k=imread("cameraman.jpg");
% Apply fourier transformation.
f=fft2(k);
% Take magnitude of FT.
f1=abs(f);
% Take log of magnitude of FT.
f2=log(abs(f));
% Shift FT from corners to central part.
f3=log(abs(fftshift(f)));
% Display all three FT images.
imtool(f1,[]);
imtool(f2,[]);
imtool(f3,[]);
% Remove some frequency from FT.
f(1:20, 20:40)=0;
imtool(log(abs(f)),[]);
Matlab
% MATLAB code for INVERSE FOURIER TRANSFORM
% apply inverse FT on FTransformed image.
% we get original image in this step.
j=ifft2(f);
% Take log of original image.
j1=log(abs(j));
% Shift corners to center.
j2=fftshift(j);
% Again shift to get original image.
j3=fftshift(j2);
% Remove some frequency from FT image.
f(1:20, 20:40)=0;
% Apply inverse FT.
j4=ifft2(f);
% Display all 4 images.
imtool(j,[]);
imtool(j1,[]);
imtool(j2,[]);
imtool(j3,[]);%j and j3 are same.
imtool(abs(j4),[]);
输出:
代码说明:
- k=imread(“cameraman.jpg”);此行读取图像。
- f=fft2(k);这条线计算傅立叶变换。
- f1=abs(f);这需要 FT 的大小。
- f2=log(绝对值(f));这条线取 FT 幅度的对数。
- f3=log(abs(fftshift(f)));这条线将 FT 从角落转移到中心部分。
- f(1:20, 20:40)=0;这条线从 FT 中删除频率。
例子:
MATLAB
% MATLAB code for INVERSE FOURIER TRANSFORM
% apply inverse FT on FTransformed image.
% we get original image in this step.
j=ifft2(f);
% Take log of original image.
j1=log(abs(j));
% Shift corners to center.
j2=fftshift(j);
% Again shift to get original image.
j3=fftshift(j2);
% Remove some frequency from FT image.
f(1:20, 20:40)=0;
% Apply inverse FT.
j4=ifft2(f);
% Display all 4 images.
imtool(j,[]);
imtool(j1,[]);
imtool(j2,[]);
imtool(j3,[]);%j and j3 are same.
imtool(abs(j4),[]);
输出:
代码说明:
- j=ifft2(f);此行计算 FT 图像的逆 FT。
- f(1:20, 20:40)=0;这条线从 FT 图像中去除了一些频率。
- j4=ifft2(f);这条线在去除一些频率后计算逆 FT。
- imtool(abs(j4),[]);此行显示修改后的图像,其中包含一些振铃伪影。
特性:
- 摄影师图像和傅里叶变换图像之间没有一一对应的关系。
- 摄影师图像表示空间域中的强度。
- 傅里叶变换图像表示频域中的频率。
- 较低频率表示图像的平滑部分,而较高频率表示图像边缘等形状分量。
- 如果从频域图像中去除低频部分,则空间域图像将变得模糊。
- 如果频域图像中的任何频率值被移除(设为 0),则将从空间域图像中的每个强度值中移除(减去)该特定频率。