对于当前项目,我必须使用并对基质中提供的信息进行数学化,以及使用ITK/VTK功能来显示医疗信息/渲染.基本上我必须以(我猜)50/50的方式使用matlab例程和VTK/ITK.问题是,由于我必须使用两者,我想提前决定使用哪种方法:
将ITK和VTK库导入matlab: 为此,您必须构建自己的VTK作为开始.然后,通过这个例子,整个想法是在.mex文件中编写VTK代码.这些文件可以在其中编写c代码作为matlab的函数.
在ITK/VTK环境中导入matlab函数:为此,我将使用一种语言(可能是python)来进行矩阵计算.我可以利用Numpy.这是一个用于Python的matlab类计算模块,它将vtk数据转换为numpy数据,我可以利用matplotlib制作绘图.
优点/缺点ITK/VTK在MATLAB导入
+容易做MATLAB计算和绘图
+ MATLAB是最强大的工具之一与矩阵的工作
之前有+用MATLAB(主观)
-必须安装有MATLAB
-运行MATLAB负担你的电脑
在ITK/VTK环境中导入的优缺点matlab
+无需安装matlab
+减少PC的应变,并且由于医疗数据集需要很多来自你的电脑,这很好.
在这种情况下已经设置了+ ITK/VTK环境(目前使用这种方式,但从未使用matlab/matrices .mat)
- 听说过以这种方式很难进行matlab计算的故事.有点凌乱.
- 较少的python经验(与matlab 0结合使用)
所以...?总结
实际上,我正在寻找那些在两种环境中工作的人,但是因为我认为有这么几种,我喜欢听到建议在做出最终选择之前要寻找什么.它需要花费大量时间才能以我需要的方式工作,因此尝试两者都是浪费时间(也有截止日期).
额外的注意事项
- 我已经尝试使用Simulink for matlab和VTK/ITK库,但我不喜欢它.
- 虽然问题的解决方案当然是我能够到达的最佳方式,但我也很高兴有经验的人做出与此基本相同的选择.做出这样的选择时需要关注的关键点是什么?我错过了我的优缺点关键点吗?
我在 VTK 中有一个图像,正在使用 vtkImageViewer2 查看,并且我想放大用户单击的点。我在 Java 工作。有谁知道如何做到这一点?
谢谢
我正在使用 ActiViz .NET (VTK),但遇到了一个小问题。
当我注册一个事件(例如 LeftButtonReleaseEvt)时,我无法找到我单击的 RenderWindowControl 上的位置。该事件被称为。
...
rwcVtk.RenderWindow.GetInteractor().LeftButtonPressEvt += new vtkObject.vtkObjectEventHandler(RenderWindow_LeftButtonReleaseEvt);
}
void RenderWindow_LeftButtonReleaseEvt(vtkObject sender, vtkObjectEventArgs e)
{
//TODO: Where did i click?
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我吗?我认为没有太多关于这方面的文档。
目前很容易使用python和matplotlib生成2D streamplot,因为最近由Tom Flannaghan和Tony Yu将matamplot插入matplotlib.
虽然可以使用matplotlib生成某些类型的3D绘图,但目前不支持3D streamplots.然而,python绘图程序mayavi(提供基于vtk的绘图的python接口)能够使用其flow()函数的3D streamplots .
我已经创建了一个简单的python模块来对2D和3D中的数据进行流绘图,在3D数据集中没有Z斜率(所有dZ = 0),以演示我在mayavi与matplotlib有效匹配数据时所面临的绘图挑战在xy平面上.注释的代码和结果图如下所示:
import numpy, matplotlib, mayavi, matplotlib.pyplot, mayavi.mlab
#for now, let's produce artificial streamline data sets for 2D & 3D cases where x and y change by +1 at each point, while Z changes by 0 at each point:
#2D data first:
x = numpy.ones((10,10))
y = numpy.ones((10,10))
#and a corresponding meshgrid:
Y,X = numpy.mgrid[-10:10:10j,-10:10:10j]
#now 3D data with Z = 0 (i.e., I want to be …Run Code Online (Sandbox Code Playgroud) 我在理解 VTK 所涉及的转换方面遇到了深刻的问题。OpenGL 有相当好的文档,我的印象是 VTK 与 OpenGL 非常相似(在很多方面都是如此)。但当谈到转型时,情况似乎完全不同。
这是一个关于所涉及的变换的很好的 OpenGL 文档: http://www.songho.ca/opengl/gl_transform.html
OpenGL中的透视投影矩阵为:

我想看看在 VTK 中应用这个公式是否会给出 VTK 的投影矩阵(通过与 VTK 投影矩阵交叉检查)。
相关相机和渲染器参数:
camera->SetPosition(0,0,20);
camera->SetFocalPoint(0,0,0);
double crSet[2] = {10, 1000};
renderer->GetActiveCamera()->SetClippingRange(crSet);
double windowSize[2];
renderWindow->SetSize(1280,720);
renderWindowInteractor->GetSize(windowSize);
proj = renderer->GetActiveCamera()->GetProjectionTransformMatrix(windowSize[0]/windowSize[1], crSet[0], crSet[1]);
Run Code Online (Sandbox Code Playgroud)
我为此配置得到的投影变换矩阵是:

投影矩阵的 (3,3) 和 (3,4) 值(假设行和列的索引为 1 到 4)应为 - (f+n)/(fn) 和 -2*f*n /(fn) 分别。在我的 VTK 相机设置中,nearz 为 10,farz 为 1000,因此我应该在矩阵的 (3,3) 和 (3,4) 位置分别得到 -1.020 和 -20.20。但它是-1010和-10000。
我已经更改了剪切范围值以查看更改,并且 (3,3) 位置始终接近 z+farz,这对我来说没有任何意义。另外,如果有人能解释为什么 (1,1) 和 (2,2) 位置上的值是 3.7320,那就太好了。当我更改渲染器窗口的窗口大小时,该值不会改变。让我很困惑。
我在 VTKCamera 类参考中看到 GetProjectionTransformMatrix() 返回从相机坐标映射到视口坐标的变换矩阵。 …
我可以通过调用来定义渲染器的背景颜色
renderer = vtk.vtkRenderer()
renderer.SetBackground(0,255,0)
Run Code Online (Sandbox Code Playgroud)
[![在此处输入图像描述][1]][1]
我的问题:
可以设置背景的不透明度吗?
您可以在我的示例图像中看到我的问题(具有多个视口)。我可以通过简单地使用透明背景来摆脱这种“切割”......
提前致谢!
我试图使用 VTK 找到 3D 模型渲染图像的 2D 绑定框。有什么可以自动为我找到的吗?最后我想要这样的东西(但使用飞机 3D 模型的渲染图像而不是真实的图像): http ://host.robots.ox.ac.uk/pascal/VOC/voc2007/examples/飞机_03.jpg
如果没有,我将不得不逐像素地选取点并自己找到极值点。只是想知道是否有什么东西可以自动为我做这件事。
我需要在 Windows 10 计算机上的 python 中使用VTK库(版本 5.10,因为我正在处理现有代码),但我无法成功导入它DLLImport:
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import vtk
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\vtk\__init__.py", line 139, in <module>
__helper.refine_import_err('qvtk', 'vtkQtPython', exc)
File "C:\Python27\lib\site-packages\vtk\__helper.py", line 32, in refine_import_err
raise LinkError, str(exc)
vtk.__helper.LinkError: DLL load failed: The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)
我已经安装了32位版本的PyQt4 4.11.4和 …
假设我有一个向量场 u,其分量为 ux、uy 和 uz,定义在空间 rx、ry 和 rz 中的(非结构化)位置。
我想要的只是用 VTK 格式存储这个向量场,即用 libvtk 中的“vtkwriter”类来存储 Paraview 的可视化。
我认为我得到了正确合并位置的代码,但不知何故我无法弄清楚如何合并数据:
#include <vtkPoints.h>
#include <vtkPolyDataWriter.h>
#include <vtkSmartPointer.h>
void write_file (double* rx, double* ry, double* rz,
double* ux, double* uy, double* uz,
int n, const char* filename)
{
vtkSmartPointer<vtkPoints> points =
vtkSmartPointer<vtkPoints>::New ();
points->SetNumberOfPoints(n);
for (int i = 0; i < n; ++i) {
points->SetPoint(i, rx[i], ry[i], rz[i]);
}
// how to incorporate the vector field u?
vtkSmartPointer<vtkPolyDataWriter> writer =
vtkSmartPointer<vtkPolyDataWriter>::New ();
writer->setFileName (filename);
// …Run Code Online (Sandbox Code Playgroud) 我已经尝试安装mayavi好几天了,但没有结果。我正在使用spyder和anaconda。我可以在spyder上导入mayavi,没有问题,但是当我尝试导入vtk或from mayavi import mlab时,内核死了。我读了很多关于这个主题的文章,但没有找到有效的解决方案。我尝试了所有后端(在线、Qt4 和 Qt5),但没有结果。我对 Python 还很陌生,所以我不太确定我是否正确完成了所有安装。
要安装 mayavi 我使用:
$conda config --add channels conda-forge
$conda install mayavi
我也尝试使用
$ pip install mayavi
,但遇到另一个无法解决的错误:命令“python setup.py Egg_info”失败,错误代码为1。(我也尝试解决该问题,但没有执行所有建议的更新)
我尝试这些测试:
$nosetests -v tvtk/tests 错误:失败:OSError
$nosetests -v mayavi 好的
如果有人有解决方案那就太好了!