2016-07-01 152 views
3

我正在嘗試使用Python和Mayavi創建可視化。
該可視化的目的是在路徑的不同階段顯示軌跡和相機平截頭體。使用Mayavi和Python渲染圖像

Rended_screenshot 我與之奮鬥的事情是用實際圖像來構造相機平截頭體多邊形。

我很樂意將性能考慮放在眼前,並希望找到一種方法來紋理mayavi創建的由numpy提供的圖像的表面。

最有希望的建議被發現there,但我無法構建一個表面,因爲我實施它們。

def render_image(self, frustum, timestamp): 
     surf = mayavi.mlab.surf(frustum[0, :-1], 
           frustum[1, :-1], 
           frustum[2, :-1], 
           color = (1.0, 1.0, 1.0)) 

這對錶面創建,其中numpy的陣列平截頭體的行是x,y的代碼,Z座標分別與最後,第五點是金字塔的頂端,並因此不需要用於網格。

x [-8.717184671492793, -8.623419637172622, -8.363581977642212, -8.269816943322041] 
y [-4.563044562134721, -4.941612408713827, -4.37100415350352, -4.749572000082626] 
z [13.614485323873417, 13.703336344550703, 14.059553426925493, 14.148404447602779] 

這是一個函數輸入的例子 - 表示所需多邊形頂點的四個3D點。

然而,衝浪功能上輸入失敗:

File "/usr/local/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 679, in __call_internal__ 
    aspect_ratios = [(zf - zi)/(xf - xi), (zf - zi)/(yf - yi)] 
ZeroDivisionError: float division by zero 

注:我能夠渲染mayavi.mlab.imshow圖像,但我覺得很容易出錯和繁瑣的指定圖像姿勢和尺寸的軸角和尺度矢量,所以我不願意接受指向這個方向的答案。

非常感謝您的幫助。

+0

http:// stackoverflow。com/help/how-to-ask –

+0

我建議你儘量減少這個問題,這樣你就有了一個更簡單的例子,問題依然存在。如果問題的根源仍然沒有解決,請完整提供數據和代碼,以便人們更容易地重現您的問題。這將有助於解決因版本或硬件更改而導致的問題。 –

+0

@DebanjanBasu,謝謝。其實,這個問題對我來說依然是相關的。我會重新提出問題並進行更新。 – wf34

回答

1

我得去畫紋理相機與mayavi! 見:

enter image description here

雖然我已經做到了用mlab.imshow,所以也許這是你不想要的答案的類型的方式。看到此代碼:

obj=mlab.imshow(image.T) 
obj.actor.orientation = np.rad2deg(camera.w_Rt_c.euler) 
pp = np.array([0, 0, camera.f])[:,None] 
w_pp = camera.w_Rt_c.forward(pp) 
obj.actor.position = w_pp.ravel() 
obj.actor.scale = [0.8, 0.8, 0.8] 

圖像是(N,M)numpy的陣列,由於某種原因imshow將顯示圖像旋轉90度,這就是爲什麼我轉置它。

obj.actor.orientation期望偏航,俯仰,滾動角度是度數。圖像的旋轉是各個旋轉矩陣Rx(yaw)* Ry(pitch)* Rz(roll)的乘積。在代碼中,我使用相機來拍攝我的相機類的世界歐拉角(目前無法共享該代碼)。

圖像的位置設置爲我的相機的主點將被轉換爲世界座標的3d位置。

爲什麼比例因子是0.8是一個謎,如果我把它留給1圖像平面看起來比截錐體大?

我將上述內容封裝在一個需要相機和圖像的類中,並在給定相機的位置和方向繪製截頭體和圖像。

+0

儘管imshow方法不太有利,但我會使用您的示例和修補程序多一點。在收到滿意的結果後,我會接受。 – wf34