2010-04-02 9 views
5

Więc przede wszystkim mam taki obraz (i oczywiście mam wszystkie punkty współrzędnych w 2D, więc mogę regenerować linii i sprawdź, gdzie krzyżują się ze sobą)Czy istnieje algorytm określania pozycji 3D w takim przypadku? (zdjęcia poniżej)

alt text http://superior0.narod.ru/2d.jpg

ale hej, ja mają inny obraz z tymi samymi liniami (wiem Thay są takie same) i nowych coords moich punktów, jak na tym zdjęciu alt text http://superior0.narod.ru/3d.jpg

... Więc teraz Mając punktów (coords) po pierwszym obrazem, jaki mogę determin obrót samolotu i Głębokość Z na drugim obrazie (umieszczenie pierwszego środka w punkcie (0,0,0) bez obrotu)?

+2

Pytanie o konkretne rozwiązanie tego problemu, a nie ogólne techniki, bardzo przypomina pracę domową. –

+3

oh, sprawa jest ogólna, a konkretne rozwiązanie będzie ogólne dla wielu takich przypadków (dla trójkątów z ex ...) – Rella

+0

możliwy duplikat [Normalny wektor trzech punktów] (http: // stackoverflow .com/questions/2035659/normal-vector-of-three-points) – dmckee

Odpowiedz

2

Powiem to z góry: ten problem jest trudny. Istnieje powód, dla którego powiązane pytanie Dana Story'ego nie zostało wysłuchane. Pozwolić na wyjaśnienie dla osób, które chcą się w to włożyć. Mam jednak nadzieję, że nie mam racji co do tego, jak ciężko jest.

Zakładam, że współrzędne ekranu 2D i macierz projekcji/perspektywy są znane. Musisz wiedzieć przynajmniej tyle (jeśli nie znasz macierzy projekcji, w zasadzie używasz innej kamery, aby spojrzeć na świat). Nazwijmy każda para ekranie 2D współrzędne (a_i, b_i) i będę zakładać macierz projekcji ma postać

P = [ px 0 0 0 ] 
    [ 0 py 0 0 ] 
    [ 0 0 pz pw] 
    [ 0 0 s 0 ], s = +/-1 

Prawie każdy rozsądny występ ma ten formularz. Praca za pośrednictwem rurociągu renderowania, można zauważyć, że

a_i = px x_i/(s z_i) 
b_i = py y_i/(s z_i) 

gdzie (x_i, y_i, z_i) są oryginalne Współrzędne 3D punktu.

Załóżmy teraz, że znasz swój kształt w zestawie współrzędnych kanonicznych (cokolwiek chcesz), aby wierzchołki były (x0_i, y0_i, z0_i). Możemy ustawić je jako kolumny macierzy C. Rzeczywiste współrzędne kształtu są sztywną transformacją tych współrzędnych. W podobny sposób uporządkuj rzeczywiste współrzędne jako kolumny macierzy V.Następnie te są powiązane

V = R C + v 1^T    (*) 

gdzie 1^T jest wektorem rząd te o odpowiedniej długości, R jest macierzą ortogonalną, obrót sztywnej transformacji i v jest przesunięciem wektora transformacji.

Teraz masz wyrażenie dla każdej kolumny V z góry: pierwsza kolumna to { s a_1 z_1/px, s b_1 z_1/py, z_1 } i tak dalej.

Musisz rozwiązać układ równań (*) dla zestawu skalarów z_i i sztywna transformacja zdefiniowane R i v.

Trudności

  • Równanie jest nieliniowa w niewiadomych, z udziałem ilorazy R i z_i
  • założyliśmy do teraz, że wiesz, który koordynuje 2D odpowiadają których wierzchołki pierwotnego kształtu (jeśli twój kształt jest kwadratowy, jest to nieco mniejszy problem).
  • Zakładamy, że istnieje nawet rozwiązanie; jeśli są błędy w danych 2D, to trudno powiedzieć, jak dobrze zostanie spełnione równanie (*); transformacja będzie nieszablonowa lub nieliniowa.
5

To, co próbujesz znaleźć, nazywa się macierzą projekcyjną . Ustalenie dokładnej projekcji odwrotnej zwykle wymaga, abyś miał ustalone współrzędne w obu wektorach źródłowym i docelowym, czego powyższe obrazy ci nie dadzą. Możliwe jest jednak przybliżenie za pomocą pozycji pikseli.

This thread przedstawia podstawowe omówienie technik, których należy użyć.

1

To się nazywa (cyfrowa) fotogrametria. Rozpocznij Googling.

1

Jeśli jesteś naprawdę zainteresowany tego rodzaju problemów (które są powszechne w wizji komputerowej, śledzenie obiektów z kamer itp), następujące Książka zawiera szczegółowy leczenia:

MA, Soatto, Kosecka, Sastry, An Invitation to 3-D Vision, Springer 2004.

Uwaga: jest to zaawansowany tekst inżynierski i wykorzystuje wiele technik o charakterze matematycznym. Przejrzyj przykładowe rozdziały zamieszczone na stronie internetowej książki, aby uzyskać pewien pomysł.

Powiązane problemy