我正在嘗試構建跟蹤器(手跟蹤個人項目),因此我需要使用Plucker座標將2D點投影到3D線。 (像光線追蹤)將2D點投影到3D Plucker線
作爲一個輸入,我有一個點的2D座標和投影矩陣。
網上關於摘要座標的信息給出了他們爲什麼有用的概述,但是沒有分析描述上述過程的論文。 (他們只是提到,他們後面投影到一個採摘線,沒有任何進一步的描述)
有人可以請我指出正確的方向嗎?
我正在嘗試構建跟蹤器(手跟蹤個人項目),因此我需要使用Plucker座標將2D點投影到3D線。 (像光線追蹤)將2D點投影到3D Plucker線
作爲一個輸入,我有一個點的2D座標和投影矩陣。
網上關於摘要座標的信息給出了他們爲什麼有用的概述,但是沒有分析描述上述過程的論文。 (他們只是提到,他們後面投影到一個採摘線,沒有任何進一步的描述)
有人可以請我指出正確的方向嗎?
顯然沒有什麼魔術背後,我正在尋找一個公式/定理立即從我的'輸入'到採摘器座標產生,而沒有這樣的事情。
作爲輸入,我們有
使用這兩個輸入,我們可以回項目這個2D點到(3D線)。 此3D線的所有3D點均投影到相同的2D點。 射線默認通過相機中心(或投影中心等)。
對於必要的方程,看到
總的想法是,爲了定義一條線,你需要2分。 我們選擇找到(與從上述來源方程式)
(我們可以發現照相機中心和另一個任意點,但隨後,我們需要通過減去這兩點的座標來尋找線的方向的額外步驟。)
綜上所述,我們已經發現
這些足以表示一條直線,但是當我們必須計算3D點到我們算法中這條直線的距離時,這種表示並不是最優的。 這就是爲什麼,後發現這表示(沒有魔法給我們立即包機線),我們改變我們行的表示,以包機線的表示
普拉克線是需要行的另一種表現:
在「力矩」線的(M),這是很容易從計算以前的代表性:
米= P^d(^ - >積)
我希望這將清除的東西的人,將需要這在未來,我認爲這是一個很容易的事情,但在開始的時候事情可能不非常明顯。
對於實際情況下,爲什麼人們會用這個包機線的表示,請
對於利用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.
先生,您是最棒的! – M2X
我發佈這只是爲了完整性,基於一些東西在OP的被接受的答案引用的論文中的組合,答案@ AndréAichert和[1]的p493中的描述。
以下是構建穿過兩點A
和B
並計算其與點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.
該論文的鏈接已經死亡。對於任何感興趣的人來說,鏈接的論文標題爲Brox等人的「基於組合區域和基於運動的3D跟蹤 的剛性和鉸接物體」。 工作鏈接(截至2017年3月):https://www.tnt.uni-hannover.de/papers/data/761/761_1.pdf – M2X