2012-06-06 2 views
6

Ich arbeite an einer Aufgabe, die versucht, eine 2D-Skizze mit Faltfalten in eine vollständige 3D-Darstellung umzuwandeln. Rote Linien sind Täler und Blue Mountains/Tops. Ich möchte die transformierten/gemappten Koordinaten {P1 '... P8'} berechnen. Ich habe keine gute Software gefunden, die das automatisch machen könnte, würde sich aber über Tipps freuen.Ein Blatt Papier falten (Computer Vision)

Folding Pattern

  • a - Winkel Faltung
  • P -
  • E Koordinaten - Element
  • blaue Linie - gefaltet Berg
  • rote Linie - gefaltet Tal

Folded mit a1 = a2 = a3 = 90 ° (pi/2 rad) (gefalzt Winkel) und Pfeile als surfare Normalen

Ich verwende Matlab aber ich bin für allgemeine Algorithmen um dieses Problem zu lösen.

Unter der Annahme Punkt P0 in origo und Elemente befestigt E1 nicht seine Koordinaten ändern, wie soll ich die Transformation am besten beschreiben? Soll ich inhomogene oder homogene Koordinaten, Polarkoordinaten verwenden?

Zum Beispiel hängt Punkt P8 von den anderen Koordinaten ab, die von den Winkeln abhängen.

Ich nehme an, ich könnte eine Art Adjazenzmatrix für die Punkte (Knoten) und/oder eine Matrix verwenden, die jedes Element mit seinen Knoten koppelt. Zum Beispiel: [E1 P0 P4 P5 P1; E2 P1 P5 P6 P2; ...]

Die Transformation für jede Koordinate ist Transformation + Rotation und die Transformation hängt von der Koordinate/Element ab. Aber es wird schwierig, wenn mehrere Elemente verbunden sind ...

Wie kann ich ein 2D- "Papier" mit Faltungsmustern sauber in 3D-Koordinaten umwandeln?

+0

Garantieren Sie, dass das Papier nicht ineinander läuft? Auch was ist die Faltungsreihenfolge (Rotation ist NICHT kommutativ)? – tskuzzy

Antwort

1

können Sie jede Faltlinie durchlaufen und die Transformation aller Pixel berechnen, die auf einer Seite der Falte liegen.

können Sie eine Transformationsmatrix verwenden, um die Koordinaten der gefalteten Punkte zu berechnen. Werfen Sie einen Blick auf the wikipedia article describing transformation matrix.

zuerst alle Punkte so übertragen, dass die Falte mit einer Achse ausgerichtet ist, und dann alle Punkte auf einer Seite der Falte entsprechend der Falte drehen. Sie können dann die erste Übersetzung umkehren, so dass die Figur in ihre ursprüngliche Position zurückkehrt. Wiederholen Sie den Vorgang mit der nächsten Falte, bis Sie die Figur vollständig gefaltet haben.

Mit Matlab, Matrix-Berechnung sind ziemlich einfach zu präformieren.

+0

Sound was ich mir vorgestellt habe! Ich benutze die Rotationsformel von Rodrigues. Wenn das Faltungsmuster jedoch komplizierter wird, muss ich sortieren, welche Punkte gefaltet werden, glaube ich. Alle anderen zu falten würde ein Durcheinander machen? Schau dir dieses Bild an. Was denken Sie? [link] http://i49.tinypic.com/2ewfozq.png) – POHU

+0

eck! Was für ein Faltmuster! Für solch ein Muster haben Sie das Problem, dass das Falten andere Punkte als die, die Sie falten, bewegt. Wenn man auf die blaue Linie drückt, werden einige Punkte entlang der roten Linien gezogen ... und das ist viel komplizierter als das, was ich beschrieben habe. –

+0

Ha ja! Ich sehe diese Art von Problem als sehr fortgeschritten. Denkst du, dass es unter vernünftigen Umständen möglich ist, einen Algorithmus zu schreiben, der für diese Art von Mustern funktioniert, aber auch für ein beliebiges Muster? Erster Tag bei der Arbeit, Glück mich hehe ... – POHU

1

Sie könnten vielleicht Techniken zur Beschreibung von Robotern mit mehreren Drehgelenken verwenden; als Ihr Problem könnte als forward kinematics Problem beschrieben werden.Eine weitere interessante Lektüre könnte this sein.

0

Sie möchten einfach eine lineare Transformation auf jeden Punkt auf einer Seite der Linie anwenden.

Die Transformation ist eine Rotation um eine Achse, deren Transformationsmatrix ist given by

enter image description here

Da die Achse nicht über den Ursprung zentriert ist, müssen Sie zunächst eine Übersetzung Ursprung gelten, dann mach die Rotation, dann translate zurück.