vtk>numpy数组的整形不正确?

2024-07-05 10:38:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

{1美元^

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

import vtk
from vtk.util.numpy_support import vtk_to_numpy
import pylab

imr=vtk.vtkXMLImageDataReader()
imr.SetFileName('flow.vti')
imr.Update()
im=imr.GetOutput()

nx,ny,nz=im.GetDimensions()
orig=im.GetOrigin()
extent=im.GetExtent()
spacing=im.GetSpacing()

flowVtk=im.GetPointData().GetArray("|flow|")
flow=vtk_to_numpy(flowVtk).reshape(nx,ny,nz)
# bottom z-slice
flowZ0=flow[:,:,0]
# set extent so that axes units are physical
img=pylab.imshow(flowZ0,extent=[orig[0],orig[0]+extent[1]*spacing[0],orig[1],orig[1]+extent[3]*spacing[1]],cmap=pylab.gray())
img.set_clim(vmin=0,vmax=1000)
pylab.show()

pylab output

看起来不太协调。我尝试在reshape(...)中重新排序维度,它做了一些事情,但它从未显示它实际应该显示的数据。在

有明显的问题吗?在

编辑:我也尝试了reshape((nx,ny,nz),order="F")(fortran排序),现在我得到了一个更好的图像(使用jet colormap以获得更好的清晰度)reshape with fortran ordering,这几乎是正确的,但是数据被可疑地旋转了90°,另外,我还想得到一些权威性的解释,说明使用哪个命令以及为什么(VTK内部使用哪个命令?)。在

EDIT2:为了获得与Paraview中相同的视图,我不得不做pylab.imshow(np.rot90(flowZ0));不知道为什么,所以问题仍然悬而未决:

fortran and rotated by 90 deg


Tags: importnumpyflowextentnxvtknzorig