2

MATLAB に 70 のグレースケール フレームを含むムービーがあります。私はそれらを 3 次元行列に入れました。そのため、次元は X、Y、時間です。
時間次元で周波数を決定したいので、3 次元のすべてのポイントの FFT を計算する必要があります。これは問題ありませんが、 で画像を元の形に戻す必要がありifftます。
通常の状況X = ifft(fft(X))では、これは true: ですが、多次元データを扱う場合、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 なので、640x480 ピクセルの画像が 70 枚あります。

のみを使用する場合ffty2は 480x640x128 です ( で 128 ポイントが必要なため、これは正常ですNFFT)。
と を使用するfftiffty2480x640x128 ピクセルになります。これは正常ではありません。128 は再び 70 になるはずです。2 つのループを
使用して 1 次元だけで実行しようとしましたが、これは正常に機能します。forただし、for ループには時間がかかります。

4

1 に答える 1

1

次のように呼び出す必要があります。

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

またはより一般的に

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

あなたがやっている方法では、3番目の次元も128にifft等しくなるように出力を要求しています。NFFT

于 2012-06-09T16:36:37.523 に答える