2010-11-21 50 views
4

2次元マトリックスでインパルスピーク(dirac delta)を見つける最良の方法は何ですか?MATLABで2次インパルスピークを見つける

具体的には、ある画像の高調波の周波数を探したいので、画像絶対値DFTにインパルスピークを見つける必要があります。

私はfindpeaksを使用すると考えましたが、2dバージョンはありません。私はまた、imdilateおよび/またはimextendedmaxを使用して通常のピークを見つけることに関する以前の記事を見ましたが、それらは2dマトリックスのすべてのピークを見つけますが、私はインパルスピークのみに興味があります。私は、findpeaks()アルゴリズムは非常に簡単である

おかげ

+0

"インパルスピーク"を定義します。 –

+0

私はフーリエ変換の絶対値がその周波数(無限大)でDiracデルタ関数の値をとる周波数を探しています。明らかに、DFTの場合、無限大ではなく大きなピークが見られると予想しています。問題は、それらのピークを2dで見つける方法、およびそれらを通常の(より低い、非インパルス)ピークからどのように区別するかです。 – smichak

答えて

6

あなたがしたいのは、コントラストの高いピークを見つけることです。したがって、極大値を特定する方法と、ピーク値と周囲の値の差を測定する方法が必要です。この差を閾値にすることで、あなたの衝動のピークが特定されます。良好なピークがあるところはどこでも、あなたの入力信号がsignal

%# dilate to find, for every pixel, the maximum of its neighbors 
dilationMask = ones(3); 
dilationMask(5) = 0; 
dilSignal = imdilate(signal, dilationMask); 

%# find all peaks 
%# peaks = signal > dilSignal; 

%# find large peaks peaks by thresholding, i.e. you accept a peak only 
%# if it's more than 'threshold' higher than its neighbors 
peaks = (signal - dilSignal) > threshold; 

peaksと呼ばれていると仮定すると、

は1の持つ論理配列です。信号からピーク高さを読み取ってsignal(peaks)とし、find(peaks)を使用して座標を見つけることができます。

+0

OK - これは始まりですが、どうすればしきい値を選択できますか?私はそれが入力信号に依存すべきだと考えます。それを選択するための良い方法/経験則がありますか? – smichak

+0

ディラックのピークですので、しきい値は無限大です:P。冗談はさておき、しきい値を選択する最良の方法は一つありません。 'signal-dilSignal'に' greythresh'を実行すると、シグナル用とノイズ用の2つの明確なピークがあれば試してみることができます。スレッショルドは、信号の3つの堅牢な標準偏差(メジアン絶対偏差)として設定することもできます。すべてのデータが一貫性があり、ピークの高さが容易に識別可能な意味を持つ場合は、固定値を決定することさえできます。 – Jonas

+0

OK - それは有望だと思う...私はそれに行きます。 – smichak

0

を助けてください...

DSPの人々は、このための共通のレシピを持っていると確信しています。ある要素がその近傍の要素よりも大きい場合、それはピークです。これの2D版を書くことはかなりシンプルにすべきです。

2

This paper I wroteには、2Dでの高速局所ピーク検出のためのMatlabソースコードが含まれています。これはMathworks Image Processing Toolboxのimregionalmax()に似ていますが、より大きな半径 - >より狭いピークのローカル近傍半径を指定することができます。

希薄なインパルスが予想されるので、nonmaxsupp_scanline()機能が適している可能性があります。

関連する問題