【问题标题】:MATLAB- 2D DFT very slowMATLAB- 2D DFT 非常慢
【发布时间】:2013-05-25 11:12:37
【问题描述】:

我必须自己编写 2D DFT,我目前正在使用它

for l=0:1:m-1
for k=0:1:n-1
    for x=0:1:n-1
        for y=0:1:m-1
            a=x+1;b=y+1;
            c= im3(a,b) * exp(-1i*2*pi*(k*x/n + l*y/m));
            c1=c1+c;
        end
    end
    aa=l+1;bb=k+1;
    im(bb,aa)=c1;
    c1=0;
end
end

它适用于较小的图像,但当像素尺寸或数组变大时,它会变得异常缓慢。有人可以帮忙吗?

im3是存储像素值的数组,im是算法执行后存储像素值的数组

【问题讨论】:

  • 您是否预先分配了im,或者在循环之前它是否已经存在于工作区中?
  • 是的,我已经处理好了。
  • 您是否考虑过使用FFTvectorizing 您的代码?请注意,尽管您将帖子标记为“FFT”,但您似乎没有使用 FFT。
  • 你使用了太多的循环,尽量避免使用矩阵操作至少其中两个。它会加速你的代码。还有一点,如果你有并行计算工具箱,如果你的计算机上有多个内核,请尝试使用 parfor

标签: matlab fft dft


【解决方案1】:

要计算 2D DFT,您需要先计算行的 DFT,然后再计算列。 试试这段代码

f1=imread('Lady.tif')
[M1,N1]=size(f1)
 DFT=exp(sqrt(-1)*2*pi*(n).*(k)./512);

%img=x.';
F1R=zeros(M1,N1); F1RC=zeros(M1,N1);

for row=1:M1;


 x=f1(row,:)';

 F1R(row,:)=((DFT*x)');


end
%%part one

for col=1:N;


 x=F1R(:,col);

 F1RC(:,col)=((DFT'*x));


end

顺便说一句,fft2 也应该为您提供 2D DFT

查看此链接 http://www.mathworks.com/help/signal/ug/discrete-fourier-transform.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 2012-08-03
    • 2015-05-22
    • 1970-01-01
    • 2012-01-07
    • 2017-06-05
    • 1970-01-01
    • 2017-12-12
    相关资源
    最近更新 更多