Ist es möglich, von 2D- in 3D-Form zu konvertieren?


8

Ich habe Autopositionen in verschiedenen Frames aus dem Video aufgenommen . Angenommen, der Schwerpunkt des Autos (egleftes Seitenauto, das in den Bildern auf uns zukommt ) im Video-Frame1 ist P (x1, y1) und Q (x2, y2) im Video-Frame4.

Ist es möglich, P- und Q-Punkte in 3D darzustellen? damit ich den korrekten Pixelabstand d (PQ) berechnen und schließlich den tatsächlichen Abstand berechnen kann

Hinweis: Sie können davon ausgehen, dass die Kamera stationär ist und sich in einer Höhe von 10 m über dem Boden befindet. Sie können auch geeignete Daten annehmen, wenn Sie möchten. Sie Auto fährt auf der Straße können auch auf die nächste Abbildung verweisen.

Seitenansicht und Vorderansicht


1
50% Ihrer Fragen fett zu markieren, hilft wirklich nicht.
Jojek

1
@jojek Sir Ich habe eine Figur als Referenz hinzugefügt
Sagar

Antworten:


4

[BEARBEITET] So wird's gemacht.

Schritte: 1. Isolieren Sie das Straßenteilerteil.

Beschnittenes BildIsolieren Sie die gelben Streifen

Ermitteln Sie dann mithilfe von Houghlines die längsten Zeilen im Bild. Finden Sie die Extrempunkte heraus, die die Bildgrenze überschreiten. Sie haben die vierseitigen Punkte. Ich habe diesen Teil übersprungen, indem ich sie manuell ausgewählt habe. In meinem Fall beträgt die Straßenbreite oben im Bild 10 und unten 60.

Das zu transformierende Viereck

Für das Ziel müssen wir nun ein Bild erstellen, damit das Teilerviereck eine einheitliche Breite von 60 hat. Daher speichern wir in einem anderen Array neue Punkte, die dieselben unteren Punkte haben. Die oberen Punkte werden jedoch geändert, da sie ein Rechteck mit der gleichen Höhe wie das Bild bilden (oder größer, Sie können anpassen, wie es Ihnen passt, nachdem Sie es einmal ausgeführt und die Ergebnisse gesehen haben), aber Breite 60. Denken Sie daran, wir transformieren unser Bild so, dass der Teiler in diesen rechteckigen Bereich passt. Das Bild ändert sich automatisch.

Jetzt mit Mat TransformMat = getPerspectiveTransform(ipPts, opPts);

von opencv auf Anfangs- und Zielviereckspunkten erhalten wir eine Transformationsmatrix, die wir auf unser Testbild anwenden.

warpPerspective(ipImg, opImg, TransformMat, ipImg.size());

Transformiertes Bild

Sie werden sehen, dass viel Fläche zugeschnitten ist, um der Ausgabe in InputImage Size zu entsprechen. Sie werden jedoch feststellen, dass das Bild wie erwartet transformiert wird, um einen parallelen Teiler zu erhalten. Wenn Sie einige Übersetzungen und Dinge ausführen und ein größeres Ausgabebild aufnehmen, erhalten Sie dies. Wir können niemals ein perfekt verpacktes Ausgabebild erhalten, da seine Größe sehr groß sein kann. Aber wir werden eine Einschränkung erreichen, die unsere Aufgabe erfüllen wird. Hier ist das letzte Bild:

Endgültiges transformiertes Bild


1
@ Ein Matlabber Sir in Matlab gibt es eine Funktion zum Konvertieren von 2D- in 3D-Projektion. ??
Sagar

Ihr Problem ist kein 2D-3D-Projektionsproblem. Es ist ein Problem der homografischen Transformation und der perspektivischen Zuordnung und der weiteren Verarbeitung, die Ihnen bei der Berechnung der Entfernung hilft (was Sie mit einem 3D-Bild erreichen möchten). Vielleicht hilft Ihnen diese Diskussion dabei.
Shreelock

1
@ A Matlabber Sir, es wird immer schwieriger, homografische Transformation und Perspective Mapping zu verstehen. Ich habe auf Google gesucht, aber keine Ahnung davon bekommen.
Sagar

Sie können nach mehreren Beispielen für homografische Transformation und Perspektivzuordnung suchen. Dies ist ein Einführungsthema, das in vielen Online-Kursen zu Computer Vision vermittelt wird. Ich bin gerade ziemlich beschäftigt, sonst hätte ich dir ein paar Erfrischungen darüber gegeben. Versuchen Sie, nach Kursen zu Bildverarbeitung / Computer Vision zu suchen. Sie haben selten Demonstrations- / Programmierübungen zu solchen Problemen.
Shreelock

@ A Matlabber ok, ich werde tun, was du sagst. Danke.
Sagar

3

Dies sieht aus wie eine Art Raytracing- Problem. Wenn Sie die Position und Ausrichtung Ihrer Kamera kennen, sollten Sie in der Lage sein, die 3x4-Projektionsmatrix und ihre Umkehrung zu berechnen .

Dies sollte es Ihnen ermöglichen, von Bildpunkten in 3D-Position (auf der Straße) zu konvertieren. Diese Diskussion http://opencv-users.1802565.n2.nabble.com/2D-to-3D-projection-with-given-plane-td7272428.html enthält möglicherweise weitere nützliche Informationen.

Wie für die Anwendung in Matlab. Es gibt eine affine3d, mit der Sie die Transformation speichern können. Es kann auch nützliche Dinge für Projektionen / Raytracing im Dateiaustausch geben, wie z. B. http://www.mathworks.com/matlabcentral/fileexchange/25974-raytracer, aber ich habe nicht im Detail gesucht, um herauszufinden, was für was relevant ist Sie wollen.


Sir, es wird schwierig, die homografische Transformation und Perspective Mapping zu verstehen. Ich habe auf Google gesucht und auch Links angegeben, aber keine Ahnung davon bekommen.
Sagar

1
@sagar Suchen Sie nach "Multiple View Geometry in Computer Vision" von Hartley & Zisserman. Dies ist DAS Buch, das die Homographie auf natürliche Weise erklärt (unter Verwendung homogener Koordinaten, bei denen die Transformation linear ist).
Libor

1

Wenn Sie Ihre Kamera kalibrieren und einige Referenzpunkte auf der Straßenoberfläche erkennen können, können Sie 3D-Koordinaten der Bildpunkte auf der Straße abrufen. Dies setzt voraus, dass sich die Straße in einem Flugzeug befindet. Mit anderen Worten, wenn Sie ein Auto erkennen können, können Sie die 3D-Koordinaten der Unterseite des Autos berechnen. Sehen Sie sich dieses Beispiel in MATLAB mit der Computer Vision System Toolbox an.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.