fft2 を使用して、MATLAB でグレースケール イメージのフーリエ変換を計算しています。
結果の大きさをプロットする一般的な方法は何ですか?
fft2 を使用して、MATLAB でグレースケール イメージのフーリエ変換を計算しています。
結果の大きさをプロットする一般的な方法は何ですか?
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
これが私のHOWTOMatlabページの例です。
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フーリエ変換の大きさをプロットするときは、対数変換を使用してピクセル値をスケーリングし、暗いピクセルの範囲を明るい領域に拡大して、変換がよく見えるようにする必要があります。c
方程式の値を使用します
s = c log(1+r)
私が知っているこのスケールを事前に決定する方法は知られていない。好きなように乗るには、さまざまな値を試す必要があります。100
上記の例で使用しました。