Transformationsmatrix Berechnen
-
Ich habe 4 eckpunkte eines Vierecks (kann Quadratisch, Rechteckig, Trapezförmig, Rautenförmig sein),
nennen wir sie P1, P2, P3, P4P1 ist Oben Links
P2 ist Oben Rechts
P3 ist Unten Rechts
P4 ist Unten Links
Nun möchte ich das ganze mittels einer Transformationsmatrix da draus ein Rechteck machen (ist egal ob einer bestimmten größe oder größe bleibt beim Orginal, soll hinterher eh herunterscalliert werden), kennt jemand dafür Seiten die das Berechnen der Tranformationsmatrix erklären.
Das Berechnen der Winkel zwischen den Ecken ist kein Problem, jedoch stocher ich momentan nur im Sand herum und habe keine Idee wie ich das Problem angehen soll.
Danke im Vorraus
-
mynonA schrieb:
Ich habe 4 eckpunkte eines Vierecks (kann Quadratisch, Rechteckig, Trapezförmig, Rautenförmig sein),
nennen wir sie P1, P2, P3, P4P1 ist Oben Links
P2 ist Oben Rechts
P3 ist Unten Rechts
P4 ist Unten Links
Nun möchte ich das ganze mittels einer Transformationsmatrix da draus ein Rechteck machen (ist egal ob einer bestimmten größe oder größe bleibt beim Orginal, soll hinterher eh herunterscalliert werden), kennt jemand dafür Seiten die das Berechnen der Tranformationsmatrix erklären.
Das Berechnen der Winkel zwischen den Ecken ist kein Problem, jedoch stocher ich momentan nur im Sand herum und habe keine Idee wie ich das Problem angehen soll.
Danke im v******
Trapezförmig wird mit einer Matrix nicht funktionieren, nur Parallelogramme mit spezialfällen davon.
-
und wie würde das bei bei Parallelogrammen ausschauen?
-
mynonA schrieb:
und wie würde das bei bei Parallelogrammen ausschauen?
die vektoren der zwei seiten des parallelogramms (z.B. P3-P4, P1-P4) als spaltenvektoren nebeneinander schreiben. dann fehlt noch die translation, die bekommst du mit zweidimensionalen vektoren auch nicht hin
-
Natürlich geht das, das Viereck muss aber Konvex sein!
Kann mathematisch nicht sagen wie, aber habe einen C++ Code.
Frank
-
DerAltenburger schrieb:
Natürlich geht das, das Viereck muss aber Konvex sein!
Kann mathematisch nicht sagen wie, aber habe einen C++ Code.
Frank
Sicher, dass dies durch eine lineare Abbildung (=Transformationsmatrix) geschieht? Das kann nämlich nicht sein, weil die abbildung z.B. bei einem Trapez mit zwei unterschiedlich langen parallelen Seiten die Linearität verletzen würde.
Die nötige Transformation ist für den allgemeinen Fall (meinetwegen auch eingeschränkt auf konvexe Vierecke) auf jeden Fall nichtlinear.
-
SeppJ schrieb:
Die nötige Transformation ist für den allgemeinen Fall (meinetwegen auch eingeschränkt auf konvexe Vierecke) auf jeden Fall nichtlinear.
Und wie kann man dann an dieses Problem herangehen?
-
SeppJ schrieb:
DerAltenburger schrieb:
Natürlich geht das, das Viereck muss aber Konvex sein!
Kann mathematisch nicht sagen wie, aber habe einen C++ Code.
Frank
Sicher, dass dies durch eine lineare Abbildung (=Transformationsmatrix) geschieht? Das kann nämlich nicht sein, weil die abbildung z.B. bei einem Trapez mit zwei unterschiedlich langen parallelen Seiten die Linearität verletzen würde.
Die nötige Transformation ist für den allgemeinen Fall (meinetwegen auch eingeschränkt auf konvexe Vierecke) auf jeden Fall nichtlinear.
Nun ja, richtig linear sicher nicht, soll ja auch nicht.
Das macht eine "Perspektiv- Transformation" eines konvexen Viereckkes in ein (achsparalleles) Rechteck.
- für Perpektiv- Korrektur
- für Textur- Übertragung in ein ViereckBei mir klappt der Algo.
Gruss
frank
-
mynonA schrieb:
Und wie kann man dann an dieses Problem herangehen?
In Homogene Koordinaten transformieren. Im Projektionsraum gehen auch Trapeze. Sei allerdings gewarnt, dass die Zuordnung rechteck->Trapez nicht eindeutig ist. Da musst du dir dann was einfallen lassen.
-
mynonA schrieb:
...
Arbeite mit einer ebenen Affintransformation, dann sollte es klappen.
falls was unklar ist, pn.