Transformieren eines Rechteckbildes in ein Viereck mit einem CATransform3D

Habe ich ein Bild und ein Satz von vier Punkten (Beschreibung eines Vierecks Q). Ich will verwandeln Sie das Bild so, dass es passt das viereck f: Photoshop nennt diese transformation "Verzerren." Aber laut der Quelle von diesem viereck (die Perspektive des Bildes im Raum bewegt), es ist in der Tat die Kombination aus einer Skalierung, Drehung und Perspektive matrix.

Frage ich mich, ob dies möglich ist, mit einem CATransform3D 4x4-matrix. Haben Sie irgendwelche Tipps, wie zu tun? Ich habe versucht, zu nehmen die vier Punkte und bauen 16-Gleichungen (aus A' = A x u) aber es hat nicht funktioniert: ich bin mir nicht sicher was ich verwenden soll, wie z, z', w und w' - Koeffizienten...

Das folgende Bild zeigt, was ich tun will:

Transformieren eines Rechteckbildes in ein Viereck mit einem CATransform3D

Hier sind einige Beispiele für Punkte:

276.523, 236.438,   517.656, 208.945,   275.984, 331.285,   502.23,  292.344
261.441, 235.059,   515.09,  211.5,     263.555, 327.066,   500.734, 295
229.031, 161.277,   427.125, 192.562,   229.16, 226,        416.48,  256
Kommentar zu dem Problem
Ich glaube nicht, dass du gehst zu finden, eine bessere Antwort als KennyTM auf die ähnliche Frage iPhone Bild Strecken (skew). Die Mathematik, die er präsentiert, sollte es genug, um erstellen Sie ein beliebiges viereck als ein Ergebnis der Anwendung einer CATransform3D zu einem CALayer. Kommentarautor: Brad Larson
@BradLarson, für einige ungerade Grund, die Antwort von KennyTM scheint nicht zu funktionieren. Wir bekommen eine 3D-matrix, aber es gibt dummy-Ergebnisse, wenn Sie an CoreAnimation... Kommentarautor: MonsieurDart
Was tun reverse Transformation von viereck, Rechteck? Kommentarautor: Cherpak Evgeny
@CherpakEvgeny, ich denke, die cvFindHomography() OpenCV-Funktion auch funktionieren würde für diesen Weg. Kommentarautor: MonsieurDart
@BradLarson und andere, KennyTM ist erstaunlich, code aus 5 yrs ago ist definitiv ein wenig eine lästige Pflicht zu bekommen, um die Arbeit in der Praxis, da gibt es einige Verwirrung mit ABCD versus ABDC Bestellung, übersetzung, und wie ... Gott sei Dank, JoshRL unten Tat all die harte Arbeit und erstellt eine makellose drop-in-class basierend auf den KTM ' s math. Es gibt jetzt eine Swift-version, die funktioniert perfekt und ist sehr viel getestet stackoverflow.com/a/18606029/294884 Kommentarautor: Fattie

InformationsquelleAutor der Frage MonsieurDart | 2012-02-27

Schreibe einen Kommentar