2012-06-09 3 views
2

У меня есть фильм с 70 градациями серого в MATLAB. Я поместил их в трехмерную матрицу, поэтому размеры X, Y и время.
Я хочу определить частоты во времени, поэтому я должен вычислить БПФ для каждой точки в измерении 3 rd. Это не проблема, но я должен вернуть изображения в исходную форму с ifft.
В нормальной ситуации это было бы верно: X = ifft(fft(X)), но это не так, кажется, в MATLAB, когда вы работаете с многомерными данными.FFT и IFFT на 3D-матрице (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, так что есть 70 изображений 640х480 пикселей.

Если я использую только fft, y2 - 480x640x128 (это нормально, потому что мы хотим 128 пунктов с NFFT).
Если я использую fft и ifft, y2 - 480x640x128 пикселей. Это не нормально, 128 должны быть снова 70.
Я попытался сделать это только в одном измерении, используя 2 for петли, и это отлично работает. Тем не менее, для циклов требуется много времени.

ответ

0

Вы должны были бы назвать:

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

или в более общем

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

То, как вы делаете это, вы запрашивающего выход ifft также иметь третье измерение быть равно NFFT, что для вас 128.

Смежные вопросы