2016-07-04 13 views
6

Edit:Numpy max Pooling Faltung

Was wollte ich eigentlich lokale Maxima zu tun ist, zu finden, was gut weiter unten erläutert wird, und die gleiche Lösung wird erklärt auch hier:

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




Es scheint, Sie können linear Convolution in Numpy tun.

Kann eine nichtlineare Max-Pooling-Faltung ausgeführt werden? Verwenden Sie ein NxM-Patch und streichen Sie über das Eingabebild, um das aktuelle Pixel auf Null zu setzen, wenn es nicht das Maximum in der Nähe ist?

So eine nichtlineare max Faltung funktioniert so, hier ist mein Bild

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

Und ein Pooling 2x2 max gegeben, erhält das Ausgangs

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

Sie einen 2x2-Patch, der über schreitet das Bild, und Nullen alles, nur den Maximalwert zu halten.

+0

Mögliche Duplikat [Windowed maximal in numpy] (http://stackoverflow.com/questions/18645013/windowed-maximum -in-numpy) – Lanting

+0

Beispiel hinzugefügt, @Die Frage, auf die Sie sich beziehen, ist keine Faltung. – user1506145

+1

Sollte nicht der Ausgang '(2,2)' stattdessen null sein, da es in diesem gleitenden Patch eine größere '6' gibt? – Divakar

Antwort

6

könnten Sie verwenden Scipy's maximum_filer -

from scipy.ndimage.filters import maximum_filter 

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

Probelauf -

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

Perfekt! Schlaues Ding mit der Maske, sonst würde das Bild aus Plateaus bestehen. Ihre Lösung extrahiert die lokalen Maxima, genau das, was ich brauchte :) – user1506145