Question

Quelle est la meilleure méthode pour trouver des pics d'impulsion (Dirac Delta) dans une matrice 2D.

Plus précisément, je voudrais trouver les fréquences harmoniques d'une image donnée et j'ai donc besoin de trouver des pics d'impulsion dans la valeur absolue de l'image dft.

J'ai pensé à utiliser FindPeaks mais il n'y a pas de version 2D. J'ai également vu des articles précédents concernant la recherche de pics ordinaires en utilisant l'imdilate et / ou iMExtendMax, mais ceux-ci trouvent tous les pics dans une matrice 2D alors que je ne suis intéressé que par les pics d'impulsion. Je suis sûr que les gens du DSP ont une recette commune pour cela ...

Veuillez aider,

Merci

Était-ce utile?

La solution

Ce que vous voulez faire, c'est trouver des pics avec un contraste élevé. Ainsi, vous avez besoin d'un moyen d'identifier les maxima locaux, plus un moyen de mesurer la différence entre le pic et les valeurs environnantes. Le seuil de cette différence identifiera les pics d'impulsion pour vous.

En supposant que votre signal d'entrée est appelé 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 est un tableau logique avec 1 partout où il y a un bon pic. Vous pouvez l'utiliser pour lire les hauteurs de pic à partir du signal avec signal(peaks), et pour trouver des coordonnées en utilisant find(peaks).

Autres conseils

Ce document que j'ai écrit Contient le code source MATLAB pour la détection de pic locale rapide en 2D. Cela fonctionne comme imregionalmax() Dans MathWorks Image Processing Toolbox mais vous permet de spécifier un rayon de voisinage local: RADIUS plus grand -> pics plus clairsemés.

Puisque vous vous attendez à des impulsions clairsemées, le nonmaxsupp_scanline() La fonction peut vous convenir.

La findpeaks L'algorithme est assez trivial; Si un élément est plus grand que ses deux voisins, c'est un pic. Écrire une version 2D de ceci devrait être assez simple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top