Ich habe eine feste Kamera mit bekannten cameraMatrix
und distCoeffs
. Ich habe auch ein Schachbrett, das ebenfalls repariert ist, transform
und ein rotation
Vektor wird ebenfalls mit berechnetsolvePnP
.
Ich frage mich, wie es möglich ist, die 3D-Position eines 2D-Punkts auf derselben Ebene zu ermitteln, auf der sich das Schachbrett befindet, wie im folgenden Bild dargestellt:
Eine Sache ist sicher, dass das Z dieses Punktes 0 ist, aber wie man X und Y dieses Punktes erhält .
opencv
2d-3d-conversion
EBAG
quelle
quelle
Antworten:
Sie können dies mit 3 einfachen Schritten lösen:
Schritt 1:
Berechnen Sie den im Koordinatenrahmen der Kamera ausgedrückten 3D-Richtungsvektor des Strahls, der dem angegebenen 2D-Bildpunkt entspricht, indem Sie das Kameraprojektionsmodell invertieren:
Schritt 2:
Berechnen Sie die 3D-Richtung des Vektors dieses Strahls in dem am Schachbrett angebrachten Koordinatenrahmen unter Verwendung der relativen Pose zwischen Kamera und Schachbrett:
Schritt 3:
Finden Sie den gewünschten 3D-Punkt, indem Sie den Schnittpunkt zwischen dem 3D-Strahl und der Schachbrettebene mit Z = 0 berechnen:
quelle
Da sich Ihr Fall auf die Ebenen beschränkt, besteht die einfache Möglichkeit darin, Homografie zu verwenden.
Verzerren Sie zuerst Ihr Bild. Verwenden Sie dann findHomography , um die Homographiematrix zu berechnen, die Ihre Pixelkoordinate (Bild) in eine echte Koordinate (euklidischer Raum, z. B. in cm) umwandelt. Ähnliches wie dieses:
quelle