【问题标题】:Import ITK/VTK into Matlab or Matlab into VTK/ITK environment?将 ITK/VTK 导入 Matlab 或将 Matlab 导入 VTK/ITK 环境?
【发布时间】:2010-10-28 23:07:34
【问题描述】:

对于当前项目,我必须使用矩阵中提供的信息并对其进行数学运算,并使用 ITK/VTK 函数来显示医疗信息/渲染。基本上我必须以(我猜)50/50 的方式同时使用 matlab 例程和 VTK/ITK。问题是,由于我必须同时使用这两种方法,所以我想提前决定使用哪种方法:

  1. 将 ITK 和 VTK 库导入 matlab: 为此,您必须首先构建自己的 VTK。然后,通过this 示例,整个想法是在 .mex 文件中编写您的 VTK 代码。这些是文件 您可以将 c 代码编程为 matlab 的功能。

  2. 在 ITK/VTK 环境中导入 matlab 函数: 为此,我会使用一种语言(可能是 python)来进行矩阵计算。我可以使用 Numpy。这是 Python 中的 matlab 类计算模块,可以将 vtk 数据转换为 numpy 数据,我可以使用 matplotlib 来制作绘图。

在 matlab 中导入 ITK/VTK 的优缺点
+ 易于进行 matlab 计算和绘图
+ matlab 是处理矩阵最强大的工具之一
+ 以前用过matlab(主观)

- 必须安装 matlab
- 运行 matlab 会给你的电脑带来负担

在 ITK/VTK 环境中导入 matlab 的优缺点
+ 无需安装 matlab
+ 对 PC 的压力较小,而且由于医疗数据集需要您的 PC 进行大量操作,这很好。
+ 在这种情况下已经设置了 ITK/VTK 环境(目前以这种方式使用,但从未使用 matlab/matrices .mat)

- 听说过很难用这种方式进行 matlab 计算的故事。有点乱。
- 较少的python经验(结合matlab 0)

所以...?结束
实际上,我正在寻找一直在这两种环境之一中工作的人,但由于我认为其中有这么几个人,所以我喜欢在做出最终选择之前听取建议。让它以我需要的方式工作将花费大量时间,因此尝试两者都是浪费时间(也有截止日期)。

补充说明
- 我已尝试将 Simulink for matlab 与 VTK/ITK 库结合使用,但我不喜欢它。
- 尽管问题的解决方案当然是我能得到的最好的解决方案,但我也很高兴人们在做出与此基本相同的选择方面有经验。做出这样的选择时要寻找哪些关键点?我是否错过了我的优缺点的关键点?

【问题讨论】:

    标签: matlab import development-environment vtk


    【解决方案1】:

    VTK 带有 Python 绑定 (one description)。我假设 ITK 也是如此。如果您在 Matlab 中还没有大量代码,我猜您会更轻松地将 VTK/ITK 与 python 的 numpy、matplotlib 等无缝集成。

    编辑:

    在我看来,非平凡的 MEX 函数写起来很痛苦。权衡通常是为每个任务编写新的 MEX 函数,或者花费额外的时间编写大量接口代码。

    根据您正在做的事情,scipy(包括 matplotlib、numpy 等的 python 包的捆绑包)做了很多 Matlab 所做的事情。存在细微的差异和各种权衡。一旦你掌握了它的窍门,自动广播就非常有用。 MathWorks 最近添加了 BSXFUN,但使用 numpy 是自动的。如果您正在使用稀疏矩阵进行大量工作或调用许多更高级的线性代数函数,请查看 numpy 文档以查看您需要的内容是否存在。

    根据您迄今为止对环境所做的工作,我建议您试用 Python 方法几周。看看它的绘图功能和数学函数是否足以满足您的需求。因为文档不像 Matlab 那样成熟,所以一开始可能会碰壁。

    【讨论】:

    • 我已经有一个工作环境,其中我有 python 程序模块以及 ITK/VTK 导入。对我来说,问题在于你最后的猜测,它真的更容易吗?为什么。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我花了一些时间来测试这两个版本,但最终得出结论:

      我选择将 python 与 numpy/scipy 和 matplotlib 结合使用。我选择使用它的主要原因只有一个。当您在 Matlab 中导入 itk 和 vtk 时,您必须使用 Mex 函数来编写您的 C 代码。这些 mex 文件以下列方式在例程中:

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

      现在,当例程到达 mex 文件所在的位置时,它会将控制权交给这个 mex 文件并像函数一样触发它,mex 文件就像一个黑盒子。在 Mex 文件完成它的工作后,它会将控制权交还给 matlab,然后程序继续。但是在触发 Mex 文件或从 matlab 访问此 mexfile 中的变量时,您不能执行任何 matlab 操作。所以不可能运行一些 itk/vtk 代码,注意它不起作用并改变 mex 文件中使用的一些变量(在那里创建,但它们也会死在那里,因为黑盒只返回你的结果)速度测试什么是有效的。您必须再次触发整个 mex 函数。

      这是一个主要缺点,因为您需要重新运行完整的 mex 文件(C 函数)才能进行所有小改动。正在忙着修复这个主要的限制,但由于他们还没有准备好,我现在确实需要它,所以我选择参加 python 之旅。

      【讨论】:

        【解决方案4】:

        Bastjin,您做出了正确的选择:Python 规则!

        更多信息:

        对于选项 1,我这样写: http://github.com/thewtex/matlab-itk-import 但是,正如您所提到的,这是次等选择。

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

        WrapITK 允许您在 Python 中编写 ITK 管道,并且您可以使用 Numpy 与在那里找到的 PyBuffer 外部项目来回切换。

        【讨论】:

          【解决方案5】:

          有点旧的帖子,但我只想提一下 matVTK (http://www.cir.meduniwien.ac.at/matvtk/)。这使您可以在 Matlab 中进行所有计算,然后使用 vtk 库绘制数据。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-06-14
            • 1970-01-01
            • 2023-03-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多