标签: vtk

将3D numpy导出为VTK文件,以便在Paraview/Mayavi中查看

对于那些想要将简单的3D numpy数组(以及轴)导出到.vtk(或.vtr)文件以进行后期处理并在Paraview或Mayavi中显示的人,有一个名为PyEVTK的小模块就是这样做的.该模块支持结构化和非结构化数据等.不幸的是,即使代码在基于unix的系统中工作正常,我也无法在任何简单地使事情变得复杂的Windows安装上工作(不断崩溃).我联系了开发人员,但他的建议没有用

因此我的问题是:如何使用该from vtk.util import numpy_support函数将3D数组(函数本身不支持3D数组)导出到.vtk文件?有没有一种简单的方法可以在不创建vtkDatasets等的情况下完成它?

非常感谢!

numpy vtk paraview

6
推荐指数
2
解决办法
1万
查看次数

使用pvpython将数据文件类型读取器添加到paraview

我知道您可以将不同数据文件类型的读取器添加到paraview中,但是,所有人都在谈论在c ++中做很多VTK东西,以及(可能更糟)重新编译paraview以使其了解您的数据文件格式。另一方面,paraview还支持python中的脚本编写。也许是因为我对VTK不熟悉,但是对我来说,我只能从pvpython 操作 VTK对象。有什么方法可以使用pvpython动态地将阅读器添加到paraview中?

python vtk paraview pvpython

6
推荐指数
1
解决办法
779
查看次数

如何将vtkimage转换为numpy数组

我试图用python和python-vtk处理MHD图像文件.该文件放在谷歌驱动器:mhd.

我想将它转换为numpy数组,然后根据给定的值"500例如"分割它们.然后计算摘要信息.我按照这个
[post]的说明如何将3D vtkDataSet转换为numpy数组?
但它对我的情况不起作用.

import vtk
imageReader = vtk.vtkMetaImageReader()
imageReader.SetFileName(testfile1)
imageReader.Update() 
# from vtk.util.numpy_support import numpy_to_vtk, vtk_to_numpy does not work for the data type issue

image = imageReader.GetOutput()
# List the dimensions of the image, for example
print image.GetDimensions()
pixelspace = imageReader.GetPixelSpacing()
Run Code Online (Sandbox Code Playgroud)

这里出现错误:

AttributeError: GetPixelSpacing
Run Code Online (Sandbox Code Playgroud)

我怎么能实现转换?
当我完成数据拆分时,我怎么能将它们保存回mhd(或原始数据会更好?)

python arrays numpy image vtk

6
推荐指数
1
解决办法
2245
查看次数

AR与外部跟踪 - 对齐错误,值是正确的

我最近成功地使我的增强现实应用程序启动并运行接近预期.但是,我遇到了一个问题,即使值是正确的,增量仍然是一些翻译!因为我这将是美妙的得到这个解决如此接近到有这件事.

该系统利用具有红外反射标记的外部跟踪系统(Polaris Spectra立体光学跟踪器)来建立全局和参考帧.我有一个带有标记的LEGO结构,它是增强的目标,使用CAD创建的LEGO结构的3D模型,具有其真实世界对应物的精确规格,跟踪指针工具和带有世界参考的相机标记附在它上面.使用3D Slicer中的工具集将虚拟空间注册到现实世界中,这是一个医学成像软件,这是我正在开发的环境.下面是几张照片,只是为了澄清我正在处理的系统(May或可能与该问题无关).

乐高结构,带有跟踪摄像头和世界参考标记

场景图像1,右上方有跟踪器,左侧是注册棋盘

因此,简要概述每个标记/组件的确切作用(标记是黑色十字架与四个银球):

  • 世界标记(右侧第1个图像)是所有其他标记变换的参考框架.它固定在LEGO模型上,因此可以对LEGO的虚拟等效物进行单次注册.
  • 相机标记(第1张图像,附在相机上)跟踪相机.通过使用执行的外部校准将相机注册到该标记cv::solvePnP().
  • 棋盘用于使用跟踪指针(未示出)获取用于外部校准的数据cv::findChessboardCorners().

到目前为止,我一直在粉碎我的脸,反对系统背后的数学,直到最终排成一行.当我在估计相机原点到参考原点的位置移动时,两者之间的平移向量约为[0; 0; 0].因此,所有注册似乎都能正常工作.但是,当我运行我的应用程序时,我得到以下结果:

偏移示例1

偏移示例2

如您所见,增强中存在奇怪的偏移.我已经尝试去除图像上的失真校正(目前已完成cv::undistort()),但这只会使问题变得更糟.旋转都是正确的,正如我之前所说,翻译似乎都很好.我不知道是什么导致了这一点.当然,在渲染管道的实现过程中会出现很多问题,所以我主要是在这里发布这个,希望有人遇到过类似的问题.我已经使用基于网络摄像头的跟踪方法执行了这个项目,即使我使用了相同的渲染过程也没有遇到过这样的问题.

在这篇文章中,我故意有点模棱两可,以避免因为情况的细节而使读者陷入困境,因为我可以包含许多不同的细节.如果需要更多信息,我可以提供.任何建议或见解都会受到大力赞赏.谢谢!

