画像の周波数成分を特定するのに問題があります
ここでは、256×256バイナリを単純に生成しました-画像。
a = [zeros(256,128) ones(256,128)]; imshow(a);
画像をFFTしてシフト中心へのゼロ周波数
f = fft2(a) shft = fftshift(f); imshow(log(shft)) %stretching
結果
周波数成分の数とそれらの周波数を特定するにはどうすればよいですか?
また、1次元シーケンスのFFTを計算し、そのシーケンスをプロットすると、負の特定の値、それはどういう意味ですか?負の周波数はどのように存在する可能性がありますか?
コメント
- 関連(重複の可能性あり): dsp。 stackexchange.com/q/1637/77
- 変換の機能を理解するための最良の方法の1つは、逆変換を試すことです。ドットを描画し、それを逆変換して、生成される波を確認します。次に、別の場所にドットを試し、次に線などを試します。負の周波数については、 dsp.stackexchange.com/q/431/29 を参照してください。
回答
どのようにして負の周波数が存在する可能性がありますか?
FFT係数は周波数ではなく、複素振幅です。係数の係数は振幅を示し、係数の引数は位相を示します。
log(shft)
、shftは複雑な行列であるため、結果は実際のものではなく、画像としてプロットすることはできません。
コメント
- あなたが言うことすべて本当ですが、それはまた質問を回避しています。係数の半分は負の周波数に対応すると解釈できます。
回答
最初の提案は、結果を2Dで解釈する前に、1次元でFFTを理解してください。
離散フーリエ変換(FFTはDFTの実装)は複素数変換です。サイズNの2つのベクトル間で複素数ベクトルを変換します。
したがって、1Dの場合、負の値だけでなく、一般に複素数値も取得します。
2Dでも同じことが当てはまります。 imshow関数は、おそらく複雑な行列の実際の部分を占めています(imshowのドキュメントでは明確ではありません)。
回答
abs
コマンドがありません。
次のことを試してください:
f = fft2(a) shft = fftshift(abs(f)); imshow(log(shft)) %stretching