5

Próbuję zbudować tracker (śledzenie osobiste projektu ręcznego) iz tego powodu muszę z powrotem rzutować punkt 2d na linię 3d, używając współrzędnych Plucker. (jak śledzenie ray)rzutowanie z powrotem punktu 2D na linię 3D Plucker

Jako dane wejściowe, mam współrzędne 2d punktu i macierzy projekcji.

Informacje w Internecie na temat współrzędnych pluckera dają przegląd tego, dlaczego są pomocne, ale nie ma papieru opisującego analitycznie powyższą procedurę. (po prostu wspominają o projekcie z powrotem do linii plucker, bez żadnego dalszego opisu)

Czy ktoś może wskazać mi właściwy kierunek?

Odpowiedz

7

Najwyraźniej nie ma za tym żadnej magii, szukałem wzoru/twierdzenia wynikającego bezpośrednio z moich "danych wejściowych" do współrzędnych pluckera, podczas gdy nie ma czegoś takiego.

jako wejścia mamy

  • 2D współrzędnych (przewidywane) punkt
  • macierz projekcji

Za pomocą tych parametrów, można z powrotem projekcie tego 2d wskazują na ray (linia 3D). Wszystkie punkty 3D tej linii 3D są wyświetlane w tym samym punkcie 2D. Promień domyślnie przechodzi przez środek kamery (lub centrum projekcji itp.).

Dla koniecznych równań, patrz

Ogólna idea jest taka, że ​​w celu zdefiniuj linię, potrzebujesz 2 punktów. Wybieramy znaleźć (z równań z wyżej wymienionych źródeł)

  • centrum kamery (wszystkie promienie projekcyjne przekazać domyślnie przez ten punkt)
  • punktu ray @ nieskończoności (to jest ładne, ponieważ punkt w nieskończoności jest również kierunkiem wektora linii -> jest to potrzebne później do przedstawienia linii wyskoku)

(mogliśmy znaleźć centrum kamery i inny punkt arbitralny, ale wtedy potrzebowalibyśmy dodatkowy krok, aby znaleźć kierunek linii, odejmując współrzędne tych dwóch punktów.)

Podsumowując, odkryliśmy

  • The centrum kamery (P)
  • Kierunek (d) linii (punkt @ nieskończoności) (Punkty w nieskończoności są równoważne kierunkach)

Są one wystarczające do przedstawienia linii, ale ta reprezentacja nie jest optymalna, gdy musimy obliczyć na przykład odległości punktów 3D do tej linii w naszym algorytmie. To dlatego, po znalezieniem tej reprezentacji (nie magiczne, aby dać nam linie Plucker natychmiast), możemy zmienić nasz skład reprezentacji plucker-line-reprezentacja

linia Plucker jest kolejnym przedstawieniem linii, który musi: (punkt> w nieskończoności mamy już go !!! - -> d)

  • „moment” (m) linii, która jest łatwa do obliczenia z

    • kierunek linii poprzednia reprezentacja:

      m = p^d (^ -> iloczyn)

    Mam nadzieję, że czyści rzeczy dla każdego, kto będzie potrzebował tego w przyszłości, myślę, że to bardzo łatwa rzecz, ale na początku sprawy nie może być tak oczywistym.

    W praktyce scenariusz, dlaczego należałoby użyć tej Plucker-line-reprezentacji, proszę sprawdzić

  • +0

    Link do papieru jest martwy. Dla każdego zainteresowanego, związany z nim dokument nosi tytuł "Śledzenie 3D w oparciu o regiony i ruchy" obiektów sztywnych i przegubowych "autorstwa Brox i in. Link roboczy (stan na marzec 2017 r.): Https://www.tnt.uni-hannover.de/papers/data/761/761_1.pdf – M2X

    2

    Na przyszłość używając składni Matlab/Octave!

    złączenia dwóch punktów o współrzędnych plucker może być wyrażona w następujący sposób

    % line = point join point 
    function L=join(A, B) 
    L=[ 
         A(1)*B(2)-A(2)*B(1); 
         A(1)*B(3)-A(3)*B(1); 
         A(1)*B(4)-A(4)*B(1); 
         A(2)*B(3)-A(3)*B(2); 
         A(2)*B(4)-A(4)*B(2); 
         A(3)*B(4)-A(4)*B(3) 
    ]; 
    end % function 
    

    Są 6 różnych wartości od antysymetryczna matrycy

    Lx=B*A'-A*B' 
    

    punkt na promień backprojection może zostanie znalezione:

    X=pinv(P)*x 
    

    gdzie

    x=[u v 1]' 
    

    jest punktem piksela obrazu w miejscu (u, v), a

    pinv(P) 
    

    pseudoinverse macierzy projekcji.

    Środek kamera znajduje się w przestrzeni zerowej macierzy projekcji

    C=null(P); 
    C=C/C(4) 
    

    Plucker współrzędne promienia backprojection są zatem

    L=join(X,C) 
    

    Dla zainteresowanych zorientowanej rzutowej geometrii: Jeżeli znormalizujesz macierz projekcji w następujący sposób:

    % Get length of principal ray 
    m3n=norm(P(3,1:3)); 
    % Enforce positivity of determinant 
    if (det(P(:,1:3))<0) 
        m3n=-m3n; 
    end % if 
    % Normalize 
    P=P/m3n; 
    

    Następnie wyznacznik lewej matrycy 3x3 jest dodatni (tj. praworęcznych systemów) i L będzie wskazywać od C do X.

    +0

    Jesteście, proszę pana, NAJLEPSI! – M2X

    1

    Zamieszczam to tylko ze względu na kompletność, w oparciu o kombinację niektórych rzeczy w dokumencie cytowanym w przyjętej odpowiedzi PO, odpowiedź przez @ André Aichert i opisy w p493 [1].

    Poniżej znajduje się minimalnie działający przykład MATLAB do budowy linii Plucker przechodzącej przez dwa punkty A i B i obliczania jej odległości do punktu C.

    A = [0 0 0]'; 
    B = [0 0 5]'; 
    C = [1 1 0]'; 
    
    L = pluckerline(A,B); 
    
    distance = compute_plucker_distance(C, L) % Will output 1.4142 
    
    %%------------------------------------------------------------------------- 
    
    % Comptes the Plucker line passing through points A and B 
    function L = pluckerline(A, B) 
        l = (B - A)/norm(B - A); 
        m = cross(A, l); 
    
        L = [l ; m]; 
    end 
    
    %%------------------------------------------------------------------------- 
    
    % Comptes the distance between the point P and Plucker line L 
    function distance = compute_plucker_distance(P, L) 
        l = L(1:3); 
        m = L(4:end); 
    
        distance = norm(cross(P, l) - m); 
    end 
    

    [1] Sommer, Gerald, wyd. Geometric computing with Clifford algebras: theoretical foundations and applications in computer vision and robotics. Springer Science & Media biznesowe, 2013.

    Powiązane problemy