Scipy: median filter benötigt zu viel Speicher

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Max21
User
Beiträge: 8
Registriert: Mittwoch 1. Dezember 2010, 11:46

Hi,

ich muss ein großes 2D-Array medianfiltern und verwende dazu die scipy-Funktion scipy.ndimage.filters.median_filter.
Man kann dabei einen "footprint" angeben, d.h. ein bool-Array, das die Nachbarschaft angibt, über welche Werte der Median berechnet wird.

Das Problem ist, dass dieser "footprint" bei mir sehr groß ist (ca. 10 000 Einträge werden in die Medianberechnung einbezogen). Daher wird sehr viel (einige GB) Speicher beansprucht, sodass der Rechner swapt und irgendwann ganz hängt.
Ich habe das Array schon zu numpy.int8 konvertiert, das hat aber kaum geholfen.
Ich könnte mir vorstellen, dass die Funktion den Median nicht vom einen zum nächsten Eintrag der Matrix berechnet, sondern erstmal für jeden Punkt im Array ein Array mit den Werten aus der Nachbarschaft speichert und erst danach berechnet.

Habt ihr eine Idee, wie ich den Median speicherschonender und trotzdem schnell berechnen kann?

Vielen Dank und Grüße,
Max
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mit 1e4 Feldern ist footprint wirklich extrem groß. Geht das wirklich nicht kleiner? Oder geht es vielleicht auch, den Filter mehrere Male mit einem kleineren footprint aufzurufe? (Ok, das ist nicht dasselbe, aber je nach Aufgabestellung, könnte es akzeptabel sein.)

Alternativ hilft wohl nur: Selber Implementieren. Scipys Code ist ja als Muster verfügbar. Das liesse sich sogar parallelisieren (entweder mit multiprocessing oder mit numexpr).

HTH
Christian
Max21
User
Beiträge: 8
Registriert: Mittwoch 1. Dezember 2010, 11:46

Okay, da komme ich wohl nicht drum herum, das Median-Filter selbst zu implementieren.
Das ist ja auch wirklich in einem hohen Maße parallelisierbar!

Ich verwende den Median hier als statistisches Maß für eine Parameterschätzung, nicht für Bildverarbeitung im eigentlichen Sinne und würde den footprint daher gerne erstmal so groß lassen.

Gruß,
Max
Max21
User
Beiträge: 8
Registriert: Mittwoch 1. Dezember 2010, 11:46

Okay, hab jetzt noch ne andere Lösung gefunden.
Weil die Daten stark korreliert sind, konnte ich die Matrix ohne Informationsverluste heruntertasten und damit ist die Größe des Fensters auch um ein vielfaches kleiner. ;)

Grüße,
Max
Antworten