10

我将很快开始最后一年的工程项目,包括实时跟踪在 2D 表面上移动的物体。我的算法将使用特征提取来注册对象。

我正在尝试做一些研究来决定我应该使用 MATLAB 还是使用 Python Numpy (Numerical Python)。我考虑的一些因素:

1.) 经验

我在这两个方面都有相当的经验,但在使用 Numpy 进行图像处理方面可能更有经验。但是,我一直发现 MATLAB 非常直观且易于上手。

2.) 实时能力

我的选择能够支持从外部摄像头实时采集视频数据是非常重要的。我找到了MATLAB的这个链接,展示了如何做到这一点。我确信 Python 也有可能,也许使用 OpenCV 库?

3.) 性能

我听说,虽然从未使用过,但 MATLAB 可以轻松地将独立计算拆分到多个内核。我应该认为这会非常有用,我不确定 Numpy 是否同样简单?

4.) 价格

我知道与 MATLAB 相关的成本,但我将在一所大学工作,因此可以使用完整的 MATLAB 而无需自己支付任何费用,因此价格不是一个因素。

我将非常感谢任何做过类似事情的人提供的任何意见,以及您的经验。谢谢!

4

4 回答 4

7

Python(带有 NumPy、SciPy 和 MatPlotLib)是新的 Matlab。所以我强烈推荐 Python 而不是 Matlab。

一年多前我做出了改变,我对结果非常满意。

这是 Python 和 Matlab 的简短优缺点列表

Python 优点:

  • 面向对象
  • 易于编写大型和“真实”的程序
  • 开源(因此完全免费使用)
  • 快速(大多数重型计算算法都有一个 python 包装器来连接 C 库,例如 NumPy、SciPy、SciKits、libSVM、libLINEAR)
  • 舒适的环境,高度可配置(iPython,VIM 的 python 模块,...)
  • 快速增长的 Python 用户社区。大量的文档和愿意提供帮助的人

Python 缺点:

  • 安装起来可能很痛苦(尤其是 OS X 中的某些模块)
  • 绘图操作不如 Matlab 好/容易,尤其是 3D 绘图或动画
  • 它仍然是一种脚本语言,因此仅将其用于(快速)原型设计
  • Python 不是为多核编程而设计的

Matlab 优点:

  • 非常容易安装
  • 强大的工具箱(例如信号处理、系统生物学)
  • 只要您购买许可证,即可获得统一的文档和个性化支持
  • 易于绘制动画和交互式图形(我发现这对于运行实验非常有用)

Matlab 缺点:

  • 不是免费的(而且很贵)
  • 基于 Java + X11,看起来非常难看(好吧,我承认我在这里完全有偏见)
  • 难以编写大型且可扩展的程序
  • 许多 Matlab 用户正在切换到 Python :)
于 2012-06-21T18:04:58.893 回答
7

我会推荐python。

我通过我的博士学位从 MATLAB -> python 切换了大约 1/2,并且不后悔。最简单地说,python 是一种更好的语言,具有真实的对象等。

如果您希望在 c/c++ 中执行代码的任何部分,我肯定会推荐 python。mex 接口可以工作,但是如果你的构建变得复杂/大,它就会开始变得很痛苦,我从来没有弄清楚如何有效地调试它。mex+分配与matlab的内存管理交互的大块时我也遇到了很大的困难(我无法解决这个问题是促使我切换的原因)。

作为旁注/自我宣传,我有C++中的 Crocker-Grier (带有 swig 包装器)和纯python

于 2012-06-21T12:21:42.833 回答
5
  1. 如果您对两种语言都有经验,那么这并不是一个真正的决策标准。

  2. Matlab 在处理实时设置方面存在问题,尤其是因为大多数计算机视觉算法都非常昂贵。这是使用久经考验的库(例如 OpenCV)的优势,您将使用的许多算法都可以有效地实现。Matlab 提供了将代码编译成 Mex 文件的可能性,但这需要大量工作。

  3. Matlab 具有并行 for 循环parfor,这使得多核处理变得容易(或至少更容易)。但问题是这是否足以获得实时速度。

  4. 没有意见。

  5. Matlab 的主要优点是由于其良好的文档,您将很快获得运行程序。但是我发现 Matlab 的代码可重用性很差,除非你非常重视它。

我认为最终决定必须是您是否必须/可以实时运行您的算法,我在 Matlab 中对此表示怀疑,但这取决于您计划使用的方法。

于 2012-06-21T08:25:13.087 回答
4

其他人发表了很多很棒的评论(我之前在另一个答案https://stackoverflow.com/a/5065585/392949中对此主题发表过意见),但我只想指出 Python 有很多非常优秀的用于并行计算/跨多个内核拆分工作的工具。这是一个简短但绝不是全面的列表:

如果您需要连接外部 C 库或编写 C 扩展,您可能还会发现 cython 与 Matlab 提供的工具相比是一个非常优越的工具,并且它内置了出色的 numpy 支持。

这里有一个包含许多其他选项的列表: http ://wiki.python.org/moin/ParallelProcessing

于 2012-06-22T00:57:41.217 回答