2009-05-26 94 views
5

对于当前的项目,我必须使用矩阵中提供的信息进行数学运算,并使用ITK/VTK函数显示医疗信息/呈现。基本上我必须以(我猜)50/50的方式使用matlab例程和VTK/ITK。问题是,因为我同时使用,我想提前来决定使用哪种方法:将ITK/VTK导入到Matlab或Matlab到VTK/ITK环境中?

  1. 导入ITK和VTK库到MATLAB: 对于这一点,你必须建立自己的VTK作为开始。然后,通过this例如,整个想法是在.mex文件中编写VTK代码。这些是 中的文件,您可以将它们编程为matlab的函数。

  2. 在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在与VTK/ITK库结合MATLAB,但我不喜欢它。
- 虽然问题的解决方案当然是最好的我可以在这里我也很高兴与有经验的人做出选择,这是基于相同的这一个。在做出这样的选择时要注意哪些关键点?我在利弊中错过了一个关键点吗?

回答

2

VTK附带Python绑定(one description)。我假设ITK也是。如果你不已经有很多的Matlab代码,我猜你有一个更容易的时间无缝集成VTK/ITK用python的numpy的,matplotlib等

编辑:

在我看来,非平凡的MEX函数是一个很难写的东西。权衡通常可以为每项任务编写新的MEX函数,或花费额外的时间编写大量的接口代码。

根据你在做什么,scipy(包括matplotlib,numpy等一系列python包)可以完成很多Matlab的功能。有微妙的差异和各种折衷。一旦你掌握了它,自动广播就非常有用。 MathWorks最近添加了BSXFUN,但它是自动的numpy。如果你在稀疏矩阵方面做了很多工作或者调用了很多更高级的线性代数函数,请检查一下numpy文档,看看你需要的东西是否存在。

根据你迄今为止对环境所做的工作,我建议尝试Python方法几周。看看它的绘图能力和​​数学函数是否足以满足您的需求。由于文档不像Matlab那么成熟,所以预计在开始的时候会碰壁。

+0

我已经有一个工作环境,我有Python程序模块以及ITK/VTK导入。对我来说问题在于你做出的最后猜测,是否真的更容易,为什么。 – bastijn 2009-05-28 05:41:08

1

我花了一些时间来测试,但缔结一项关于这个问题的两个版本:

我选择使用Python与numpy的/ SciPy的和matplotlib结合。我选择使用它的唯一原因只有一个。当您导入ITK和VTK在Matlab你必须使用墨西哥函数编程的C代码,这些MEX文件是在常规的方式如下:。

alt text http://www.bastijn.nl/zooi/routine.png

现在,当程序涉及到指向mex文件所在的位置,它将控制权交给此mex文件,并将其作为一个函数触发,mex文件就像一个黑盒子。在Mex文件完成它的事情之后,它将手控制回matlab并且例程继续。但是,当Mex文件被触发或在matlab的这个mex文件中存取变量时,你不能做任何matlab操作。所以不可能运行一些itk/vtk代码,注意它不起作用,并且改变mex文件中使用的一些变量(在那里创建,但是它们也会因为黑盒只返回结果而死去)速度测试什么工作。你必须重新启动整个mex函数。

这是一个主要的缺点,因为您需要重新运行完整的mex文件(C函数)以进行所有的小改动。目前正在忙于修复这个主要的颈缩,但由于他们还没有准备好,现在我确实需要它,所以我选择了参加python巡回演唱会。

2

这可能有所帮助:mlabwrap是一种相当复杂的方式来调用Matlab窗体Python。 http://mlabwrap.sourceforge.net/

+0

哇,谢谢你的回复:)。这看起来有希望。 – bastijn 2009-08-20 09:07:10

1

巴斯金,你做出了正确的选择:Python规则!

一些详细信息:

对于选择1号,我写了这个: http://github.com/thewtex/matlab-itk-import 但是,正如你提到的,它是劣质的选择。

以下是选项2的一些链接: Mayavi2的mlab具有很好的在VTK和numpy之间切换的能力。

WrapITK允许你用Python编写ITK流水线,并且你可以通过PyBuffer外部项目与Numpy来回访问。