2012-06-09 96 views
2

我在MATLAB中有一个包含70个灰度帧的电影。我把它们放在一个三维矩阵中,所以尺寸是X,Y和时间。
我想确定时间维度中的频率,所以我必须计算维度中每个点的FFT。这不是一个问题,但我必须将图像返回到原始形式ifft
在正常情况下,这将是正确的:X = ifft(fft(X)),但在MATLAB中处理多维数据时看起来并非如此。3D矩阵上的FFT和IFFT(Matlab)

这是我使用的代码:

for i = 1:length    
    y(:, :, i) = [img1{i, level}]; %# take each picture from an cell array and put it 
end         %# and put it in 3D array 
y2 = ifft(fft(y, NFFT,3), NFFT, 3); %# NFFT = 128, the 3 is the dimension in which i want 
            %# to calculate the FFT and IFFT 

y是480x640x70,所以有640×480像素70倍的图像。

如果我只使用fft,y2是480x640x128(这是正常的,因为我们需要128点NFFT)。
如果我使用fftifft,y2是480x640x128像素。这是不正常的,128应该是70。
我试图通过使用2 for循环在一维中做到这一点,这工作正常。 for循环花费了很多时间。

回答

0

你需要拨打:

y2 = ifft(fft(y, 128,3), 70, 3); 

或者更一般

y2 = ifft(fft(y, NFFT, 3), size(y,3), 3); 

你这样做的方式,你的要求的ifft输出也有第三个维度等于NFFT这是你的128。