2016-07-04 15 views
6

Edit:Numpy max pool circonvoluzione

Quello che in realtà volevo fare è trovare massimi locali, che è spiegato bene al di sotto, e la stessa soluzione si spiega anche qui:

http://scikit-image.org/docs/dev/auto_examples/plot_peak_local_max.html




sembra che si può fare linear convoluzione in Numpy.

È possibile eseguire una convoluzione di raggruppamento massimo non lineare? Utilizzare una patch NxM e scorrere l'immagine in ingresso, azzerando il pixel corrente se non è il massimo nelle vicinanze?

Quindi una convoluzione max non lineare funziona così, ecco la mia immagine

3 4 5 2 3 
    3 5 1 2 7 
    2 2 5 1 7 

e dato una 2x2 max pooling dà questa uscita

0 0 5 0 0 
    0 5 0 0 7 
    0 0 5 0 7 

avete una patch 2x2 che a grandi passi su l'immagine e azzera tutto, mantenendo solo il valore massimo.

+0

Eventuali duplicati di [massima finestrato in NumPy] (http://stackoverflow.com/questions/18645013/windowed-maximum -in-numpy) – Lanting

+0

Aggiunto l'esempio, @Lanting la domanda a cui si fa riferimento non è una convoluzione – user1506145

+1

Non dovrebbe invece l'uscita '(2,2)' essere zero, poiché c'è un più grande '6' in quella patch scorrevole? – Divakar

risposta

6

Si potrebbe utilizzare Scipy's maximum_filer -

from scipy.ndimage.filters import maximum_filter 

arr*(arr == maximum_filter(arr,footprint=np.ones((3,3)))) 

Campione run -

In [19]: arr 
Out[19]: 
array([[3, 4, 5, 2, 3], 
     [3, 5, 1, 2, 7], 
     [2, 2, 5, 6, 7]]) 

In [20]: arr*(arr == maximum_filter(arr,footprint=np.ones((3,3)))) 
Out[20]: 
array([[0, 0, 5, 0, 0], 
     [0, 5, 0, 0, 7], 
     [0, 0, 0, 0, 7]]) 
+0

Perfetto! Cosa intelligente con la maschera, altrimenti l'immagine sarebbe costituita da altipiani. La tua soluzione estrae i massimi locali, esattamente ciò di cui avevo bisogno :) – user1506145