opencv transformation transform augmented-reality vtk

6
推荐指数
1
解决办法
392
查看次数

替代Mayavi进行科学3D绘图

在没有令人满意的第一个答案和无法解释的降票后进行编辑

我需要绘制一个在3D网格中构造的标量字段,如下所示:

import numpy as np
from mayavi import mlab

dt = 10
X,Y,Z = np.mgrid[0:dt,0:dt,0:dt]

F = X**2+Y**2+Z**2

test = mlab.figure(size = (1024,768), bgcolor = (1,1,1), fgcolor = (0, 0, 0))
sf = mlab.pipeline.scalar_field(X,Y,Z,F)
vl = mlab.pipeline.volume(sf)
mlab.outline()
mlab.axes()
mlab.title('Can not change font size for this title')
mlab.xlabel('Only end ticks')
mlab.ylabel('No major ticks')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我想在Python中这样做,因为我用这种语言模拟了许多数据集,并且我希望能够在对模拟参数执行敏感度时快速将其可视化。

Mayavi似乎为科学3d绘图提供了非常标准的例程。但是,在出版物中交流这些图时,没有非常基本的图自定义设置,例如轴上的主要和次要刻度线。此外,迄今为止,所支持的那些非常基本的功能甚至无法正常工作(例如,参见字体大小错误示例和此处)。

Python中是否有任何体面且易于使用的科学3D绘图库?我曾尝试学习vtk,但网站示例似乎已经过时了(例如,无法运行的体积渲染示例,我尝试编辑许多行代码以使其正常运行),而其他人似乎都同意缺少该文档。

体面的科学绘图库的意思是:

  • 允许自定义轴,标签,标题等中的字体。
  • 可以编辑轴刻度间距(至少具有主要刻度)。
  • 可以添加颜色条
  • 有文档。

提前致谢!

python numpy vtk mayavi

6
推荐指数
1
解决办法
1973
查看次数

VTK无法使用vtkClipClosedSurface构造适当的闭合曲面

以下是我所做的粗略解释vtk:

  1. 创建一个表面(一个最小的表面,与它不太相关,但几何结构很重要:陀螺仪有两个完全相互关闭的迷宫).
  2. vtkClipClosedSurface切断迷宫之一,使我得到了没有打开的表面的对象.一个规则的表面看起来是这样的,有一个封闭的表面看起来是这样.

这是我的问题:对于我的结构的更复杂的版本,我得到这个: 右下方的破损表面 你能看到它在左上角是如何正常工作的,靠近右下方它会停止创建曲面吗?有时我在最后一部分也会得到非常奇怪的三角形.

根据我的理解,vtkClipClosedSurface从表面法线知道在哪里关闭表面和不在哪里.问题是:我的结构的法线很好,它们都指向正确的方向.如果仔细观察结构,你会注意到下部基本上是顶部的反转,它逐渐变化,都在一个表面上.

我尝试修改我的结构,然后切割许多东西vtkSmoothPolyDataFilter,vtkCleanPolyData或者vtkPolyDataNormals.我甚至试图用边界表面提取vtkFeatureEdges,这导致了更糟糕的结果.甚至vtkFillHolesFilter没有产生任何可接受的结果.我的表面看起来完美无瑕,足以创造一个边界.

我不知道还有什么可以尝试的.其他结构也会发生这种情况.使用CAD工具修复它是不可能的,因为它应该是开箱即用的.请帮我!

这是几何不能正确关闭曲面的几何示例.这次我使用的vtkFillHolesFilter结果是结构内部的表面,而它们只应占据te对象的边界. 带错误的另一个几何体

如果你需要更详细的我的管道纲要,这里有:

  1. 使用创建表面 mayavi.mlab.contour3d
  2. 获得PolyData通过提取actor.mapper.input
  3. 将格式转换tvtk为常规格式vtk
  4. vtkClipClosedSurface 使用平面集合切除部分结构(当平面集合与结构边界相同时会发生错误)
  5. 想象它

编辑:好的,这没有得到足够的重视,所以我构建了一个最小的,完整的,可验证的工作示例来重现行为:

import numpy as np
import vtk  # VTK version 7.0
from mayavi import mlab  # mayavi version 4.4.4
from mayavi.api import Engine, OffScreenEngine
from tvtk.api import tvtk


def schwarz_D(x, y, z, linear_term=0): …
Run Code Online (Sandbox Code Playgroud)

python triangulation vtk python-3.x mayavi

6
推荐指数
1
解决办法
728
查看次数

自 Mac OS 10.11 El Capitan 起具有系统完整性保护的 DYLD_LIBRARY_PATH 技巧的替代方案

这是我所拥有的:

  • Mac OS 10.11 El Capitan
  • python 2.7.12,从python.org下安装 /Library/Frameworks/Python.framework/
  • PyCharm 2016.2.3
  • vtk 7.1.0

