Weltkoordinaten zu (Kamera-)Bildkoordinaten? (mit Bild)



  • Hallo!

    Ich habe einen Punkt im globalen Koordinatensystem:

    point3d=(0.7m0.16m0.23m)point3d = \begin{pmatrix} 0.7m \\ -0.16m \\ 0.23m \end{pmatrix}

    Jetzt habe ich ein Bild aufgenommen und definiert, dass sich die Kamera im Ursprung befindet und der Punkt halt diese Position im Raum hat. Die Position des Punktes habe ich grob ausgemessen, er befindet sich auf der Spitze einer Flasche, die im Bild sichtbar ist. Von oben sieht die Szene also so aus:

    http://www.abload.de/img/koordinatensystemgzjnm.png

    Die Kameraposition ist also:

    camPos=(0.0m0.0m0.08m)camPos= \begin{pmatrix} 0.0m \\ 0.0m \\ 0.08m \end{pmatrix}

    z ist 8 cm, weil die Kamera ein wenig über dem Tisch stand. Die intrinsischen Parameter der Kamera habe ich bestimmt. Die sind auch korrekt, weil ich damit z.B. die Verzeichnungen aus dem Bild rechnen kann (das sieht alles richtig aus). Auflösung ist 640x480.

    Jetzt würde ich gerne im aufgenommenen Bild einzeichnen, wo sich der point3d auf der 2D-Ebene befinden müsste. Hier meine Rechnung:

    Translation:
    trans=(100001000010.8)trans = \begin{pmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & -0.8 \end{pmatrix}

    Rotation:
    rot=(100010001)rot=\begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}

    Intrinische Parameter:
    camMatrix=(48303280484255001)camMatrix= \begin{pmatrix} 483 & 0 & 328 \\ 0 & 484 & 255 \\ 0 & 0 & 1 \end{pmatrix}

    Projektionsmatrix:
    proj=camMatrix(rottrans)proj = camMatrix*(rot*trans)

    proj=(483.00000328.000026.24000484.0000255.000020.4000001.00000.0800)proj =\begin{pmatrix} 483.0000 & 0 & 328.0000& -26.2400 \\ 0 &484.0000 & 255.0000 & -20.4000 \\ 0 & 0 & 1.0000 & -0.0800 \end{pmatrix}

    Punkt 2D homogen:
    point2dh=(projpoint3d)point2dh = (proj * point3d)

    point2dh=(387.300039.19000.1500)point2dh = \begin{pmatrix} 387.3000 \\ -39.1900 \\ 0.1500 \end{pmatrix}

    In Bildschirmkoordinaten:
    Punkt2d=Punkt2d1/wPunkt2d = Punkt2d * 1/w

    point2dh=(2582261.31)point2dh = \begin{pmatrix} 2582 \\ -261.3 \\ 1 \end{pmatrix}

    Und das kommt überhaupt gar nicht hin. Wenn ich mir das Foto anschaue müsste der Punkt bei x = 450pixel und y = 330pixel liegen 😕 😕

    Wo ist mein Denk- oder Rechenfehler? Ich hoffe die Informationen sind ausreichend und ich bedanke mich sehr für das Lesen und Helfen 🙂



  • In der Matrix trans ist ein Tippfehler, dass muss −0.08 heißen. Der Rest der Rechnungen ist aber dennoch "richtig"



  • 3 x 4 macht neun oder was ? 😃



  • ScottZhang schrieb:

    3 x 4 macht neun oder was ? 😃

    Ich versteh die Antwort nicht ganz. Stimmen irgendwo die Dimensionen der Matrizen nicht 😕



  • Ich glaube. Wo issn sonst deine Perspektiveinformation hin, oder machts du orthogonale projetkion? Eigentlich nich oder. Aufjeden Fall müsstes du das falsche ww bekommen.



  • ScottZhang schrieb:

    Ich glaube. Wo issn sonst deine Perspektiveinformation hin, oder machts du orthogonale projetkion? Eigentlich nich oder. Aufjeden Fall müsstes du das falsche ww bekommen.

    Nein, das war nicht das Problem.
    Das Problem war, dass ich die Koordinaten erst noch von Weltkoordinaten in Kamerkoordinaten umrechnen musste (Also Achsen sind vertauscht etc.).
    So ganz habe ich das noch nicht verstanden (muss ich nochmal in Ruhe durchgehen), aber jetzt funktioniert es.

    Habe auch mit mehreren Punkten im Raum gearbeitet und die Kamera auch bewegt und rotiert. Die Ergebnisse sind einfach zu gut (dafür, dass ich nur grob gemessen habe) für "zufällig richtige" Berechnungen.


Anmelden zum Antworten