Transformationsmatrix gesucht



  • Bashar schrieb:

    Mit so einer Transformationsmatrix kannst du nur affine Abbildungen darstellen, also Kombinationen aus: Verschiebung, Drehung, Stauchung/Streckung/Spiegelung.

    Also bleibt ein Parallelogramm immer ein Parallelogramm. Ja, dann klappt das Vorhaben nicht.



  • Hm, ich weiss jetzt aber immer noch nicht, wie ich eine solche Matrix berechnen kann. Hier ist mal mein Ansatz:

    Ich habe folgende bekannte Punkte:

    Punkt A (a1,a2,0,0)
    Punkt B (b1,b2,0,0)
    Punkt C (c1,c2,0,0)
    Punkt D (d1,d2,0,0)

    Punkt A' (a1',a2',0,0)
    Punkt B' (b1',b2',0,0)
    Punkt C' (c1',c2',0,0)
    Punkt D' (d1',d2',0,0)

    Und die Matrix M:

    m11,m12,m13,m14
    m21,m22,m23,m24
    m31,m32,m33,m34
    m41,m42,m43,m44

    Damit die Matrix die Anforderunen erfüllt, muss ja folgendes gelten:

    a1*m11 + a2*m21 = a1'
    a1*m12 + a2*m22 = a2'

    b1*m11 + b2*m21 = b1'
    b1*m12 + b2*m22 = b2'

    c1*m11 + c2*m21 = c1'
    c1*m12 + c2*m22 = c2'

    d1*m11 + d2*m21 = d1'
    d1*m12 + d2*m22 = d2'

    Aber jetzt hätte ich ja ein Gleichungssystem mit 8 Gleichungen und 4 Unbekannten. Ich nehme an, dass der Ansatz so irgendwie falsch ist.

    MfG, Jochen



  • Wie schon gesagt wurde: Was du vorhast geht mit einer Matrix einfach nicht. Ich vermute mal dass es dir immer noch um das Problem von hier geht!?
    Eine Lösung wären vielleicht Baryzentrische Koordinaten, allerdings ist das mit allgemeineren Polygonen als Dreiecken auch wenn man sich nur auf konvexe beschränkt schon nicht gerade trivial. Vielleicht kannst du dein Ziel auch erreichen indem du dein Viereck in zwei Dreiecke teilst und dann einfach die Baryzentrischen Koordinaten deines Punktes ausrechnest!?



  • Ja genau, es geht mir immer noch um das Problem aus diesem Thread. Allerdings hatte ich dort leider keine Antworten bekommen.

    Das Problem mit den zwei Dreiecken ist ja, dass die Textur dann nicht mehr gleichmäßig über das Viereck gestreckt wird.

    Bei der Grafik http://b.imagehost.org/download/0235/Grafik habe ich etwa 200 Dreiecke verwendet.

    Gibt es denn keine einfachere Möglichkeit zur Berechnung der Texturkoordinaten des Punktes P (siehe Grafik) als Baryzentrische Koordinaten?



  • Jochen S. schrieb:

    ..
    Das Problem mit den zwei Dreiecken ist ja, dass die Textur dann nicht mehr gleichmäßig über das Viereck gestreckt wird.
    ..

    Wieso das denn nicht? Ob ich ein Viereck wähle oder zwei Dreiecke macht doch keinen Unterschied. Du bauchst nichtmal neue Texturkoordinaten berechnen.



  • inter2k3 schrieb:

    Wieso das denn nicht? Ob ich ein Viereck wähle oder zwei Dreiecke macht doch keinen Unterschied. Du bauchst nichtmal neue Texturkoordinaten berechnen.

    Mit nur 2 Dreiecken würde die Textur nicht gleichmäßig gestreckt. Stell dir dazu mal ein Quadrat aus zwei Dreiecken vor, über das gleichmäßig eine quadratische Textur gelegt wird. Wenn du jetzt einen der Punkte verschiebst, diese Verschiebung allerdings nur ein Dreieck betrifft, wird die Textur auf dem einen Dreieck nach wie vor verzerrungsfrei abgebildet und auf dem anderem Dreieck gestreckt. Es entsteht also ein "Bruch" in der Textur.



  • Jochen S. schrieb:

    Gibt es denn keine einfachere Möglichkeit zur Berechnung der Texturkoordinaten des Punktes P (siehe Grafik) als Baryzentrische Koordinaten?

    Nein, wie gesagt ist das für Dreiecke zwar einfach aber für alles andere eben leider nichtmehr. Mehr dazu hier und hier...



  • Hm, dann bleibt mir ja gar nichts anderes übrig, es auf diesen Weg zu versuchen.

    Danke auf jeden Fall für eure Antworten 👍



  • spontaner Ansatz: wenn du die Geraden deines neuen Rechtecks verlängerst, muss es Schnitpunkte der ehemaligen Paralellen Geraden geben. Dann bilden die Schnittpunkte mit den Geraden jeweils ein Dreieck und die Schnittfläche der Dreiecke dein transformiertes Quadrat.

    Damit, und mit baryzentrischen Koordinaten, lässt sich sicher so eine Transformation berechnen.



  • 😕
    Irgendwie bin ich gerade versucht, deine Signatur zu zitieren...
    Wäre nett, wenn du das ein bisschen genauer beschreiben könntest, ich verstehe gerade nicht so genau, was du meinst. Wenn ich die Vierecksseiten verlängere, muss es nicht unbedingt Schnittpunkte geben, das Viereck könnte theoretisch auch ein Parallelogramm sein.

    MfG, Jochen



  • Hmm im Raum der Projektiven Transformationen hat man immer einen Schnittpunkt...ich müsste mal Aus-X-en ob der bereits ausreicht...morgen ;).

    Und wenns keinen Schnittpunkt gibt, dann ist dein Problem eh wunderbar einfach, dann ist dein Objekt nämlich ein beliebig rotiertes Rechteck, und da weißt du ja, wie das geht.



  • So, heute ist ein neuer Tag :).

    Ich kam zu folgendem Schluss: im Projektionsraum geht das sogar als Matrixmultiplikation, meine Fachliteratur hat mich darin bestätigt.
    Befinden wir uns in 2D und sind 2 Schnittpunkte verfügbar (wobei als Schnittpunkt auch ein unendlicher Punkt funktioniert) so kann man zwischen ihnen eine Linie im Projektionsraum berechnen. ich nenne sie mal L=(L1,L2,L3)

    dann sieht die Rektifizierungsmatrix so aus:

    H=[100010L_1L_2L3]H=\begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0 \\ L\_1 & L\_2 &L_3 \end{bmatrix}

    Also ist A=H*A'. inverse bilden: H^-1*A=A'. Fertig.

    Da kein 3D gefordert war, überlasse ich die Verallgemeinerung dem geneigten Leser 😃

    Quelle:
    Hartley& Zisserman: Multiple View Geometry



  • Hm, das Problem beschränkt sich ja auf 2D. Vielen Dank nochmal für die Antworten,
    wenn es noch Probleme geben sollte, kann ich das ja hier reinschreiben. Ich werde mich jetzt wohl erst mal näher mit den Themen beschäftigen.

    MfG, Jochen


Anmelden zum Antworten