Hallo zusammen, ich bin auf der Suche nach einem Algorithmus und weis nicht nach welchem Begriff ich suchen soll. Letztendlich möchte ich eine Fläche, welche durch die 4 Eckpunkte definiert ist, auf eine andere Fläche, welche auch durch die 4 Eckpunkte definiert ist, abbilden. Ich habe solch ein ähnliches Verfahren schon einmal in der Bildverarbeitung zum Entzerren von Bildern gesehen. Dort konnte man 4 Punkte auf einem Bild markieren und konnte anschließend 4 neue Koordinaten bestimmen, sodass das man die Perspektive des Bildes ändern konnte. Nach was kann ich suchen? Danke! Georg
Georg schrieb: > Nach was kann ich suchen? Algorithmus selber bauen? Erst entzerrst Du horizontal, in einem 2. Durchgang vertikal.
Hallo, ich denke das Stichwort sind affine Transformationen. Beispielsweise in OpenCV --> Morphing http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.html Gruß BT
Hallo Georg, es handelt sich dabei um eine Koordinatentransformation des Bildes. In deinem Fall die Projektion auf eine (geneigte) ebene Fläche.
Das ist aber eine simple UV-Transformation, wie wir es in der 11.Klasse gemacht haben, oder? Das schreibt man in 5 Zeilen hin.
Bongo schrieb: > Das ist aber eine simple UV-Transformation, wie wir es in der > 11.Klasse gemacht haben, oder? Das schreibt man in 5 Zeilen hin. Na ja, wenn das Bild ordentlich aussehen will, muss man anteilige Pixelgrössen auch anteilig einrechnen, also entweder oversampling oder den Rest (Nachkommastellen) berücksichtigen. Aber wer erst in der 11. Klasse ist, weiss das natürlich nicht, der kennt nur das Prinzip.
Hallo, vielen Dank ersteinmal für die vielen Vorschläge. Es geht hier nicht um ein Bild sondern um xy-Koordinaten. Aber an einem Bild kann man das Problem ganz gut veranschaulichen. Ich denke der Verschlag von BT (http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.html) geht in die richtige Richtung. Aber durch den 4. Punkt kann ich ja noch zusätzlich eine Scherung des Bildes haben, oder? Georg
Bongo schrieb: > Das ist aber eine simple UV-Transformation, wie wir es in der 11.Klasse > gemacht haben, oder? Das schreibt man in 5 Zeilen hin. Was soll denn eine "UV-Transformation" sein?
Johann L. schrieb: > Bongo schrieb: >> Das ist aber eine simple UV-Transformation, wie wir es in der 11.Klasse >> gemacht haben, oder? Das schreibt man in 5 Zeilen hin. > > Was soll denn eine "UV-Transformation" sein? https://en.wikipedia.org/wiki/UV_mapping
Ok, also toll-Sprech für "Projektion" :-) Wenn die Koordinaten mit x und y bezeichnet werden dann nennt sich das also xy-Transformation...
Georg schrieb: > Aber durch den 4. Punkt kann ich ja noch zusätzlich eine Scherung > des Bildes haben, oder? Durch einen 4. Punkt ist eine affine Transformation bereits überbestimmt, d.h. notwendig (aber nicht hinreichend) dafür, dass es mit einer affinen Trafo entzerrbar ist, ist dass es auch per affiner Trafo verzerrt wurde. Nehmen wir A, B, C, D als Eckpunkte der verzerrten Ausgangsbildes und A', B', C', D' als Eckpunkte des Bildes nach einer affinen Trafo f. Ohne Einschränkung können wir setzen A = A' = 0, dies ist immer durch eine Verschiebung (Translation) erreichbar. Für f kann daher eine lineare Transformation angesetzt werden: f(B) = B' f(C) = C' Weil das ganze in der Ebene geschieht und B und C als Vektoren betrachtet die Ebene aufspannen, gibt es Zahlen b und c so dass D = b·B + c·C d.h. D ist Linearkombination von B und C. Damit ergibt sich das Bild von D unter f zu: D' = f(D) = f(b·B + c·C) = b·f(B) + c·f(C) = b·B' + c·C' wegen der Linearität von f. Es verbleibt also kein Freiheitsgrad mehr um D' festzulegen. Und mit "UV-Transformation" ist überhaupt nix gesagt — ausser dass es eine Abbildung von einem 2-dimensionalen Raum in einen anderen 2-dimensionalen Raum (z.B. Kugeloberfläche) ist. I.d.R wird diese Abbildung winkeltreu und nicht-degeneriert sein. Damit weiß man aber immer noch nicht, wie die Abbildung exakt aussieht.
Ich glaube nicht, dass eine affine Abbildung ausreicht. Da die vier Eckpunkte beider Flächen komplett frei wählbar sind, ist die Parallelität in der Abbildung nicht mehr gegeben. Ich hoffe, dass ich das richtig verstanden habe. Siehe http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.html Die Funktionen getPerspectiveTransform und perspectiveTransform() aus http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#getperspectivetransform sind hingegen genau das was ich gesucht habe. Hier wird der 4. Punkt benötigt.
Georg schrieb: > Nach was kann ich suchen? Homographie bzw. auf Englisch Homography. In homogenen Koordinaten kann man die Transformation einfach als Matrixmultiplikation darstellen: https://en.wikipedia.org/wiki/Homography#Definition_and_expression_in_homogeneous_coordinates In deinem Fall hat die Matrix die Größe 3×3. Das Element rechts unten kannst du i.Allg. auf 1 setzen. Du hast 4 Punkte gegeben, die transformiert jeweils eine vorgegebene x- und y-Koordinate ergeben sollen. Das sind 8 Bedingungen, die du in 8 Gleichungen formulieren kannst, deren Unbekannte die 8 verbleibenden Matrixelemente sind. Durch Lösung des Gleichungssystems erhältst du also die Matrixelemente und damit die gesuchte Transformation.
:
Bearbeitet durch Moderator
Bei 4 Punkten ist es iA keine lineare Transformation, sondern eine sog. bilineare Transformation. Wärend die erste durch ein Polynom von max. Grad 1 eindeutig definiert wird, ist der Grad der Bilinearen iA 2. Nimm als Punkte b00,b01,b10,b11 aus R^n und als DefBereich aus der UV-Ebene den Bereich [0,0]..[1,1], dann hat man in die eine Richtung: b = b00*(1-u)*(1-v)+b10*u*(1-v)+b01*(1-u)*v+b11*u*v d.h. Dein Zielviereck ist komplett erfasst. Für die umgekehrte Richtung muss iA eine Quadr. Gleichung gelöst bzw. ein iterativesVerfahren angewendet werden. Ist aber nicht so schwer.
Hi, ich habe die ganze Geschichte auch erst durch. Ich suche nur eine Trapeziale synchrone verzerrung, also indirekt Linear. Das müsste doch ohne Transform gehen, ein Beispiel in RAW als Php code habe ich gefunden.. das ist so eine art Zeilenweises interpoliertes skalieren. Eine einleuchtende Formel dafür konnte ich bisher leider nicht finden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.