3

を使用して画像を拡大する簡単な matlab コードを作成しようとしていfftます。画像のフーリエ変換を計算し、ゼロでパディングし、パディングされた画像の逆フーリエを計算する、既知の画像拡張アルゴリズムを試しました。ただし、逆フーリエ変換は、複素数を含むイメージを返します。したがって、 を使用して結果を表示しようとするとimshow、次のエラーが発生します。

Warning: Displaying real part of complex input.

私が何を間違っているのか分かりますか?

私のコード:

im = imread('fruit.jpg');
imFFT = fft2(im);
bigger = padarray(imFFT,[10,10]);
imEnlarged = ifft2(bigger);

ありがとう!

4

3 に答える 3

3

より高い周波数で直接パディングできます(Luis Mendofftshiftの提案なし)

>> BIG = padarray( amp*imFFT, [20 20], 0, 'post' );
>> big = ifft2( BIG );
于 2013-11-05T11:39:05.473 に答える
3

厳密に実数の結果が必要な場合は、IFFT を実行する前に、ゼロで埋められた配列が正確に共役対称であることを確認する必要があります。中心からずれてゼロを追加すると、この必要な対称性が妨げられる可能性があります。

数値精度が有限であるため、依然として複雑な IFFT 結果になる可能性がありますが、虚数成分はすべて、本質的にゼロに相当する小さな値になります。

FFT ライブラリには、対称性を強制し、ほぼゼロの数値ノイズを捨てる半分から実数 (2D の場合は 1/4 サイズの入力) のバージョンが含まれている場合があります。

于 2013-11-05T16:26:57.327 に答える