42

我正在使用 fft2 在 MATLAB 中计算灰度图像的傅里叶变换。

绘制结果大小的常用方法是什么?

4

2 回答 2

56

假设这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
于 2012-11-25T07:39:49.910 回答
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');

这给出了图像的幅度谱和相位谱。我使用了彩色图像,但您也可以轻松地将其调整为使用灰色图像。

附言。我刚刚注意到在 Matlab 2012a 上不再包含上面的图像。所以,只需将上面的第一行替换为 say

img = imread('ngc6543a.jpg');

它会起作用。我使用旧版本的 Matlab 来制作上面的例子,并在这里复制它。

关于比例因子

当我们绘制二维傅里叶变换幅度时,我们需要使用对数变换来缩放像素值,以将暗像素的范围扩大到明亮区域,以便我们更好地看到变换。我们c在等式中使用一个值

s = c log(1+r) 

据我所知,没有已知的方法可以预先确定这个比例。只需要尝试不同的价值观就可以让你喜欢。我100在上面的例子中使用过。

在此处输入图像描述

于 2012-11-25T08:38:16.260 回答