Hallo Mathematiker!
Ich habe ein Problem mit einer linearen Transformation eines Bildes und kaue daran schon Tage herum… irgendwie kommt mit meinem Wissensstand keine Erhellung - Ich hoffe irgendwer kann mir helfen…
Das Problem: Ich möchte ein Bild in eine Perspektive umwandeln - Die Perspektive wird durch 4 Eckpunkte (Tie Points) definiert. Dazu verwende ich folgende bilineare Transformation (Im Internet gefunden - Die Grundlagen der perspektivischen Projektion habe ich ansatzweise verstanden):
x’ = c1x + c2y + c3xy + c4
y’ = c5x + c6y + c7xy + c8
Dazugehörig die Transformationsmatrix, die die Gleichung mit 8 Koeffizienten (c1…c8) definiert:
x1' | x1 y1 x1y1 1 0 0 0 0 | c1
y1' | 0 0 0 0 x1 y1 x1y1 1 | c2
x2' | x2 y2 x2y2 1 0 0 0 0 | c3
y2' = | 0 0 0 0 x2 y2 x2y2 1 | \* c4
x3' | x3 y3 x3y3 1 0 0 0 0 | c5
y3' | 0 0 0 0 x3 y3 x3y3 1 | c6
x4' | x4 y4 x4y4 1 0 0 0 0 | c7
y4' | 0 0 0 0 x4 y4 x4y4 1 | c8
Kurz geschrieben X’Y’ = M * C
=> C = M-1 * X’Y’
Also errechne ich die inverse Matrix (M-1 und rechne mit den resultierenden Koeffizienten (c1…c8) alle Punkte um:
http://jpj.mine.nu/test/imagetest1.php
(Dauert ein paar Sekunden, bis mein lahmer Server das umgerechnet hat)
Leider sieht man auf den ersten Blick: Die Kanten sind nicht paralell - Die Abbildung kann ich so nicht nutzen.
Dem gegenüber die Implementierung eines Sonderfalles der bilinearen Transformation (Fitzpatrick, Louze 1987 - Falls das Ausgangsbild rechteckig ist - Habe ich auch im Internet gefunden):
falls
f(0,0) = (u00, v00)
f(nx, 0) = (u10, v10)
f(0, ny) = (u01, v01)
f(nx, ny) = (u11, v11)
u = u00 + (u10-u00)(x/nx) + (u01-u00)(y/ny) + (u11-u10-u01+u00)(xy/nxny)
v = u00 + (v10-v00)(x/nx) + (v01-v00)(y/ny) + (v11-v10-v01+v00)(xy/nxny)
http://jpj.mine.nu/test/imagetest.php
(Dauert auch seine Zeit)
Das funktioniert wunderbar, wie ich das haben möchte, allerdings schaffe ich es nicht, die Formel von f(x,y) = (u,v) auf f(u,v) = (x,y) umzuformen, damit ich nicht durch die Koordinaten des Ursprungbildes iteriere, sondern durch die Koordinaten des Zielbildes (Eine Grundvorraussetzung, damit ich zB. das Zielbild strecken kann, ohne dass Lücken entstehen).
Kann mir jemand helfen, die erste Bilineare Tranformation richtig hinzubekommen bzw. die zweite Formel andersrum abzubilden? Ich bin mit meinem rudimentären Mathe-Wissen ziemlich am Ende…
Bitte, bitte!
J.P.Jarolim