我正在使用fft2来计算MATLAB中灰度图像的傅里叶变换。
绘制结果大小的常用方法是什么?
答案 0 :(得分:53)
假设I
是您的输入图像,F
是其傅里叶变换(即F = fft2(I)
)
您可以使用此代码:
F = fftshift(F); % Center FFT
F = abs(F); % Get the magnitude
F = log(F+1); % Use log, for perceptual scaling, and +1 since log(0) is undefined
F = mat2gray(F); % Use mat2gray to scale the image between 0 and 1
imshow(F,[]); % Display the result
答案 1 :(得分:23)
这是我的HOW TO Matlab页面的一个例子:
close all; clear all;
img = imread('lena.tif','tif');
imagesc(img)
img = fftshift(img(:,:,2));
F = fft2(img);
figure;
imagesc(100*log(1+abs(fftshift(F)))); colormap(gray);
title('magnitude spectrum');
figure;
imagesc(angle(F)); colormap(gray);
title('phase spectrum');
这给出了图像的幅度谱和相位谱。我使用了彩色图像,但您也可以轻松调整它以使用灰色图像。
PS。我刚注意到在Matlab 2012a上面不再包含上面的图像了。所以,只需用上面的第一行替换
img = imread('ngc6543a.jpg');
它会起作用。我使用旧版本的Matlab来制作上面的例子,并将其复制到这里。
关于缩放系数
当我们绘制2D傅里叶变换幅度时,我们需要使用对数变换来缩放像素值,以将暗像素的范围扩展到明亮区域,以便我们可以更好地看到变换。我们在等式中使用c
值
s = c log(1+r)
我知道,没有任何已知的方法来预测这种规模。只需要
尝试不同的价值观,让你喜欢。我在上面的示例中使用了100
。