42

fft2 を使用して、MATLAB でグレースケール イメージのフーリエ変換を計算しています。

結果の大きさをプロットする一般的な方法は何ですか?

4

2 に答える 2

56

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
于 2012-11-25T07:39:49.910 に答える
23

これが私の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上記の例で使用しました。

ここに画像の説明を入力してください

于 2012-11-25T08:38:16.260 に答える