Image DFT Matlab函数
我写了一个函数来计算图像的DFT,我的目的是不用fftshift命令来显示振幅谱。DFT_img.m如下所示:Image DFT Matlab函数,image,matlab,dft,spectrum,Image,Matlab,Dft,Spectrum,我写了一个函数来计算图像的DFT,我的目的是不用fftshift命令来显示振幅谱。DFT_img.m如下所示: function f = DFT_img(a); [n m]=size(a); for i =1:n k=1; for j =1:n l=1; F(i,j)=(1/n*n)*a(i,j)*exp(-i*2*pi*(k*i+l*j)/n); l=l+1; end k=k+1; end f=F; 当我在命
function f = DFT_img(a);
[n m]=size(a);
for i =1:n
k=1;
for j =1:n
l=1;
F(i,j)=(1/n*n)*a(i,j)*exp(-i*2*pi*(k*i+l*j)/n);
l=l+1;
end
k=k+1;
end
f=F;
当我在命令窗口中写入命令时
A = imread("lena.tiff");
ans = DFT_img(A);
spectrum = log(abs(ans));
mesh(spectrum)
我得到的结果和你的不一样
fftshift matlab函数
是的!!!
我是不是在函数中出错了,或者问题出在哪里?您的代码根本不是2D DFT 编写2D DFT的最简单方法是对每列执行1D DFT,然后对结果的每行执行1D DFT 在伪代码中:
temp = zeros(size(a));
f = zeros(size(a));
for i = (1:m)
temp(:,i) = dft(a(:,i));
end
for j = (1:n)
f(j,:) = dft(temp(j,:));
end
您的代码看起来不像DFT,并且在索引数方面存在一些问题:请注意,DFT定义为0:N-1的复指数之和,而不像代码中的1:N。长话短说:尝试此函数(粘贴到kmv_dft2.m文件中): 现在检查这一点,并与MATLAB FFT实现进行比较
%%% input 2D signal
f = magic(5)
%% Fast Fourier Transform
F_fft = fftshift(fft2(f))
%% Slow Discrete Fouriers Transform
F = fftshift(kmv_dft2(f))
您可能希望查阅有关
fftshift
函数及其具体功能的MATLAB帮助。这个fftshift
函数经常让新手和我自己的学生感到困惑。我不明白!!在这种情况下,“dft”是什么?它向我显示了一个错误!!!类型为“double”的输入参数的未定义函数“dft”。DFT_img2(第6行)温度(:,i)=DFT(a(:,i))中的错误@user2287999:是的,这是伪代码!您需要实现一个名为dft
的函数。我的任务是使用以下公式F(i,j)=(1/nn)*a(i,j)*exp(-i*2*pi*(ki+l*j)/n);在以这种方式创建的图像中执行DFT:<代码> %在图像%m中画出正方形-图像的高度%n图像宽度%k -平方函数f=kAT(m,n,k)的维数a=0(m,n);A(m/2-k:m/2+k,n/2-k:n/2+k)=1;f=A;end@user2287999:那公式不正确。它应该是F(k,l)=…
。
%%% input 2D signal
f = magic(5)
%% Fast Fourier Transform
F_fft = fftshift(fft2(f))
%% Slow Discrete Fouriers Transform
F = fftshift(kmv_dft2(f))