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
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
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.
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.
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.