matlab 每日学习 fft2 ifft2函数

               作者:曾维

图像处理,使用时注意 :

如下图图片进行处理,读者可以将该图片保存下来,再进行如下处理。笔者试过,有些图片不存在本文所说的问题。

 

  rgbfile=imread('1.png');matlab <wbr>每日学习 <wbr>fft2 <wbr>ifft2函数

  grayfile=rgb2gray(rgbfile);

   subplot(2,2,1);

   imshow(grayfile);%显示刚输入的图片的灰度图

   Ft=fft2(grayfile);%进行ft变换

   iFt=real(ifft2(Ft));%进行反变换

subplot(2,2,2);

   imshow(iFt,[ ]);%显示复原的图片,可结果却不是原图片

 

 可结果却不是原图片,这是为什么呢?理论上说经过fft2变换后再反变换(ifft2)是可以完全复原图像的。我们再来看看问题出在哪了。

不防先拿一个小的矩阵来试试

A=uint8(magic(3))%模拟图片矩阵,256灰度级

B=ifft2(fft2(A))

A =

        6
        7
        2


B =

   8.000000000000000e+000   1.000000000000000e+000   6.000000000000000e+000
   3.000000000000000e+000   5.000000000000000e+000   7.000000000000000e+000
   4.000000000000000e+000   9.000000000000000e+000   2.000000000000000e+000

 

可以看到,结果A与B唯一的不同点为,B是double型数据,而A是uint8型数据。

我们再来试试,将上面例子的代码最后加一个数据类型转换。

再加如下代码

iFt2=uint8(iFt);

subplot(2,2,3);

imshow(iFt2)

这下输出的图片和原灰度图看上去是一样的了。我们再验正一下。对两个图作一个差

D=abs(grayFile-iFt2);

sum(D(:));

ans =

    0

 

结果等于0,即图片经过反变换复原了

 

附fft2 和ifft2在matlab 2010帮助

 

 FFT2 Two-dimensional discrete FourierTransform.
    FFT2(X)returns the two-dimensional Fourier transform of matrix X.
    If X is avector, the result will have the same orientation.
 
   FFT2(X,MROWS,NCOLS) pads matrix X with zeros to sizeMROWS-by-NCOLS
    beforetransforming.
 
    Classsupport for input X:
      float: double, single
 
    See alsofft, fftn, fftshift, fftw, ifft, ifft2, ifftn.

    Referencepage in Help browser
      doc fft2

 

 

 IFFT2 Two-dimensional inverse discrete Fouriertransform.
    IFFT2(F)returns the two-dimensional inverse Fourier transform ofmatrix
   F.  If F is a vector, the result will have thesame orientation.
 
   IFFT2(F,MROWS,NCOLS) pads matrix F with zeros to sizeMROWS-by-NCOLS
    beforetransforming.
 
    IFFT2(...,'symmetric') causes IFFT2 to treat F as conjugate symmetric
    in twodimensions so that the output is purely real. This option is
    useful whenF is not exactly conjugate symmetric merely because of
    round-offerror.  See the reference page for the specificmathematical
    definitionof this symmetry.
 
    IFFT2(...,'nonsymmetric') causes IFFT2 to make no assumptions about the
    symmetry ofF.
 
    Classsupport for input F:
      float: double, single
 
    See alsofft, fft2, fftn, fftshift, fftw, ifft, ifftn.

    Referencepage in Help browser
      doc ifft2

 

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你好!对于学习FFT(快速傅里叶变换)和IFFT(逆傅里叶变换),Matlab提供了丰富的函数和工具。FFT和IFFT是一对互为逆运算的变换,用于在时域和频域之间进行转换。 要学习FFT和IFFT的基本概念和原理,你可以参考相关的数学教材或在线教程。在Matlab中,你可以使用以下函数来进行FFT和IFFT的计算: 1. fft(x):该函数用于计算输入信号x的FFT(快速傅里叶变换)。它将信号从时域转换为频域,并返回一个复数数组,表示频域上的幅度和相位信息。 2. ifft(X):该函数用于计算输入信号X的IFFT(逆傅里叶变换)。它将信号从频域转换回时域,并返回一个复数数组,表示时域上的原始信号。 这些函数的使用方法非常简单。你只需要将待处理的信号作为参数传递给相应的函数,然后使用输出结果进行进一步的分析或处理。例如,你可以使用fft函数计算信号的频谱,并使用ifft函数将频谱转换回原始信号。 以下是一个简单的示例代码,演示了如何使用fft和ifft函数: ```matlab % 生成一个测试信号 Fs = 1000; % 采样率 T = 1/Fs; % 采样周期 L = 1000; % 信号长度 t = (0:L-1)*T; % 时间向量 x = cos(2*pi*50*t) + 0.5*sin(2*pi*120*t); % 合成信号 % 计算信号的FFT X = fft(x); % 计算信号的频谱 P2 = abs(X/L); P1 = P2(1:L/2+1); P1(2:end-1) = 2*P1(2:end-1); f = Fs*(0:(L/2))/L; % 绘制频谱图 plot(f, P1) title('单边振幅谱') xlabel('频率 (Hz)') ylabel('幅度') % 计算信号的IFFT y = ifft(X); % 绘制原始信号和IFFT后的信号 subplot(2,1,1) plot(t, x) title('原始信号') xlabel('时间 (s)') ylabel('幅度') subplot(2,1,2) plot(t, real(y)) title('IFFT后的信号') xlabel('时间 (s)') ylabel('幅度') ``` 这段代码首先生成一个测试信号,然后使用fft函数计算信号的FFT,并绘制出频谱图。接下来,使用ifft函数FFT结果进行逆变换,得到原始信号,并绘制出原始信号和逆变换后的信号。 希望这个简单的示例能帮助你入门FFT和IFFT学习。祝你学习愉快!如有任何问题,请随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值