Pergunta

Qual é o melhor método para encontrar picos de impulso (delta Dirac) em uma matriz 2D.

Mais especificamente, gostaria de encontrar as frequências harmônicas de uma determinada imagem e, portanto, preciso encontrar picos de impulso na imagem DFT de valor absoluto.

Pensei em usar o findpeaks, mas não há versão 2D. Também vi posts anteriores sobre encontrar picos comuns usando imdilate e/ou imextendedmax, mas aqueles encontram todos os picos em uma matriz 2D, enquanto estou interessado apenas em picos de impulso. Tenho certeza de que as pessoas do DSP têm uma receita comum para isso ...

Por favor ajude,

Obrigado

Foi útil?

Solução

O que você quer fazer é encontrar picos com alto contraste. Assim, você precisa de uma maneira de identificar os máximos locais, além de uma maneira de medir a diferença entre o pico e os valores circundantes. O limiar sobre essa diferença identificará os picos de impulso para você.

Supondo que seu sinal de entrada seja chamado 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 é uma matriz lógica com 1 onde quer que haja um bom pico. Você pode usá -lo para ler alturas de pico a partir de sinal com signal(peaks), e encontrar coordenadas usando find(peaks).

Outras dicas

Este artigo eu escrevi Contém o código -fonte MATLAB para detecção de pico local rápida em 2D. Funciona semelhante a imregionalmax() Na caixa de ferramentas de processamento de imagem Mathworks, mas permite especificar um raio local do bairro: raio maior -> picos de escassos.

Como você espera impulsos esparsos, o nonmaxsupp_scanline() A função pode ser adequada para você.

o findpeaks O algoritmo é bastante trivial; Se um elemento é maior que ambos os vizinhos, é um pico. Escrever uma versão 2D disso deve ser bem simples.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top