2016-05-20 6 views
2

Ich habe Fahrzeuge als Blob in OpenCV erkannt. Unten ist die blob.h DateiFahrzeuggeschwindigkeit Schätzung über Blob

class Blob { 
public: 
    // member variables 
    std::vector<cv::Point> currentContour; 
    cv::Rect currentBoundingRect; 
    std::vector<cv::Point> centerPositions; 
    double dblCurrentDiagonalSize; 
    double dblCurrentAspectRatio; 
    bool blnCurrentMatchFoundOrNewBlob; 
    bool blnStillBeingTracked; 
    int intNumOfConsecutiveFramesWithoutAMatch; 
    cv::Point predictedNextPosition; 
    // function prototypes 
    Blob(std::vector<cv::Point> _contour); 
    void predictNextPosition(void); 
}; 

Welchen Algorithmus soll ich verwenden, um die Geschwindigkeit des erkannten Fahrzeugs zu schätzen ??

Vielen Dank im Voraus.

UPDATE

Hier ist der Code habe ich versucht, die Geschwindigkeit zu schätzen, aber es den Text nicht gesetzt und es stürzt ab.

for (auto blob : blobs) { 

    if (blob.blnStillBeingTracked == true && blob.centerPositions.size() >= 2) { 
     int prevFrameIndex = (int)blob.centerPositions.size() - 2; 
     int currFrameIndex = (int)blob.centerPositions.size() - 1; 
     if (blob.centerPositions[prevFrameIndex].y > (intHorizontalLinePosition-50) && blob.centerPositions[currFrameIndex].y <= intHorizontalLinePosition) { 
      int distance = blob.centerPositions[currFrameIndex].y - blob.centerPositions[0].y; 
      int tickCount = cv::getTickCount(); 
      int time = (tickCount - blob.firstTickCount)/cv::getTickFrequency(); 
      int speed = distance/time; 
      double dblFontScale = blobs[currFrameIndex].dblCurrentDiagonalSize/10.0; 
      int intFontThickness = (int)std::round(dblFontScale * 1.0); 
      std::cout<<"Speed: "<<speed<<std::endl; 
      cv::putText(img, std::to_string(speed), blobs[currFrameIndex].centerPositions.back(), CV_FONT_HERSHEY_SIMPLEX, dblFontScale, SCALAR_GREEN, intFontThickness); 
     } 

    } 
} 
+0

siehe [Specifiyng Geschwindigkeit von visueller Größe] (http://stackoverflow.com/a/24245776/2521214) und [Auswahlkriterien für die verschiedenen Projektionen] (http://stackoverflow.com/a/ 32795205/2521214) – Spektre

Antwort

3

Um die Geschwindigkeit des Fahrzeugs in einem 3-dimensionalen Raum aus einem 2D-Bild im allgemeinen Fall vorherzusagen, müssen Sie die Ausrichtung des Fahrzeugs (Fahrtrichtung) und Abstand von der Kamera kennen.

Wenn Sie zum Beispiel wissen, dass das Fahrzeug senkrecht zur Richtung fährt die Kamera Punkte (direkt über den Rahmen bewegt, nicht in Richtung oder gar von der Kamera entfernt), können Sie entweder

a) bekannte Entfernung von der Kamera zur Straße und grundlegende Trigonometrie, oder b) Marker bekannter Entfernung

, um die Geschwindigkeit des Fahrzeugs mit mehreren Frames zu berechnen.

Wenn Sie das Fahrzeug wissen, direkt auf oder direkt von der Kamera weg reisen, können Sie die Änderung in der Breite/Höhe des Bild Umrisses verwenden, um ein Gefühl für die Geschwindigkeit des Fahrzeugs zu erhalten. Wenn Sie auch identifizieren können, wenn das Fahrzeug einen Orientierungspunkt in einem bekannten Abstand von der Kamera passiert, kann die tatsächliche Breite/Höhe des Fahrzeugs berechnen und damit die Geschwindigkeit genau berechnet wird unter Verwendung dieser bekannte Breite/Höhe und die Änderungsrate der Größe die 2D-Projektion des Fahrzeugs.

aktualisieren

die zusätzlichen Informationen gegeben, wie es scheint, was Y-Position in der entspricht 2D-Bild der Kamera auf einen bestimmten Abstand auf der Straße bestimmen kann. Wenn Sie zwei solche Punkte messen, können Sie zählen, wie lange es dauert, bis die unteren Grenzen von currentBoundingRect vom ersten Punkt zum zweiten Punkt passen, z. im folgenden Diagramm von y = 800 zu y = 200 wechseln.

Wenn es 2 Sekunden dauert, um von y = 800 zu y = 200 zu gelangen, dauert es auch 2 Sekunden, um 100m - 50m = 50m oder 50m/2 Sekunden = 25m/Sekunde zu bewegen.

View from security camera

+0

Das Fahrzeug fährt direkt in Richtung der Kamera. können Sie mir einen Ausschnitt geben, wie Sie die Geschwindigkeit anhand der obigen Blobdefinition berechnen können. Danke vielmals. –

+0

Wissen Sie, wie weit das Fahrzeug zu einem bestimmten Zeitpunkt von der Kamera entfernt ist? –

+0

Ich kenne die Entfernung von der Kamera zur Straße. –