1

画像強調用のコードを実装し、フーリエ変換と逆フーリエ変換を適用するために、以下のコードを使用していますが、結果として黒い画像が得られます。

F = fft2(image); F = fftshift(F); % Center FFT
F = abs(F); % Get the magnitude
F = log(F+1); % Use log, for perceptual scaling, and +1 since log(0) is undefined
F = mat2gray(F); % Use mat2gray to scale the image between 0 and 1
Y = ifft2(F);
subplot(1,1,1);
imshow(Y,[]); % Display the result
4

1 に答える 1

2

純粋な実数 (および正) の行列の逆 FFT をイメージしようとしますabs(F)。その逆 FT は複雑なものであり、元の FT の位相を失うため、奇妙な結果が得られます (ほぼ黒の画像で、最終的に最初のピクセルが白になる...)。

2 番目のエラーです。いくつかの計算を行うために fft をシフトしますが、前にシフトを反転しません。

必要に応じて、FFT の位相を維持する必要があります。

F = fft2(image); F = fftshift(F); % Center FFT
Fp = angle(F); % Get the phase
F = abs(F); % Get the magnitude
F = log(F+1); % Use log, for perceptual scaling, and +1 since log(0) is undefined
F = mat2gray(F); % Use mat2gray to scale the image between 0 and 1
Y = real(ifft2(ifftshift(F.*exp(1i*Fp))));
subplot(1,1,1);
imshow(Y,[]); % Display the result

注:Matlab は FT (直接または逆) の出力として複素数配列を自動的に作成するため、逆 FFT の実部を取得する必要があります。max(abs(imag(Y(:))))私のコンピューターに , 6e-11の値が表示されている場合は、これを確認できます。

于 2014-04-24T16:23:09.297 に答える