Oft müssen wir einen Videostream ohne Zugriff auf die Kamera verarbeiten. Der Zugriff auf die Kameramatrix wäre für verschiedene Verarbeitungstechniken von Vorteil. Ist es möglich, die Kamerakalibrierung zu hacken, ohne Zugriff auf die Kamera zu haben?
Ich habe einen Videostream von einer einzelnen Kamera, die auf einem fahrenden Auto montiert ist und die Straße aufzeichnet (daher mehrere parallele Linien auf der Grundebene, Ecken von Fahrspurmarkierungen, aber keine Kreise). Ich möchte eine Ansicht von oben nach unten erstellen, habe jedoch keinen Zugriff auf die Kamera. Ist es möglich? Wenn das so ist, wie?
Ich verstehe aus dem Lernen von OpenCV: Computer Vision mit dem OpenCV Library- Buch, dass ich die folgenden Matrizen benötige:
- Intrinsics und
- Verzerrung
.. zum cv2.undistort()
Bild, Homographie berechnen cv2.getPerspectiveTransform()
und cv2.warpPerspective()
endlich die Draufsicht bekommen.
Frage
- Wie kann ich Intrinsics oder Distortion Matrices / Parameter berechnen / approximieren / erraten? Sind alle Parameter wichtig?
- Wäre es in Ordnung, Parameter von anderen Kameras (wie OpenCV-Quellcodebeispielen) zu kopieren?
Frühere Forschung:
- OpenCV Python Camera Calibration Tutorial - Erfordert Zugriff auf die Kamera
- Automatische Kalibrierung der Kamera - Gibt Hoffnung "Eine Kalibrierung kann erreicht werden, wenn mehrere Sätze paralleler Linien oder Objekte mit einer bekannten Form (z. B. kreisförmig) identifiziert werden."
- Der Versuch, die mit der Kamerakalibrierung verbundenen Antworten [ 1 ] [ 2 ] [ 3 ] auf SO zu verstehen, versucht, Antworten auf mein Problem zu finden.
Irgendwelche Ideen? Schätzen Sie Ihre Hilfe im Voraus!
Update 1: Perspektiventransformationsexperiment
Ich hatte mit versucht getPerspectiveTransform(pts1,pts2)
und dst = cv2.warpPerspective(img,M,(x,y), flags=flags)
vier Punkten von Eingangsbild entspricht , eine Art von Top-Down - Ansicht zu erhalten. Aber ich bin mir nicht sicher, wie ich mit den Verzerrungen umgehen soll:
Auswählen von Punkten: Zuerst habe ich die Eingabe vergrößert und versucht, genau passende Außenpunkte auf den Fahrspurmarkierungen auszuwählen, um die Homografiematrix zu erstellen, und eine Vorschau des perspektivisch transformierten Bildes mit angezeigt warpPerspective
. Ich sah, dass die Fahrspuren verzerrt waren, wusste aber nicht, wie schlimm sie waren. Um eine Vorstellung zu bekommen, habe ich Punkte ausgewählt, die an jedem Ende weiter durch Delta (50px) flach sind. Das bekomme ich:
Kann ich die Verzerrungen beheben, ohne Zugriff auf die Kamera zu haben? Gibt es eine andere Möglichkeit, dies zu beheben?
Nur wenige Eingabebilder zum Spielen:
Update 2: Nicht paralleler (gestreuter) optischer Fluss in der Ansicht von oben nach unten
Liegt das an Verzerrungen oder etwas anderem?: