5

Tôi đang cố gắng xây dựng trình theo dõi (dự án cá nhân theo dõi tay) và vì lý do này, tôi cần quay lại điểm 2d thành đường 3d, sử dụng tọa độ Plucker. (như dò tia)chiếu lại điểm 2D vào đường kẻ sọc 3D

Là đầu vào, tôi có tọa độ 2d của một điểm và ma trận chiếu.

Thông tin trên web về các tọa độ plucker cung cấp tổng quan về lý do tại sao chúng hữu ích, nhưng không có giấy mô tả phân tích quy trình được đề cập ở trên. (họ chỉ đề cập rằng họ quay trở lại dự án với một đường kẻ sọc, không có bất kỳ mô tả nào khác)

Ai đó có thể xác định đúng hướng của tôi không?

Trả lời

7

Rõ ràng là không có phép thuật đằng sau điều này, tôi đang tìm kiếm một công thức/định lý kết quả ngay lập tức từ 'đầu vào' của tôi đến các tọa độ plucker, trong khi không có điều đó.

Như đầu vào, chúng ta có

  • tọa độ 2D của một (dự kiến) chỉ
  • ma trận chiếu

Sử dụng hai đầu vào này, chúng ta có thể back-dự án điểm 2d này cho một người tia (dòng 3D). Tất cả các điểm 3D của đường 3D này được chiếu cùng một điểm 2D. Tia theo mặc định đi qua trung tâm camera (hoặc trung tâm chiếu, vv).

Đối với phương trình cần thiết, xem

Ý tưởng chung là, để xác định một dòng, bạn cần 2 điểm. Chúng tôi lựa chọn để tìm (với phương trình từ các nguồn nêu trên)

  • Trung tâm máy ảnh (tất cả các tia chiếu qua theo mặc định thông qua điểm này)
  • Một điểm của tia @ vô cực (điều này là tốt đẹp, bởi vì một điểm ở vô cùng cũng là vectơ hướng của đường thẳng -> điều này là cần thiết sau này cho biểu diễn đường kẻ sọc)

(chúng ta có thể tìm thấy trung tâm camera và một điểm tùy ý khác, nhưng sau đó chúng ta sẽ cần một bước phụ để tìm hướng của đường thẳng, bằng cách trừ đi tọa độ của hai điểm này.)

Tóm lại, chúng tôi đã tìm thấy

  • Trung tâm máy ảnh (p)
  • Hướng (d) của đường (điểm @ vô cực) (Điểm ở vô cực là tương đương với định hướng)

Đây là đủ để đại diện cho một dòng, nhưng biểu diễn này không phải là tối ưu khi chúng tôi phải tính toán khoảng cách từ điểm 3D đến dòng này trong thuật toán của chúng tôi. Đây là lý do tại sao, sau tìm đại diện này (không có phép thuật để cung cấp cho chúng tôi dòng Plucker ngay lập tức), chúng ta thay đổi dòng-đại diện của chúng tôi để Plucker-line-đại diện

Plucker dòng chỉ là một đại diện của dòng mà cần:

  • hướng của dòng (chúng tôi đã có nó !!! -> d -> điểm ở vô cực)
  • các 'thời điểm' (m) của dòng, đó là dễ dàng để tính toán từ đại diện trước đó:

    m = p^d (^ -> cross product)

Tôi hy vọng điều này sẽ xóa mọi thứ cho bất cứ ai sẽ cần điều này trong tương lai, tôi nghĩ đó là một điều rất dễ dàng, nhưng trong đầu những điều có thể không thật rõ ràng.

Đối với một kịch bản thực tế, tại sao người ta sẽ sử dụng này Plucker-line-đại diện, xin vui lòng kiểm tra

+0

Liên kết tới giấy đã chết. Đối với bất kỳ ai quan tâm, giấy được liên kết có tiêu đề "Theo dõi 3D theo vùng và dựa trên chuyển động của các đối tượng cứng nhắc và khớp nối" của Brox et al. Liên kết làm việc (tính đến tháng 3 năm 2017): https://www.tnt.uni-hannover.de/papers/data/761/761_1.pdf – M2X

2

Để tham khảo trong tương lai sử dụng cú pháp Matlab/Octave!

Các tham gia của hai điểm trong tọa độ Plücker thể được diễn tả như sau

% 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 

Đây là những 6 giá trị khác biệt từ các ma trận chống đối xứng

Lx=B*A'-A*B' 

Một điểm trên ray backprojection thể được tìm thấy

X=pinv(P)*x 

nơi

x=[u v 1]' 

là điểm ảnh ở vị trí pixel (u, v) và

pinv(P) 

các pseudoinverse của ma trận chiếu.

Trung tâm máy ảnh có thể được tìm thấy như không gian rỗng của ma trận chiếu

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

Các Plücker tọa độ của các tia backprojection là như vậy

L=join(X,C) 

Đối với những người quan tâm đến hình học projective hướng: Nếu bạn chuẩn hóa ma trận chiếu như sau

% 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; 

Sau đó, yếu tố quyết định của ma trận trái 3x3 tích cực (tức là hệ thống thuận tay phải) và L sẽ trỏ từ C đến X.

+0

Bạn, thưa bạn, là TỐT NHẤT! – M2X

1

Tôi đăng bài này chỉ vì mục đích hoàn chỉnh, dựa trên sự kết hợp của một số nội dung trong bài báo được trích dẫn trong câu trả lời được chấp nhận của OP, câu trả lời của @ André Aichert và mô tả trong p493 của [1].

Sau đây là ví dụ MATLAB tối thiểu để xây dựng đường kẻ Plucker đi qua hai điểm AB và tính khoảng cách tới điểm 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, ed. Geometric computing with Clifford algebras: theoretical foundations and applications in computer vision and robotics. Khoa học Springer & Phương tiện truyền thông kinh doanh, 2013.

Các vấn đề liên quan