質問

2Dマトリックスでインパルスピーク(DIRAC DELTA)を見つけるための最良の方法は何ですか。

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

FindPeaksを使用することを考えましたが、2Dバージョンはありません。また、Imdilateおよび/またはImextedmaxを使用して通常のピークを見つけることに関する以前の投稿も見ましたが、それらは2Dマトリックスのすべてのピークを見つけますが、私は衝動ピークにのみ興味があります。私はDSPの人々がこれのための共通のレシピを持っていると確信しています...

助けてください、

ありがとう

役に立ちましたか?

解決

あなたがしたいのは、コントラストの高いピークを見つけることです。したがって、局所的な最大値を特定する方法と、ピークと周囲の値の違いを測定する方法が必要です。この違いのしきい値は、あなたのための衝動ピークを特定します。

入力信号が呼び出されると仮定します 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).

他のヒント

私が書いたこの論文 2Dでの高速ローカルピーク検出用のMATLABソースコードが含まれています。に似ています imregionalmax() MathWorks Image Processing Toolboxでは、地元の近所の半径を指定できます:より大きな半径 - >スパースピーク。

あなたはまばらな衝動を期待するので、 nonmaxsupp_scanline() 機能はあなたに適している場合があります。

findpeaks アルゴリズムはかなり些細なことです。要素が両方の隣人よりも大きい場合、それはピークです。これの2Dバージョンを書くのは非常に簡単なはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top