Lassen Sie uns ein Bild (Graustufen oder sogar Binärbilder) haben, wie in der folgenden Abbildung auf der linken Seite gezeigt. Ziel ist es, eine Liste von Punkten zu generieren, dh Koordinaten in Form von (x, y) für jede Packung der dunkle Pixel im Bild.
Was sind die richtigen Bildverarbeitungswerkzeuge, um dies zu tun, und wo sind sie verfügbar?
Updates:
1)
Hier finden Sie möglicherweise weitere Details zum Problem. (Beachten Sie die Variation in der Größe der Packungen)
Ich kann vorschlagen, dass Packungen erkannt werden, um die konvexe Rumpfgrenze für jede zu berechnen und dann den repräsentativen Schwerpunkt zu finden (Einzelheiten siehe hier) .
2)
Hier ist das Ergebnis, das durch Anwendung der Distanztransformation (vorgeschlagen von "Libor") erzeugt wurde. Beachten Sie meine Anmerkungen in der Abbildung. Die Methode funktioniert nicht wie versprochen!
3)
Erosion beseitigt kleine Packungen!
from __future__ import division
from scipy import zeros, ndimage as dsp
from pylab import subplot,plot,matshow,show
img = zeros((30,30))
img[10:14,10:14] = 1
img[16:17,16:17] = 1
img[19:23,19] = 1
img[19,19:23] = 1
subplot(221)
matshow(img,0)
subplot(222)
y = dsp.binary_erosion(img,[[1,1],[1,1]])
matshow(y,0)
subplot(223)
y = dsp.binary_erosion(img,[[0,1,0],[1,1,1],[0,1,0]])
matshow(y,0)
subplot(224)
y = dsp.binary_erosion(img,[[1,1,1],[1,1,1],[1,1,1]])
matshow(y,0)
show()
4)
Nun, hier ist eine Python- Implementierung (dh die Sprache der Liebe :)) der Etikettierungsidee (ebenfalls von "Jean-Yves" unten vorgeschlagen):
subplot(221)
l,n = dsp.label(img)
sl = dsp.find_objects(l)
for s in sl:
x = (s[1].start+s[1].stop-1)/2
y = (s[0].start+s[0].stop-1)/2
plot(x,y,'wo')
und das Ergebnis:
Beachten Sie, dass die Hintergrundprozedur in der Funktion eine anstrengende Iteration sein sollte , obwohl sie in Python aufgrund der Scipy-Leistung so schnell ausgeführt label
wird. Dies kann als Kompromiss angesehen werden. Daher bin ich eine Weile bestrebt, nach effizienteren Algorithmen zu suchen. Beachten Sie auch, dass ich im obigen Code das Zentrum der Geometrie so einfach gefunden habe, während dies bei komplexen oder asymmetrischen Formen zu einer Verzerrung der Positionierung führen kann. Das heißt, es ist in Arbeit;).
5)
Hier ist ein komplexer Fall (ein reales Bild), der von hier aus aufgenommen wurde , auf den der Kennzeichnungsvorschlag angewendet wurde, und Sie sehen die Ergebnisse. Beachten Sie, dass der gesamte Vorgang einschließlich des Beschriftens und Findens der Objekte nur 0,015 s dauerte. Scipy Jungs, haben sehr gute Arbeit geleistet, denke ich. Beeindruckend! {Rechtsklick auf Bild, Bild anklicken für volle Auflösung}