2009-07-13 18 views
6

Jako kontynuację dla my previous question dotyczące określania parametrów kamery sformułowałem nowy problem.Ustalanie macierzy transformacji

Mam dwa zdjęcia tego samego prostokąta:

Pierwszy to obraz bez żadnych przekształceń i pokazuje prostokąt, jak to jest.

Drugie zdjęcie pokazuje prostokąt po zastosowaniu transformacji 3d (obrót XYZ, skalowanie, tłumaczenie XY). Spowodowało to, że prostokąt wyglądał jak trapez.

Mam nadzieję, że następujący obraz opisuje mój problem:

alt text http://wilco.menge.nl/application.data/cms/upload/transformation%20matrix.png

Jak określić, jakie transformacje (dokładniej: co transformacji macierzy) spowodowały tę tranformation?

Znam położenia pikseli w rogach na obu obrazach, dlatego też znam odległości między narożnikami.

Odpowiedz

2

jestem zdezorientowany. Czy to jest problem 2d czy 3d?

Sposób, w jaki go rozumiem, ma płaski prostokąt osadzony w przestrzeni 3d, i patrzysz na dwa 2 "obrazy" tego - jeden z oryginalnego i jeden oparty na przekształconej wersji. Czy to jest poprawne?

Jeśli jest to poprawne, oznacza to, że nie ma wystarczających informacji, aby rozwiązać problem. Załóżmy na przykład, że te dwa obrazy wyglądają dokładnie tak samo. Może to wynikać z tego, że tłumaczenie jest tożsamością, lub może być, ponieważ tłumaczenie przesuwa prostokąt dwa razy dalej od kamery i podwaja jego rozmiar (dzięki czemu wygląda dokładnie tak samo).

+0

To jest problem 3D. Pierwsze zdjęcie jest obrazem odniesienia prostokąta w skali 1: 1. Drugi może być traktowany jako obraz prostokąta zrobiony przez kamerę. Rozumiem, że istnieje większa liczba rozwiązań (więcej macierzy transformacji) w konkretnym przypadku. Jeśli tak jest, z przyjemnością wybiorę którekolwiek z nich. (W opisywanej sytuacji byłbym zadowolony z macierzy tożsamości lub dowolnej matrycy, która daje taki sam wynik) – dwergkees

1

Jest to problem matematyczny, nie programuje ..

trzeba zdefiniować zestaw równań (swoją macierz transformacji, moje przypuszczenie jest Równania 3), a następnie rozwiązać go na 4 przemian narożnych punktów .

Mam tylko kiedykolwiek opisał to za pomocą niemieckiego słowa ... więc powyższe zabrzmi dziwnie ..

0

Na podstawie posiadanych informacji nie jest to takie proste. Dam ci jednak kilka pomysłów na zabawę. Gdybyś miał współrzędne 3D rogów, miałbyś łatwiejszy czas. Oto podstawowy pomysł.

  1. Przesuń róg do punktu początkowego. Następnie nastąpi rotacja wokół miejsca pochodzenia.
  2. Określ wektory osi. Zrób to, odejmując sąsiednie rogi od punktu początkowego. Będą to lokalna oś X i Y dla twojego świata.
  3. Określanie kątów za pomocą wektorów. Możesz użyć produktów dot i cross, aby określić kąt pomiędzy lokalną osią x a globalną osią x (1, 0, 0).
  4. Obrót o kąt w kroku 3. Daje to nową oś x, która powinna odpowiadać globalnej osi x i nowej lokalnej osi y. Następnie można wyznaczyć inny obrót wokół osi x, co spowoduje wyrównanie osi y z globalną osią y.

Bez współrzędnych z można zauważyć, że będzie to trudne, ale jest to ogólny proces.Mam nadzieję, że to pomoże.

0

Rozwiązanie nie będzie wyjątkowe, jak zauważa Alex319.

Jeśli drugi obraz jest tak naprawdę trapezem, jak mówisz, nie będzie to zbyt trudne. Jest to trapez (nie równoległobok) z powodu perspektywy, więc musi to być trapez równoramienny.

Narysuj dwie przekątne. Przecinają się w centrum prostokąta, więc zajmuje się tłumaczeniem.

Obracaj trapezem, aż jego równoległe boki będą równoległe do dwóch boków pierwotnego prostokąta. (Które dwa? Nie ma znaczenia.)

Narysuj trzeci równoległy przez środek. Skaluj to na boki prostokąta, który wybrałeś.

Teraz do obrotu z samolotu. Zmierz odległość od środka do jednej z równoległych stron i użyj prawa sinusoidy.

Jeśli to nie jest trapez, tylko czworoboczny, to będzie trudniej, musisz użyć kątów między przekątnymi, aby znaleźć oś obrotu.