7

我正在将VTK统一网格读入python。当我在Paraview中可视化数据的切片时,我得到了以下(正确的)图像:

VTK屏幕截图

然后,我使用以下脚本通过numpy和pylab可视化切片:

导入vtk从vtk.util.numpy_support导入vtk_to_numpy进口塔架imr=vtk.vtkXML图像数据读取器()imr公司。设置文件名('flow.vti')imr公司。更新()im=最小值。获取输出()nx,ny,nz=最小值。获取维度()原始=im。获取原始()范围=im。获取范围()间距=im。获取间距()流量Vtk=im。获取点数据()。GetArray(“|flow|”)流量=vtk_to_numpy(flowVtk).重塑(nx,ny,nz)#底部z切片flowZ0=流量[:,:,0]#设置范围,使轴单位为物理单位img=pylab.imshow(flowZ0,范围=[orig[0],orig[0]+范围[1]*间距[0],orig[1],orig[1]+范围[3]*间距[1],cmap=pylab.gray())img.set_clim(vmin=0,vmax=1000)pylab.show()

pylab输出

这似乎是不同步的。我尝试在中重新排序维度重塑(…),它做了一些事情,但从未显示实际应该显示的数据。

有什么明显的问题吗?

编辑:我也试过了重塑((nx,ny,nz),顺序=“F”)(fortran排序),现在我得到了一个更好的图像(使用喷射彩色地图以获得更好的清晰度)用fortran排序进行整形这几乎是正确的,但数据被可疑地旋转了90°,另外我想得到一些权威性的解释,说明使用哪个命令以及为什么(VTK内部使用哪个命令?)。

EDIT2(编辑2):要获得与Paraview中相同的视图,我必须这样做皮拉布·伊姆秀(np.rot90(流程Z0)); 不知道为什么,所以问题仍然存在:

fortran并旋转90度

5
  • 什么是形状vtk_to_numpy(流量vtk)? 它不应该已经返回具有正确形状的数组吗?
    – 第个
    评论 2015年6月22日13:39
  • 1
    @第条:vtk _空返回1d数组(这似乎也是正确的,SO中的其他示例也表明了这一点,这些示例总是在以后重新整形)。 评论 2015年6月22日15:18
  • 您是否也尝试过在paraview中查看电子表格视图中的数据?另外,为了更加确定,您还可以尝试GetArray('Flow')而不是GetArray
    – 图书馆
    评论 2015年6月22日15:32
  • @lib:谢谢GetArray(“|flow |”)提示,它使我在这里的脚本更容易。电子表格显示得不多,数据太多,无法理解。我添加了一个关于排序的编辑,这可能是罪魁祸首。 评论 2015年6月22日16:23
  • flow=vtk_to_numpy(flowVtk).resmorge(nz,ny,nx)我认为数组的顺序是z,y,x,而不是x,y,z 评论 2017年3月30日17:44

0

重置为默认值

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.