2012-03-19 45 views
2

我猜这里有多种形式的问题在这里在stackoverflow。但我无法理解我如何解决我的问题。在MATLAB中的图像中存在的最大频率

我有一个图像,我想找到图像的频率内容。

img = imread('test.tif'); 
img = rgb2gray(img); 
[N M] = size(img); 
%% Compute power spectrum 
imgf = fftshift(fft2(img)); 
imgfp = (abs(imgf)/(N*M)).^2; 

我知道我必须使用fft来达到这个目的。但是我想知道是否可以根据特定值找到图像中的最大频率,比如'x周期/毫米'或'x周期/英寸'。

这样做的最好方法是什么?

谢谢。

+3

如果你看看'imgfp',你会注意到几乎所有的图像都将具有非零的频率内容,直到fs/2(其中fs是采样率)。所以你需要澄清你的意思是“最高频率”。 – 2012-03-19 20:57:03

回答

4

FFT返回一个数组中的数据,其中每个数组元素与每个总数据宽度(或高度等)的循环有些相关。因此,您可以用某个尺寸单位(例如“英寸”)将图像大小除以每个FFT单元的数量,以获得每单位尺寸的周期数(例如每英寸的周期数)。请注意,除了某些非常特定的狭窄指定类型的图像(例如恒定幅度精确孔径的周期性正弦梯度)外,任何图像内容都将在整个频谱和FFT结果范围内飞溅。因此,您可能必须为频率内容设置一些非零阈值,然后才能限制“最大”频率搜索。

+0

感谢您的回复。所以我想我应该先找到FFT的bin编号。 – Sista 2012-03-19 21:31:58

+0

不是“垃圾箱号码”。一个FFT具有N/2个bin(对于典型的实际输入是独立的),每个都有一个复数幅度值。 – hotpaw2 2012-03-19 22:19:30

+0

值得指出的另一件事是,你隐式地假设矩形窗口函数,但直接计算FFT。在实践中几乎没有人会使用它。您应该考虑使用Chebyshev窗口来对图像进行卷积处理,以减少旁瓣在频率估计中的影响。如果你是新手,这可能听起来像是一堆胡言乱语,但它非常值得学习,而且Matlab有很好的内置插件,可以使开窗更容易。 – ely 2012-03-20 07:08:31