图像频域图中的黑白点
B&W Dots in Frequency domain figure of an image
我有这行简单的代码,它读取图像并使用 matlab
的 fft2
函数对图像进行傅里叶变换,然后通过fftshift
.
问题是在频域图像的图中:
1) 哪个 Black/White 点代表高频?
2)每个Black/White点的密度是否显示每个频率系数的强度?
clc;
clear all;
format short;
format compact;
im=imread('cameraman.tif');
figure,imshow(im);
F=fftshift(fft2(im));
figure,imshow(uint8(abs(F)));
一方面,您没有正确地可视化频谱的大小。您天真地将结果转换为 uint8
。因此,任何大于 255 的值都会被截断为 255。人们通常做的一件事是取频谱的对数并在取对数之前加 1 以确保没有未定义的错误。
因此,这样做:
figure; imshow(log(1 + abs(F)), []);
你得到的是这张照片:
这是对频谱的更好表示。 DC 系数具有最高的强度,位于图像的中间。高频系数向频谱的外边缘移动。您会看到在不同方向都有线条。这些实际上为您提供了图像中最突出边缘的方向,从垂直线开始,告诉您摄影师图像中有很多垂直线,这是有道理的。
此外,您说得对,系数的强度对应于图像中点的强度。此图像中的每个点都告诉您此时所经历的水平和垂直空间频率的强度。
我有这行简单的代码,它读取图像并使用 matlab
的 fft2
函数对图像进行傅里叶变换,然后通过fftshift
.
问题是在频域图像的图中:
1) 哪个 Black/White 点代表高频?
2)每个Black/White点的密度是否显示每个频率系数的强度?
clc;
clear all;
format short;
format compact;
im=imread('cameraman.tif');
figure,imshow(im);
F=fftshift(fft2(im));
figure,imshow(uint8(abs(F)));
一方面,您没有正确地可视化频谱的大小。您天真地将结果转换为 uint8
。因此,任何大于 255 的值都会被截断为 255。人们通常做的一件事是取频谱的对数并在取对数之前加 1 以确保没有未定义的错误。
因此,这样做:
figure; imshow(log(1 + abs(F)), []);
你得到的是这张照片:
这是对频谱的更好表示。 DC 系数具有最高的强度,位于图像的中间。高频系数向频谱的外边缘移动。您会看到在不同方向都有线条。这些实际上为您提供了图像中最突出边缘的方向,从垂直线开始,告诉您摄影师图像中有很多垂直线,这是有道理的。
此外,您说得对,系数的强度对应于图像中点的强度。此图像中的每个点都告诉您此时所经历的水平和垂直空间频率的强度。