Blob-Tracking-Algorithmus

8

Ich versuche, einfaches Blob-Tracking mit OpenCV zu erstellen. Ich habe die Blobs mit findcontours erkannt. Ich möchte diesen Blobs eine konstante ID geben.

Ich habe eine Liste von Blobs im vorherigen Frame und im aktuellen Frame gesammelt. Dann nahm ich den Abstand zwischen jedem Blob im vorherigen Frame und dem aktuellen Frame. Ich würde gerne wissen, was sonst noch benötigt wird, um die Blobs zu verfolgen und ihnen eine ID zu geben. Ich habe nur den Abstand zwischen vorherigen und aktuellen Frame-Blobs genommen, aber wie kann ich den Blobs eine konsistente ID zuweisen, indem ich den gemessenen Abstand zwischen den Blobs verwende?

    
Moaz ELdeen 08.09.2012, 12:32
quelle

3 Antworten

6

Im ersten Rahmen können Sie id eine beliebige Weise zuweisen, 1 für die erste, die Sie finden, 2 für die zweite ... oder geben Sie ihnen einfach ID entsprechend ihrer Position in der Sammlung.

Dann müssen Sie im nächsten Frame die beste Übereinstimmung verwenden. Finden Sie die Blobs, berechnen Sie alle Abstände zwischen den aktuellen Blobs und allen Blobs des vorherigen Bildes und weisen Sie jede vorherige ID dem nächsten Blob zu. Blobs, die das Feld gerade betreten, erhalten neue IDs.

Jetzt hast du zwei Frames, du kannst eine Bewegungsvorhersage für den nächsten machen. Berechne einfach deltaX und deltaY zwischen der vorherigen und der aktuellen Position des Blobs. Sie können diese Informationen verwenden, um die zukünftige Position zu erraten. Match gegen diese zukünftige Position.

Dies sollte funktionieren, wenn Sie nicht zu viele überlappende Blobs haben und wenn die Bewegung zwischen den einzelnen Frames nicht zu schnell und unregelmäßig ist.

Es ist möglich, mit einem Scoring-System durch mehrere Bilder genauer zu sein:
Holen Sie sich Positionen für die ersten 3 oder 5 Bilder. Suchen Sie für jeden Blob von Bild 1 den nächsten auf Bild 2, berechnen Sie die Geschwindigkeit (deltaX deltaY), suchen Sie die am nächsten zur vorhergesagten Position für Bild 3, 4, 5 ... Summieren Sie alle Abstände zwischen der vorhergesagten Position und dem nächsten Blob sei der Punktestand. Tun Sie dasselbe mit der 2. am nächsten bei Bild 2 (es wird in eine andere Richtung suchen). Je niedriger die Punktzahl, desto wahrscheinlicher ist es der gute Blob.

Wenn Sie viele Blobs haben, sollten Sie einen Quadtree verwenden, um den Prozess zu beschleunigen. Vergleichen Sie die Quadratdistanz; es wird viele sqrt Berechnungen vermeiden.

Es ist wichtig zu wissen, wie sich dein Blob tipischerweise bewegt, um deinen Algotrithmus zu stimmen.

    
bokan 08.09.2012, 12:44
quelle
3

Hier ist ein OpenCV-Codebeispiel von Blob-Tracking:

%Vor%     
Software_Designer 08.09.2012 13:09
quelle
1

Sie können die Bibliothek cvblobslib für die Erkennung von Blobs verwenden ...

  1. Wenn Ihre Inter-Blob-Bewegung kleiner ist als die Inter-Blob-Distanz..das heißt, dass die Blob-Verschiebung geringer ist als die Inter Blob-Distanz, können Sie eine Liste erstellen und den Blob in jedem aktuellen Frame, der in die Nachbarschaft fällt, hinzufügen der Blobs im vorherigen Frame ...
  2. Wenn Ihre Blobs einige konstante Eigenschaften wie Elliptizität haben ... Seitenverhältnis (nachdem Sie eine Bounding Box darauf angepasst haben), können Sie die Blobs mit diesen Features in einer Liste zusammenfassen ..
rotating_image 08.09.2012 13:37
quelle