【问题标题】:Object Tracking: MATLAB vs. Python Numpy对象跟踪:MATLAB 与 Python Numpy
【发布时间】:2012-06-21 07:47:42
【问题描述】:

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

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

1.) 经验

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

2.) 实时能力

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

3.) 性能

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

4.) 价格

我知道使用 MATLAB 会产生成本,但我将在大学工作,因此可以免费使用完整的 MATLAB,因此价格不是一个因素。

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

【问题讨论】:

  • 就毕业后的就业能力而言,如果您打算从事工程学,我认为 Matlab 是一个更好的选择。
  • 我认为这很大程度上取决于你在哪里工作。最好两者都知道。

标签: python matlab numpy tracking video-processing


【解决方案1】:

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 :)

【讨论】:

  • 谢谢!我今天和更多人交谈,看来我将使用 Python。
  • 我很高兴听到这个消息。编程愉快!
【解决方案2】:

我会推荐 python。

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

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

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

【讨论】:

    【解决方案3】:
    1. 如果您对两种语言都有经验,这并不是真正的决策标准。

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

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

    4. 无评论。

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

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

    【讨论】:

    • 感谢您的意见!但是,当您说 Matlab 的代码可重用性不好时,您是什么意思?为什么会这样?
    • 许多人倾向于过度使用脚本,在我看来,由于名称冲突和依赖关系,重用此类代码非常困难。此外,很难强制执行数据结构(例如输入数据),这意味着大多数用户必须找出他们必须如何构造输入数据(是行向量还是列向量?等等)。我并不是说不可能重用好的 Matlab 代码,但是周围有很多不好的代码,人们在编码时往往不会考虑可重用性。
    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 1970-01-01
      • 2011-09-25
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      相关资源
      最近更新 更多