Forum: PC-Programmierung Deformierung-Algorithmus gesucht


von Martin R. (martinrichterbo)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ein Polygon, dass ich über ein Foto legen will (siehe linke 
Seite im Anhang). Im zweiten Schritt will ich das Polygon "verzerren", 
d.h. die Positionen der Eckpunkte des Polygons verändern, so dass ein 
neues Polygon entsteht (siehe rechte Seite im Anahng). Ich suche nun 
einen Algorithmus, mit der man das darunter liegende Foto "mit 
verzerren" oder "interpolieren" kann. Idealerweise sollen keine 
Informationen verloren gehen, sondern nur verschoben werden.


Mir ist klar, dass das eine nicht besonders genau Aufgabenstellung ist, 
aber ich hoffe, dass jemand ein bisschen was von diesem Thema versteht.

: Verschoben durch Moderator
von Michael B. (laberkopp)


Lesenswert?


von Theor (Gast)


Lesenswert?

Nach einigen Sekunden Nachdenken, scheint mir, dass es mehrere 
Definition von Verzerrungen, gegeben durch die Verschiebung der 
Eckpunkte eines Polygons geben kann. Siehst Du das auch so?
Das simpelste wäre umschreibende Rechtecke zu nehmen und dazwischen eine 
affine Transformation auszuführen.

Jedenfalls würde ich für die Implementierung sowas wie OpenCV in 
Betracht ziehen.

Hier gibt es einige Doku (für die Vorgängerversion von OpenCV) zu den 
geometrischen Transformationen: 
http://opencv.jp/opencv-2svn_org/py/imgproc_geometric_image_transformations.html

von Theor (Gast)


Lesenswert?

Nach weiterem Nachdenken fallen mir nur Interpretationen Deiner 
Beschreibung ein, die zu einem verwaschenen, unscharfen Bild führen 
würden. Das mag unvermeidbar sein; ich kann es im Moment nicht sagen.

Vielleicht würde es helfen, wenn Du erklärst, wozu das Ganze gut sein 
soll.
Warum ein Polygon im Ausgangsbild? Warum ein (verändertes 
ursprüngliches) Polygon um die Verzerrung zu definieren?

von Georg (Gast)


Lesenswert?

Theor schrieb:
> scheint mir, dass es mehrere
> Definition von Verzerrungen, gegeben durch die Verschiebung der
> Eckpunkte eines Polygons geben kann

Nehmen wir mal das obere Eck, das wird ein Stück nach oben gezogen. Klar 
ist: Der Eckpunkt bekommt die neue Position, und die Punkte auf den 
Verbindungsgeraden zu den benachbarten Eckpunkten sind zu interpolieren.

Aber: wie weit in das Bild hinein soll sich die Deformation erstrecken? 
20 %? oder bis zur Mitte? Oder bis zur anderen Seite? Das erscheint mir 
schon ziemlich willkürlich, und noch viel willkürlicher wird es sein, 
wie die Deformation durch versetzte Ecken zu einer Gesamttransformation 
kombiniert wird.

Vielleicht führt eine Simulation zum Ziel, die davon ausgeht, dass das 
Bild aus Gummi besteht in der ursprünglichen Form, der an den neuen 
Eckpunkten aufgespannt wird. Also man schneidet sich eine Gummifolie wie 
die Ursprungsform und pinnt die mit Stecknadeln an den neuen Eckpunkten 
fest. Aber erstens ist das auch ziemlich aufwendig und zweitens ist 
überhaupt nicht gesagt dass das Ergebnis dem TO gefällt.

Georg

von Jim M. (turboj)


Lesenswert?

Georg schrieb:
> Vielleicht führt eine Simulation zum Ziel, die davon ausgeht, dass das
> Bild aus Gummi besteht in der ursprünglichen Form, der an den neuen
> Eckpunkten aufgespannt wird.

Gute Idee. Das gibts nämlich fertich als 3D Modeling Programm - 
beispielsweise Blender.

Man macht zuerst das Ausgangs-Polygon und eine 1:1 Abbildung auf die 
Texturkoordinaten (UV-Mapping).

Dann zieht man die (3D) Koordinaten des Poligons einfach in ihre neue 
Position. Die Textur wird dadurch passend verzerrt.

Gimp kennt sowas als "Käfig Transformation" auf Deutsch.

von c.m. (Gast)


Angehängte Dateien:

Lesenswert?

wahrscheinlich kommt hier der gute alte bresenham algorithmus ins spiel…
oder man lässt die texturverzerrung irgendein "opengl-geraffel" machen.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Die erste Gratissoftware zur Fotoverzerrung, die ich kenne war "Anmanie"
hier ein paar Demobilder, Mona Lisa mit Knollennase u.ä.:
http://www.digitalkamera.de/Software/Anmanie/1355.aspx
von 2002

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
Noch kein Account? Hier anmelden.