1

Ich möchte einen Ring-Median-Filter implementieren - was es tut, ist im Grunde das mittlere Pixel durch die Medianwerte der Pixel in einem kreisförmigen Ring um es zu ersetzen. Ich kann wie dieseRing-Median-Filter in Python

kernel = np.zeros((2*radius+1, 2*radius+1)) 
y,x = np.ogrid[-radius:radius+1, -radius:radius+1] 
mask = x**2 + y**2 <= radius**2 
kernel[mask] = 1 

Dann eine kreisförmige Maske irgendeinen Radius mache ich scipy generische Filter verwenden kann Median der Werte einschließlich Pixel

import scipy.ndimage.filters as scp_filt 
circular_median = scp_filt.generic_filter(my_image, np.median, footprint=kernel) 

Die obige Maske innerhalb des Kreises ist zu nehmen. Welche Pixel auf dem Umfang liegen sollen, erscheint mir etwas mehrdeutig (man denke an Kreise, die in 3 * 3, 5 * 5, 7 * 7 Kerne eingeschrieben sind). Gibt es eine "Ring" -Funktion, die ich OTS oder etwas verwenden kann?

Warum all das - versuchen, einen Teil dieses Papiers zu verwenden http://pages.swcp.com/~spsvs/resume/PODS_DSS2009_2009-01-15.pdf Ring-Median-Filter, nach Subtraktion von dem ursprünglichen Bild hinterlässt Objekte mit einer Maßstabsgröße von weniger als dem Radius.

Auch nicht sicher, ob ich dies in RGB tun sollte oder nicht. Ich habe nur Medianfilter auf Graustufen-Bilder gesehen

+0

Sie können einfach berechnen die relativen Koordinaten des Rings, und wenden Sie es dann auf Ihr Bild an. Es ist vergleichbar mit der Anwendung eines benutzerdefinierten strukturierenden Elements in der mathematischen Morphologie. – FiReTiTi

+0

Ja, das ist genau meine Frage - was sind die genauen relativen Koordinaten. Sagen wir, wenn 0,0 der Mittelpunkt eines 11 * 11-Kerns ist, was sind die Koordinaten des Kreises. Es ist etwas mehrdeutig, und dafür scheint der Bresenham Algo (siehe meine Antwort unten) gut zu sein. Es gibt eine alte Frage hier http://stackoverflow.com/questions/17454931/how-can-i-apply-a-ring-shaped-median-filter-to-an-image-in-matlab, die eine Gaussian2D verwendet, aber dafür ist die Bedingung "ring = ring> eps & ring <1e-9" manuell und muss für jede Kerngröße geändert werden. – madratman

+0

Der einfachste Weg wäre vor der Anwendung des Median-Filters, die Ringkoordinaten zu berechnen. In Ihrem Fall können Sie mit dem Punkt (0,5) beginnen und dann die Kreis-/Ringform mit einem kleinen Schritt (sagen wir Grad für Grad) nachzeichnen, aber Sie müssen prüfen, ob der neue Punkt nicht bereits in ist Die Liste. – FiReTiTi

Antwort

-1

Verwenden Sie den Bresenham-Algorithmus für Kreise https://www.daniweb.com/programming/software-development/threads/321181/python-bresenham-circle-arc-algorithm

Scipy generische Filter zusammen mit diesem Ring Mediankern ganz in der Praxis langsam ist, zumindest in Python

+0

Die Drahtform ist eine Kette, nicht ein Teil der Ellipse. – FiReTiTi

+0

Ähm, beziehst du dich hier auf die Kettenlinie? Die Idee, den Ringmedianfilter zu subtrahieren, bestand darin, die Elemente kleiner als die Skalierung des Radius zu halten (entsprechend dem verknüpften Papier). Oder meinst du im Kern, die Form des Rings ist nicht korrekt – madratman

+0

Die Ringform wird nicht mit der Kettenlinie übereinstimmen, so dass die Erkennung schlecht sein wird. Es gibt ein Patent von Thales Helicopter (ehemals Eurocopter), das speziell eine Kettenform verwendet, um die Kettenlinie anzupassen. (PS: Ich bin nicht derjenige, der gewählt hat ...) – FiReTiTi