2013-08-22 164 views
1

我想要做的是將點雲投影到2D圖像上。我擁有的是一個3D PointCloud和一個與普通世界座標系不同的Viewpoint。我想從這個觀點進行光線投射來生成點雲的二維圖像。所以,我只需要像getintersectedvoxel這樣的方法,它可以爲整個區域進行鑄造,而不僅僅是單一射線。從給定的觀點將3D點雲Raycast到2D圖像

+0

像做點的投影到一個平面與正常平面? – Max

+1

你可以看看VTK(http://www.vtk.org/vtkindex.html) –

+0

我得到了兩個視點之間的變換矩陣,如果這是必要的。 – user2707698

回答

0

這是從3D到相機的投影。您可以使用針孔攝像機模型方程式獲得它(如here所示)。

您需要先定義相機的3個參數:焦距f,以及投影平面的中心:cx,cy。有了這個,你創建一個3x3矩陣(我將使用MATLAB語法):

A = [ f 0 cx; 
     0 f cy; 
     0 0 1 ]; 

您可以使用類似cx = 0.5 * image_widthcy = 0.5 * image_height,有的價值f = 800(嘗試一些他們的檢查圖像看起來如何更好)。

然後,從相機框架點雲框架的變換一個3×4矩陣(你說你有話):

T = [ r11 r12 r13 tx; 
     r21 r22 r23 ty; 
     r31 r32 r33 tz ]; 

最後,你的點雲齊次座標,即在4xN矩陣點雲與N個點:

P = [ x1 x2 ... xN; 
     y1 y2 ... yN; 
     z1 z2 ... zN; 
     1 1 ... 1 ]; 

現在,您可以投影點:

S = A * T * P; 

S是一個3×N個矩陣,其中每個第i 3D點的像素座標是:

x = S(1, i)/S(3, i); 
y = S(2, i)/S(3, i); 
+0

多數民衆贊成在一般情況下...但我只想看到第一個相交的體素,而不是所有的體素 – user2707698

+0

具有較低'S(3,i)'分量的點首先被看到。 – ChronoTrigger