2012-06-06 14 views
6

Pracuję nad zadaniem, które próbuje przekształcić szkic 2D ze składanymi zagięciami do pełnej reprezentacji 3D. Czerwone linie będą dolinami i niebieskimi górami/wierzchołkami. Chciałbym obliczyć transformowane/mapowane współrzędne {P1 '... P8'}. Nie znalazłem żadnego dobrego oprogramowania, które mogłoby to zrobić automatycznie, ale doceniłoby wskazówki.Składanie arkusza papieru (Computer Vision)

Folding Pattern

  • - kąt złożenia
  • P - współrzędnych
  • e - element
  • niebieska linia - składany góra
  • linia czerwona - składany doliny

Folded z a1 = a2 = a3 = 90 ° C (pi/2) (rad złożony kąt) i strzał jako surfare normalnych

ja Matlab ale szukam algorytmów ogólnych do rozwiązania tego problemu. punkt

Zakładając P0 jest ustalona w Origo i elementem E1 nie zmieni jego współrzędne, jak mam najlepiej opisują transformację? Czy powinienem używać niejednorodnych lub homogenicznych współrzędnych, współrzędnych biegunowych?

Na przykład punkt P8 zależy od innych współrzędnych zależnych od kątów.

Przypuszczam, że mógłbym użyć jakiejś macierzy sąsiedztwa dla Punktów (Węzłów) i/lub macierzy łączącej każdy element z jego Węzłami. E.g: [E1 P0 P4 P5 P1; E2 P1 P5 P6 P2; ...]

Transformacja dla każdej współrzędnej to transformacja + obrót, a transformacja zależy od współrzędnej/elementu. Ale staje się to trudne z kilkoma połączonymi elementami ...

W jaki sposób mogę starannie przekształcić 2D "papier" ze składanymi wzorami na współrzędne 3D?

+0

Czy masz gwarancję, że papier nie będzie się nawzajem układał? Co to jest składana kolejność (obrót NIE JEST przemienny)? – tskuzzy

Odpowiedz

1

można iterować po każdym składanym zagięciu i obliczyć transformację wszystkich pikseli leżących po jednej stronie zagięcia.

można użyć macierzy przekształcenia do obliczenia współrzędnych złożonych punktów. spójrz na the wikipedia article describing transformation matrix.

najpierw przetłumaczyć wszystkie punkty, aby zagięcie było wyrównane z osią, a następnie obrócić wszystkie punkty po jednej stronie zagięcia zgodnie z kierunkiem zagięcia. możesz wtedy odwrócić pierwsze tłumaczenie, aby postać powróciła do swojej pierwotnej pozycji. powtórz z procesem z kolejnym zagnieceniem, aż całkowicie złożysz figurę.

za pomocą Matlab, obliczenia macierzy są dość łatwe do preform.

+0

Brzmi jakoś, co miałem na myśli! Używam formuły rotacyjnej Rodrigues'a. Jednakże, gdy wzór składania staje się bardziej skomplikowany, muszę posortować punkty, które należy złożyć, jak sądzę. Składanie wszystkich innych spowodowałoby bałagan? Spójrz na to zdjęcie. Co myślisz? [link] http://i49.tinypic.com/2ewfozq.png) – POHU

+0

eck! co za wzór składany! dla takiego wzoru będziesz miał problem ze składaniem przesunie się inne punkty niż te, które składasz. wyraźne pchnięcie niebieskiej linii spowoduje przeciągnięcie niektórych punktów wzdłuż czerwonych linii ... i to jest o wiele bardziej skomplikowane niż to, co opisałem. –

+0

Ha tak! Ten problem uważam za bardzo zaawansowany. Czy sądzisz, że w uzasadnionych przypadkach można napisać algorytm, który działa dla tego rodzaju schematu, ale także dla dowolnego wzorca? Pierwszy dzień w pracy, szczęście mnie hehe ... – POHU

1

Możliwe, że możesz użyć technik używanych do opisu robotów z wieloma obrotowymi złączami; niż twój problem można opisać jako problem o numerze forward kinematics.Kolejną interesującą lekturą może być this.

0

Po prostu chcesz zastosować transformację liniową do każdego punktu po jednej stronie linii.

Transformacja jest obrót wokół osi, którego macierz transformacji jest given by

enter image description here

Ponieważ oś nie jest wyśrodkowany na temat pochodzenia, trzeba najpierw zastosować tłumaczenia do pochodzenia, a następnie wykonaj rotację, a następnie przetłumacz z powrotem.