Pregunta

¿Cuál es el mejor método para encontrar picos de impulso (Dirac Delta) en una matriz 2D?

Más específicamente, me gustaría encontrar las frecuencias armónicas de una imagen dada y, por lo tanto, necesito encontrar picos de impulso en el valor absoluto de la imagen DFT.

Pensé en usar FindPeaks pero no hay una versión 2D. También vi publicaciones anteriores sobre encontrar picos ordinarios usando Imdilate y/o Imextendedmax, pero aquellos encuentran todos los picos en una matriz 2D, mientras que solo estoy interesado en los picos de impulso. Estoy seguro de que las personas DSP tienen una receta común para esto ...

Por favor ayuda,

Gracias

¿Fue útil?

Solución

Lo que quieres hacer es encontrar picos con alto contraste. Por lo tanto, necesita una forma de identificar máximos locales, más una forma de medir la diferencia entre el pico y los valores circundantes. El umbral en esta diferencia identificará los picos de impulso para usted.

Suponiendo que se llama a su señal de entrada 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 es una matriz lógica con 1 donde sea que haya un buen pico. Puede usarlo para leer alturas máximas de la señal con signal(peaks), y para encontrar coordenadas usando find(peaks).

Otros consejos

Este artículo que escribí Contiene el código fuente de MATLAB para la detección máxima local rápida en 2D. Funciona de manera similar a imregionalmax() En la caja de herramientas de procesamiento de imágenes de MathWorks, pero le permite especificar un radio local del vecindario: radio más grande -> picos más dispersos.

Ya que esperas impulsos escasos, el nonmaxsupp_scanline() La función puede ser adecuada para usted.

los findpeaks El algoritmo es bastante trivial; Si un elemento es más grande que sus vecinos, entonces es un pico. Escribir una versión 2D de esto debería ser bastante simple.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top