2016-07-01 60 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