【问题标题】:FFT: why the reconstructions from different frequency-domain data produce the same resultFFT:为什么来自不同频域数据的重建会产生相同的结果
【发布时间】:2018-01-04 01:34:22
【问题描述】:

改变某个值位置的 (i)fftshift 操作是否与重建图像有关? 如果使用零填充,在频域中切割数据也没有意义? MATLAB 演示:

I = imread('cameraman.tif');

% making 3 different frequency data
kraw = fft2(I);
kshift = fftshift(kraw);
kcut = kshift(:,1:end-64);

imshow(abs([kraw,kshift,kcut]),[])
% reconstructing
ToImage = @(x) uint8(abs(x));
Rraw = ToImage(ifft2(kraw));
Rshift = ToImage(ifft2(kshift));
Rcut = ToImage(ifft2(kcut,size(I,1),size(I,2)));
imshow([I,Rraw,Rshift,Rcut])

% metric the difference
ssim_raw = ssim(uint8(abs(Rraw)),I);
ssim_shift = ssim(uint8(abs(Rshift)),I);
ssim_cut = ssim(uint8(abs(Rcut)),I);
title(['SSIM:    1-----|-----',num2str(ssim_raw),'----|-----',num2str(ssim_shift),'----|-----',num2str(ssim_cut)])

【问题讨论】:

    标签: matlab fft


    【解决方案1】:

    我现在无法运行 matlab,但一般的答案是它们 可以产生不同的结果。 DFT是同构的,这意味着任何图像只有一个光谱,任何光谱只有一个图像。

    您可能应该查看结果的实际连贯差异。例如,频域中的 fftshift 等效于空间域中的线性相位乘法,不会影响幅度。剪切示例让我感到惊讶,所以我怀疑它是ssim 指标如何工作的结果。我对它不熟悉,所以我不能提供任何细节。

    【讨论】:

    • 每个组件的位置会影响ifft2之后的结果吗?我可以得到一个像这样的恰当图像:Rcut_shift = ToImage(ifft2(ifftshift(kcut),size(I,1),size(I,2))); 零频率分量不在 ifftshift(kcut) 的左上角
    • 如果我理解你在问什么......在频域中移动样本的位置会改变图像域样本的相位,但不会改变它们的幅度。例如,尝试以下操作:x = ones(5,5); X = fft2(x); x2 = ifft2(ifftshift(X)); 您会看到xx2 的幅度相等,但它们的相位不同。
    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多