为什么二维傅立叶变换 (Matlab) 中的列需要一个临时值
Why do I need a temporary value for the columns in the 2D Fourier Transform (Matlab)
这是二维离散傅里叶变换的 matlab 代码。此代码转录自:
Scilab 数字图像处理教科书伴侣
作者:S. Jayaraman、S. Esakkirajan 和 T. Veerakumar。
我不太确定在第二个 for 循环中发生了什么,以及为什么我们必须为 f_2 使用临时值。
脚本的这个阶段发生了什么?
谢谢。
function [ftransformed2d]= dft2d(f)
[rows,cols]=size(f);
for k=1:cols
f_1(:,k)=exp(-2*1j*pi*(0:nROWs-1)'*(0:rows-1)/rows)*f(:,k);
end
for J=1:rows
f_2_a=exp(-2*1j*pi*(0:nCOLs-1)'*(0:nCOLs-1)/cols)*(f_1(J,:)).';
f_2(J,:)=f_2_a.';
end
ftransformed2d = circshift(f_2,floor(size(f_2)/2));
end
第一个循环对每一列执行 FFT,第二个循环对每一行执行 FFT。关于第二个循环,
f_2_a=exp(-2*1j*pi*(0:cols-1)'*(0:cols-1)/cols)*(f_1(J,:)).';
f_2(J,:)=f_2_a.';
f_2_a
的使用当然不是必需的,但可能为了便于阅读而包含在内。它可以写成
f_2(J,:) = ( exp(-2*1j*pi*(0:cols-1)'*(0:cols-1)/cols)*(f_1(J,:)).' ).';
这是二维离散傅里叶变换的 matlab 代码。此代码转录自:
Scilab 数字图像处理教科书伴侣 作者:S. Jayaraman、S. Esakkirajan 和 T. Veerakumar。
我不太确定在第二个 for 循环中发生了什么,以及为什么我们必须为 f_2 使用临时值。
脚本的这个阶段发生了什么?
谢谢。
function [ftransformed2d]= dft2d(f)
[rows,cols]=size(f);
for k=1:cols
f_1(:,k)=exp(-2*1j*pi*(0:nROWs-1)'*(0:rows-1)/rows)*f(:,k);
end
for J=1:rows
f_2_a=exp(-2*1j*pi*(0:nCOLs-1)'*(0:nCOLs-1)/cols)*(f_1(J,:)).';
f_2(J,:)=f_2_a.';
end
ftransformed2d = circshift(f_2,floor(size(f_2)/2));
end
第一个循环对每一列执行 FFT,第二个循环对每一行执行 FFT。关于第二个循环,
f_2_a=exp(-2*1j*pi*(0:cols-1)'*(0:cols-1)/cols)*(f_1(J,:)).';
f_2(J,:)=f_2_a.';
f_2_a
的使用当然不是必需的,但可能为了便于阅读而包含在内。它可以写成
f_2(J,:) = ( exp(-2*1j*pi*(0:cols-1)'*(0:cols-1)/cols)*(f_1(J,:)).' ).';