2016-07-04 12 views
6

Edit:Numpy max łączenie splot

Co ja właściwie chciałem zrobić jest znalezienie lokalnych maksimów, co wynika dobry poniżej, a samo rozwiązanie jest również wyjaśnione tutaj:

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




Wygląda na to, że można wykonać linear splot w trybie Numpy.

Czy można wykonać nieliniowy splot maksimum? Użyj poprawki NxM i przejdź przez obraz wejściowy, wyzerowując bieżący piksel, jeśli nie jest to maksimum w pobliżu?

Więc nieliniową max splot działa tak, tu jest mój obraz

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

i biorąc pod uwagę łączenie 2x2 max daje to wyjście

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

masz plaster 2x2, że postępy w ciągu obraz i zeruje wszystko, zachowując jedynie maksymalną wartość.

+0

Możliwy duplikat [maksymalnie okienkowym w numpy] (http://stackoverflow.com/questions/18645013/windowed-maximum -in-numpy) – Lanting

+0

Dodany przykład, @Lanting, do którego odnosisz się, to nie jest splot. – user1506145

+1

Czy nie powinno być wynikiem wyjściowym '(2,2)' zero, ponieważ w tej przesuwającej się poprawce jest większe '6'? – Divakar

Odpowiedz

6

Można użyć Scipy's maximum_filer -

from scipy.ndimage.filters import maximum_filter 

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

run Sample -

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

Idealny! Inteligentna rzecz z maską, inaczej obraz składałby się z płaskowyżów. Twoje rozwiązanie wyodrębnia lokalne maksima, dokładnie to, czego potrzebowałem :) – user1506145