绘制相位和幅度图像傅里叶

问题描述 投票:0回答:3

如何在 MATLAB 中绘制 2D 图像的傅里叶变换的相位和幅度? 我使用

angle
abs
,然后使用
imshow
,但我得到了黑色图像。
在此绘图中
fftshift
有什么用?

image matlab plot fft phase
3个回答
1
投票
F = fft2(I); where I is the input
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

试试这个。代码取自:如何在 Matlab 中绘制 2D FFT?


1
投票

根据您的评论,您需要删除直流偏移。 比如:

imagesc(abs(fftshift(fft2(I - mean(I(:))))));

0
投票

假设我们从保存到变量

image
的图像矩阵开始,并采用傅立叶变换来获取相位和幅度,如下所示:

ft_image = fftshift(fft2(image))
phase = angle(ft_image)
magnitude = abs(ft_image)

fftshift
函数将零频率 (DC) 分量移至图像的中心。如果不使用它,这些组件(通常显示为较亮的组件)就会被分成角落。

显示图像的问题可能是因为傅里叶变换的结果包含复数。它也可能超出图像值的正常范围。要显示幅度和相位,您可以使用以下任意函数:

plot()
imshow()
imagesc()

imshow
函数需要 0 到 1 之间的值,但包含逗号和空括号将使其起作用。如果很难看到高点,您可以尝试标准化数据、显示对数数据或使用傅立叶模数,如下例所示。您还可以使用
real(ft_image)
imag(ft_image)
分别可视化实部和虚部,或者可以在 3D 绘图中表示它们。

imshow(abs(log(1+ft_image)), [])
imagesc(magnitude^2)
plot(phase)
imshow(ft_image, [])
imagesc(phase)

请记住,

plot
imshow
imagesc
可以互换使用,只要您记得在必要时在
imshow
中包含括号即可。

© www.soinside.com 2019 - 2024. All rights reserved.