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
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
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
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