У меня есть фильм с 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
петли, и это отлично работает. Тем не менее, для циклов требуется много времени.