2012-11-25 12 views

答えて

51

あなたはこのコードを使用することができます(つまり、F = fft2(I)Iがあなたの入力画像とFはそのフーリエ変換であることを

と仮定すると:ここ

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 
+6

+1。ログ(F + 1)を使用していて、ログ(F)ではない理由についてのコメントを追加することができます - ログ(0)未定義の値のため) –

+0

@Anderyありがとう、完了。 –

23

は私のHOWから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'); 

これは、画像の振幅スペクトルと位相スペクトルを示します。カラー画像を使用しましたが、グレー画像を使用するように簡単に調整できます。

ps。私はちょうどMatlab 2012a上に上記の画像は含まれていないことに気付きました。したがって、上の最初の行は、

img = imread('ngc6543a.jpg'); 

と置き換えてください。私は上記の例を作成するために古いバージョンのMatlabを使用し、ここでそれをコピーしました。

スケーリングファクタに

我々は、2Dフーリエ変換の大きさを変換プロットするとき、我々はよりよく見ることができるように明るい領域に暗い画素の範囲を拡大する変換ログ用いた画素値をスケーリングする必要があります変換。私たちは、私が知っているdetrmineこのスケールを事前にする既知の方法はありません式で

s = c log(1+r) 

c値を使用します。ちょうど にあなたが好きに得るために異なる値を試してみる必要があります。上記の例では100を使用しました。

enter image description here

+0

imagescを使用している場合(c-limitsを設定しない)、使用している定数の意味がありません –

+4

空間ドメインと周波数ドメインで 'fftshift'を適用しています。それ 。 。 。いいえ、いいえ? – imallett

関連する問題