MATLABでグレースケールイメージのフーリエ変換を計算するためにfft2を使用しています。
結果の大きさをプロットする一般的な方法は何ですか?
I
が入力画像であり、F
がフーリエ変換であると仮定します(つまり、F = fft2(I)
)
次のコードを使用できます。
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
imshow(F,[]); % Display the result
HOW TO Matlabページの例を次に示します。
close all; clear all;
img = imread('lena.tif','tif');
imagesc(img)
img = fftshift(img(:,:,2));
F = fft2(img);
figure;
imagesc(100*log(1+abs(fftshift(F)))); colormap(gray);
title('magnitude spectrum');
figure;
imagesc(angle(F)); colormap(gray);
title('phase spectrum');
これにより、画像の振幅スペクトルと位相スペクトルが得られます。カラー画像を使用しましたが、グレー画像も使用するように簡単に調整できます。
追伸Matlab 2012aでは上記の画像が含まれていないことに気付きました。したがって、上の最初の行を次のように置き換えてください。
img = imread('ngc6543a.jpg');
そしてそれは動作します。古いバージョンのMatlabを使用して上記の例を作成し、ここにコピーしました。
スケーリング係数について
2Dフーリエ変換の大きさをプロットするときは、対数変換を使用してピクセル値をスケーリングし、暗いピクセルの範囲を明るい領域に拡大する必要があります。これにより、変換がわかりやすくなります。方程式でc
値を使用します
s = c log(1+r)
私が知っているこのスケールを事前に決定する既知の方法はありません。あなたが好きになるために異なる値を試す必要があります。上記の例では100
を使用しました。