5

我正在嘗試構建跟蹤器(手跟蹤個人項目),因此我需要使用Plucker座標將2D點投影到3D線。 (像光線追蹤)將2D點投影到3D Plucker線

作爲一個輸入,我有一個點的2D座標和投影矩陣。

網上關於摘要座標的信息給出了他們爲什麼有用的概述,但是沒有分析描述上述過程的論文。 (他們只是提到,他們後面投影到一個採摘線,沒有任何進一步的描述)

有人可以請我指出正確的方向嗎?

回答

7

顯然沒有什麼魔術背後,我正在尋找一個公式/定理立即從我的'輸入'到採摘器座標產生,而沒有這樣的事情。

作爲輸入,我們有

  • 2D座標的(投影)指向
  • 投影矩陣

使用這兩個輸入,我們可以回項目這個2D點到(3D線)。 此3D線的所有3D點均投影到相同的2D點。 射線默認通過相機中心(或投影中心等)。

對於必要的方程,看到

總的想法是,爲了定義一條線,你需要2分。 我們選擇找到(與從上述來源方程式)

  • 照相機中心(所有投影射線通過此點由默認傳)
  • 射線@無窮大的點(這是很好的,因爲無限遠點也是直線的方向矢量 - >這是需要後面上的包機線表示)

(我們可以發現照相機中心和另一個任意點,但隨後,我們需要通過減去這兩點的座標來尋找線的方向的額外步驟。)

綜上所述,我們已經發現

  • 攝像機中心的線(點@無窮大(P)
  • 方向(d)) (點在無窮遠處相當於方向)

這些足以表示一條直線,但是當我們必須計算3D點到我們算法中這條直線的距離時,這種表示並不是最優的。 這就是爲什麼,發現這表示(沒有魔法給我們立即包機線),我們改變我們行的表示,以包機線的表示

普拉克線是需要行的另一種表現:

  • 線的方向(我們已經有了它! - > d - >在無限遠點)
  • 在「力矩」線的(M),這是很容易從計算以前的代表性:

    米= P^d(^ - >積)

我希望這將清除的東西的人,將需要這在未來,我認爲這是一個很容易的事情,但在開始的時候事情可能不非常明顯。

對於實際情況下,爲什麼人們會用這個包機線的表示,請

+0

該論文的鏈接已經死亡。對於任何感興趣的人來說,鏈接的論文標題爲Brox等人的「基於組合區域和基於運動的3D跟蹤 的剛性和鉸接物體」。 工作鏈接(截至2017年3月):https://www.tnt.uni-hannover.de/papers/data/761/761_1.pdf – M2X

2

對於利用Matlab /倍頻語法未來參考!

在普呂克座標的兩個點的加入可以表示如下

% 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 

這些是從防對稱矩陣

Lx=B*A'-A*B' 

在反投影射線的點的6點不同的值可以被發現

X=pinv(P)*x 

其中

x=[u v 1]' 

是在像素位置(U,V)和

pinv(P) 

投影矩陣的僞逆的圖像點。

攝像機中心可以發現作爲投影矩陣

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

的普呂克座標反投影射線的的零空間因此

L=join(X,C) 

對於那些有興趣的面向投影幾何:如果您按如下規格化投影矩陣:

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

然後確定左邊的3x3矩陣正(即右手系統)和L將指向從C到X.

+0

先生,您是最棒的! – M2X

1

我發佈這只是爲了完整性,基於一些東西在OP的被接受的答案引用的論文中的組合,答案@ AndréAichert和[1]的p493中的描述。

以下是構建穿過兩點AB並計算其與點C的距離的Plucker線的最低限度工作的MATLAB示例。

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. Springer Science &商業媒體,2013.