图像进行傅里叶变换后会存在移位的情况
即:图像的中间会变到第一个值,那么我们怎么将他变到符合人眼的状态呢,就是用下面的fftshift
fftshift
Matlab函数——fftshift
作用:将零频率的分量移到频谱的中心
描述:通过移动零频率分量到数组的中心,Y=fftshift(X)对fft、fft2、fftn的输出进行了重新的排列。这对于用肉眼观察傅里叶变换是非常有帮助的,因为零频率的分量在频谱的中心。
注意:ifftshift是fftshift的逆过程。如果矩阵X包含奇数个元素,为了得到原始的X,我们必须用ifftshift(fftshift(X))这个操作。单纯的通过两次使用fftshift(X)将不会得到X。
奇数个:
a =
1 2 3
4 5 6
7 8 9
fftshift(fftshift(a))
ans =
5 6 4
8 9 7
2 3 1
ifftshift(fftshift(a))
ans =
1 2 3
4 5 6
7 8 9
偶数个:
b =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
fftshift(fftshift(b))
ans =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
ifftshift(fftshift(b))
ans =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
窗函数
由于我的跟踪响应图是肯定存在噪声的,所以我考虑将响应图加窗函数,
加汉宁窗:
% Window function
Window = hanning(size(Icrop,1))*hanning(size(Icrop,2))';
SinewaveLwindowed = Icrop.*Window;
figure;
imshowpair(Window,SinewaveLwindowed,'montage');
加凯撒窗:
% try another window
Beta = 30;
N = 64;
w = kaiser(N,Beta);
wvtool(w)
Window = kaiser(size(Icrop,1),Beta)*kaiser(size(Icrop,1),Beta)';
SinewaveLwindowed = Icrop.*Window;
figure;
imshowpair(Window,SinewaveLwindowed,'montage');
figure;
imshowpair(log(1 + abs(fftshift(fft2(Icrop)))),log(1 + abs(fftshift(fft2(SinewaveLwindowed)))),'montage');
MATLAB绘制子图
这是例子:
subplot(2,2,1)
x = linspace(0,10);
y1 = sin(x);
plot(x,y1)
title('Subplot 1: sin(x)')
subplot(2,2,2)
y2 = sin(2*x);
plot(x,y2)
title('Subplot 2: sin(2x)')
subplot(2,2,3)
y3 = sin(4*x);
plot(x,y3)
title('Subplot 3: sin(4x)')
subplot(2,2,4)
y4 = sin(8*x);
plot(x,y4)
title('Subplot 4: sin(8x)')
suptitle('JaySur:suptitle这行才是总标题')