这是我所做的:

  • 在本地构建一个 python 模块。就我而言,这是vtk。有关摘要,请参阅我配置 vtk 的 CMake 调用。

    cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release -DVTK_WRAP_PYTHON=ON -DBUILD_EXAMPLES=OFF -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX="/opt/dev/versions/vtk/vtk-7.1.0-shared" -DPYTHON_INCLUDE_DIR="/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/" -DPYTHON_LIBRARY="/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib"
    
    Run Code Online (Sandbox Code Playgroud)
  • 将 python 包安装在 python 可以找到的位置。就我而言,这是/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages 请注意,我需要DYLD_LIBRARY_PATH通过库所在的位置扩展/opt/dev/versions/vtk/vtk-7.1.0-shared/lib/.

  • 如果我从终端启动python,我可以成功导入vtk。

    import vtk
    v = vtk.vtkVersion()
    print v.GetVTKVersion()
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果我尝试在 PyCharm 的 python 控制台中导入 vtk,我会收到以下错误:

    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 2881, in run_code
        exec(code_obj, self.user_global_ns, self.user_ns)
      File "<ipython-input-2-b7e11aadda62>", line 1, in <module> …
    Run Code Online (Sandbox Code Playgroud)

python macos dyld vtk

6
推荐指数
1
解决办法
3634
查看次数

VTK - 如何使用单个actor渲染多个3d文本对象

我试图使用vtk对象vtkVectorText渲染文本.它适用于单个3d位置.我需要的是在一些3d(vtkPoint)点上方放置一个3d文本.我尝试用vtkTextActor3d做这个,但是每个文本对象都需要一个单独的actor,我最终得到了10k演员,当我试图旋转场景时,这是非常糟糕和滞后的.

我还尝试应用一些appendFilter来创建一个vtkVectorText数组,从appendFilter的对象获取非结构化网格,然后将其转换为polydata,以便使用我想要的点位置渲染非结构化网格.它没有显示任何内容,因为我无法弄清楚执行此操作的最佳方法是什么.

有人可以帮我弄这个吗?

这是我上一部分的代码:

vtkSmartPointer<vtkAppendFilter> appendFilter = vtkSmartPointer<vtkAppendFilter>::New();
//for each point
for (int i = 0; i < N;i++) {
    vtkSmartPointer<vtkVectorText> vecText = vtkSmartPointer<vtkVectorText>::New();
    vecText->SetText("My text, needs to appear multiple times");
    vecText->Update();
    appendFilter->AddInputData(vecText->GetOutput());
    appendFilter->Update();
}
vtkSmartPointer<vtkUnstructuredGrid> unstructuredGrid = appendFilter->GetOutput();
unstructuredGrid->Allocate(N);
unstructuredGrid->SetPoints(points);
vtkSmartPointer<vtkGeometryFilter> geometryFilter = vtkSmartPointer<vtkGeometryFilter>::New();
geometryFilter->SetInputData(unstructuredGrid);
geometryFilter->Update();
vtkSmartPointer<vtkPolyDataMapper> textMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
textMapper->SetInputConnection(geometryFilter->GetOutputPort());
vtkSmartPointer<vtkActor> textActor = vtkSmartPointer<vtkActor>::New();
textActor->SetMapper(textMapper);
textActor->GetProperty()->SetColor(0, 1, 0);

renderer->AddActor(textActor);
Run Code Online (Sandbox Code Playgroud)

3d vector-graphics vtk

6
推荐指数
1
解决办法
953
查看次数

使用 VTK Activiz C# 创建网格

我正在尝试使用VTKActiviz C#构建结构化网格(即网格/单元格)。此处发布的第一个示例展示了如何创建多维数据集。我已经运行良好。

现在我想将它扩展到 a grid/cell/mesh,我可以在其中指定 x、y 和 z 方向上的网格块数量以及gridblock长度,以生成结构化网格。

任何人都可以指出我正确的方向吗?这是我试图创建的简要图像:

在此处输入图片说明

c# vtk

6
推荐指数
0
解决办法
649
查看次数

Numpy uint8_t 数组到 vtkImageData

我正在尝试拍摄一个或三个通道的 2D 图像,并使用vtkImageActor. 据我所知,将被显示的当前帧可以通过调用来更新SetImageDatavtkImageActor并提供的一个实例vtkImageData

我已经设置了我的可视化器,如下所示。但是,我不确定如何vtkImageData从 numpy 数组构建对象(这将在updateFrames方法中进行)。我的 numpy 数组的类型是np.uint8_t.

我正在使用 VTK8.0、Python 3.6 和 Numpy 1.13.1

class VTKStreamVisualiser:
    def __init__(self, displayRGB):
        self.__displayRGB = displayRGB
        self.__started = False

        #Setup window.
        self.__renderWindow = vtk.vtkRenderWindow()
        self.__renderWindowInteractor = vtk.vtkRenderWindowInteractor()
        self.__renderWindowInteractor.SetRenderWindow(self.__renderWindow)

        #To store renderers and actors.
        self.__renderers = []
        self.__actors = []

        #Initialise to None to check if ready when invoking start()
        self.__depthImageData = None
        self.__rgbImageData = None

        #Determine viewport ranges for …
Run Code Online (Sandbox Code Playgroud)

python numpy vtk

6
推荐指数
2
解决办法
2452
查看次数