fourier shift theorem matlab

2019-06-25 14:30发布

I'm currently trying to understand the 2d fourier shift theorem.

According to what I've learnd so far a translation in the image space leads to differences in phase but not the magnitude in frequency space.

I tried to demonstrate this with a little example but it only worked for shifts in rows but not in columns. Here's the little demo (I'm only showing the magnitude plots here)

clear all
close all
Iin = zeros(128);
Iin(10:20,10:20)=1;
figure,imagesc(Iin)
Y = fft(Iin);
figure, imagesc(fftshift(log10(abs(Y))));

Iin = zeros(128);
Iin(10:20,20:30)=1;
figure,imagesc(Iin)
Y = fft(Iin);
figure, imagesc(fftshift(log10(abs(Y))));

Iin = zeros(128);
Iin(20:30,10:20)=1;
figure,imagesc(Iin)
Y = fft(Iin);
figure, imagesc(fftshift(log10(abs(Y))));

In my opinion all 3 magnitude plots should yield the same result. Can anyone explain me what I'm doing wrong here?

Thank you very much for your help,

best regards,

Mini

1条回答
我欲成王,谁敢阻挡
2楼-- · 2019-06-25 14:34

I think you want to use fft2, not fft for this.

fft2 calculates the 2d fourier transform, which is what you stated you are studing. fft only calculates the fourier transform of each row.

Everything should work if you just substitute fft2 for fft in your code.

查看更多
登录 后发表回答