2012-06-09 7 views
2

MATLAB에서 70 개의 회색조 프레임이있는 동영상이 있습니다. 저는 그것들을 3 차원 행렬에 넣었습니다. 그래서 차원은 X, Y, 그리고 시간입니다.
나는 시간 차원에서 주파수를 결정하기를 원하므로 3 rd 차원의 모든 점에 대해 FFT를 계산해야합니다. 이것은 문제가되지 않지만 이미지를 ifft으로 원래 형식으로 되돌려 보내야합니다.
정상적인 상황에서는 X = ifft(fft(X))이 사실이지만 다차원 데이터로 작업 할 때 MATLAB에서는 그렇지 않습니다. 3D 매트릭스 (Matlab)에서 FFT 및 IFFT

제가 사용하는 코드이다

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입니다 (이는 NFFT과 함께 128 포인트를 원하기 때문에 정상입니다).
fftifft을 사용하는 경우 y2은 480x640x128 픽셀입니다. 이것은 정상이 아니며, 128은 다시 70이어야합니다.
2 개의 for 루프를 사용하여 하나의 차원에서이 작업을 시도했지만 정상적으로 작동합니다. for 루프는 많은 시간이 걸립니다.

답변

0

당신은 호출해야하는 것 : 더 일반적으로

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

당신이 그것을하고있는 방법, 당신은 ifft의 출력을 요청하는

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

또는 또한 세 번째 차원을 가지고 NFFT은 128입니다.