我必须自己编写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
是在算法执行后存储值的数据
答案 0 :(得分:0)
要计算2D DFT,您需要计算行的DFT,然后计算cols。 试试这段代码
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