1

私は自分の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、アルゴリズムの実行後に値を格納する配列です

4

1 に答える 1

0

2D DFT を計算するには、行の 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

于 2014-01-30T20:28:22.863 に答える