Seite 1 von 1

Tracking von Objekten

Verfasst: Dienstag 13. November 2012, 18:22
von Sr4l
Ich würde gerne mal ein paar Anregung für ein Problem von euch bekommen. :)

Ich habe eine Bilderserie die ich in Numpy Arrays gesteckt habe. In den Bildern sind Objekte die ich Tracken möchte. Hier ein Beispiel visualisiert mit Matplotlib:

Bild

Die Segmentierung habe ich von scipy.ndimage.measurements.label erledigen lassen und dann noch den Schwerpunkt jedes Objektes bestimmt, der auf dem Plot als kleiner schwarzer Punkt zu sehen ist.

Da sich die Wolken gelegentlich verbinden oder aufspalten, bzw. unterschiedlich viele entstehen, ändert sich die Anzahl der Objekte über die Zeit.

Ich habe nun also am Ende eine List der Form:

Code: Alles auswählen

data = [
    [(1, 1), (2, 3), (3, 5)],
    [(1, 2), (2, 4), (3, 7), (1, 1)],
    [(2, 4), (3, 7)]
]
Mein (schlechter) Ansatz wäre:
* Ich nehme mir einen belibigen Punkt aus data[0]
* Bestimme Differenz data[1] - data[0][0], i im Bereich 0 bis len(data[1])
* Verschiebe data[1] um die ermittelten Differenzen ermittel die Übereinstimmung zu data[0]
* Nehme das beste Ergebniss

Es gibt natürlich viele Möglichkeiten der Opimierung: u.a. könnte man nur Schwerpunkte nehmen die in der Wolke der alten liegen usw. aber gibt es da nicht ein schönere Lösung?

Würdet ihr auch über die Schwerpunkte gehen?

Ideen? Vorschläge?

*edit* Bildlink geändert

Re: Tracking von Objekten

Verfasst: Dienstag 13. November 2012, 18:44
von EyDu
Hallo.

Prinzipiell bietet sich zum Tracken erstmal ein (Extended) Kalman Filter an. Irgendwo in den Codesnippets habe ich, wenn ich mich richtig erinnere, sogar mal einen gepostet. Die Implementierung an sich ist aber nicht das Problem, eher das Finden der korrekten Parameter. Den Filter selbst zu implementieren ist aber eine ganz gute Übung, dann kannst du auch abschätzen, mit welchen Parametern du arbeiten musst.

Was du hier als Tracking bezeichnest ist eher das Teilproblem Matching. Der Schwerpunkt ist erstmal ein guter Ansatz um zu testen. Mittels Kalman Filter bekommst du dann pro Frame eine vorhersage über die neue (vorhergesagte) Position und kannst testen, ob es sich um das selbe Objekt handelt oder nicht. Dazu bekommst du natürlich noch Wahrscheinlichkeiten geschenkt (wenn du die Parameter einigermaßen vernünftig vorher gemessen hast).

Je nach Bewegung und Anzahl der Merkmale kannst du aber auch andere Verfahren verwenden. Im Idealfall testest du alle Kombinationen von Matchings durch und nimmst am Ende das wahrscheinlichste. Das wird natürlich bei bereits sehr wenigen Elementen sehr langsam. Alternativ kannst du auch verschiedene Merkmale in Korrelation setzen, das alles in einen Baum packen und darin Suchen. Zu dem Thema gibt es jede Menge Papers.

Zum Testen, ob es sich um das selbe Objekt in zwei Frames handelt, könntest du auch die Überlappung der beiden Objekte bestimmen. Am besten mittels Vorhersage der neuen Position, dann sollten die Ergebnisse deutlich besser werden. Als weitere Maße bieten sich vielleicht noch Umfang, Fläche, Umkreis, Hauptkomponenten (bzw. Längen der Hauptkomponenten) oder die länge der konvexen Hülle. Welches das beste Maß ist und wie du diese kombinierst, würde ich versuchen zu lernen. Label die Daten einfach (halb-)automatisch per Hand und lasse ein wenig Statistik drüber laufen. Weka ist ein ganz gutes Tool für solche Angelegenheiten, da kannst du verschiedene Verfahren auf deinen Daten testen.

An sich sollte es zu dem Thema auch eine Menge an Papers geben.

Sebastian

Re: Tracking von Objekten

Verfasst: Freitag 16. November 2012, 14:54
von Sr4l
Danke für deine Antwort. Mit dem EKF bin ich denk ich auf einem guten Weg. Ich gebe nochmal Rückmeldung wenn ich da was erreicht habe. Ich benutze nun zusätzlich noch die Größe, nur mit Schwerpunkten bin ich nicht weit gekommen.

Weka werde ich mir anschauen, ohne lesen bin ich allerdings nicht weit gekommen. Das muss ich mir in Ruhe mit der Dokumentation und Tutorials anschauen.

Mfg Lars

Re: Tracking von Objekten

Verfasst: Mittwoch 21. November 2012, 08:59
von Dobi
Mal so aus Neugierde: Ist das Bild, das du oben gepostet hast, ein tatsächlicher Frame, den du so reinbekommst, oder ist der schon von dir selbst zerfiltert? Eventuell hätte man auf dem Originalbild noch andere Möglichkeiten. Achja, OpenCV kennste? http://docs.opencv.org/modules/video/do ... cking.html

Re: Tracking von Objekten

Verfasst: Mittwoch 21. November 2012, 22:47
von Sr4l
Das ist ein von mir verändertes Bild. Das Original sind Temperatur Matrizen einer Gaswolke in Kelvin.

Bild
Oben "unverändertes" Bild über volles Temperaturspektrum
Unten Differenzbild

OpenCV kenne ich, nutze es unter anderem zur Darstellung.

Re: Tracking von Objekten

Verfasst: Donnerstag 22. November 2012, 09:54
von Dobi
Hast du schon ausprobiert, was passiert wenn du da einfach mit den fertigen OpenCV-Tracking-Funktionen (optical flow und so) draufhaust? In den beiliegenden Samples sieht auch einiges zumindest vom Dateiname her brauchbar aus. zb. opencv/samples/cpp/tutorial_code/TrackingMotion