Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image DFT Matlab函数_Image_Matlab_Dft_Spectrum - Fatal编程技术网

Image DFT Matlab函数

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; 当我在命

我写了一个函数来计算图像的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;
当我在命令窗口中写入命令时

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))