物体跟踪:MATLAB与Python Numpy的对比

10

我即将开始进行一项最终年度工程项目,该项目包括对二维表面上运动的物体进行实时跟踪。我的算法将使用特征提取来注册这些物体。

我正在进行一些研究以决定是否应该使用MATLAB还是Python Numpy(数值Python)。以下是我考虑的一些因素:

1.) 经验

我在两个领域都有相当的经验,但在使用Numpy进行图像处理方面可能更有经验。不过,我始终觉得MATLAB非常直观和易于掌握。

2.) 实时性能

很重要的一点是,我的选择必须支持从外部摄像头实时获取视频数据。我在此链接中找到了如何使用MATLAB实现此功能的说明。我相信同样可以使用OpenCV库来完成Python的实现吧?

3.) 性能

我听说MATLAB可以轻松地将独立的计算分配到多个核心上。我认为这非常有用,但我不确定是否同样适用于Numpy?

4.) 价格

我知道使用MATLAB是需要付费的,但我将在大学工作,因此可以免费使用完整版本的MATLAB,所以价格不是一个因素。

如果您做过类似的工作,并且愿意分享经验,我将非常感激任何来自您的建议!


2
就毕业后的就业能力而言,如果您打算从事工程实践,我认为Matlab是一个更好的选择。 - High Performance Mark
2
我认为这高度取决于你工作的地方。最好两者都知道。 - Benjamin
4个回答

7
我推荐使用Python。
我在攻读博士学位的过程中从MATLAB转向了Python,并且没有后悔过。简单来说,Python是一种更好的语言,具有真正的对象等特点。
如果您希望在代码中使用C/C++的任何部分,我绝对建议您使用Python。MEX接口可以工作,但如果您的构建变得复杂/庞大,它就会变得很麻烦,而我从未解决如何有效地调试它的问题。我还曾因为MEX和分配大块内存与MATLAB的内存管理相互作用而遇到了很大的困难(我无法解决这个问题,这也是我转换的原因)。
顺便说一句/自我推广,我在C++中使用了Crocker-Grier(带有swig包装器),并且还有纯Python版本。

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

3
谢谢!我今天又和一些人交谈了,看来我会选择Python。 - hjweide
很高兴听到这个消息。祝你编程愉快! - Oriol Nieto

5
  1. 如果您两种语言都有经验,那么这不是一个决策标准。

  2. Matlab在实时设置方面存在问题,特别是由于大多数计算机视觉算法非常昂贵。这就是使用经过测试的库(如OpenCV)的优点,其中许多算法已经得到有效实现。Matlab提供了将代码编译成Mex文件的可能性,但这需要很多工作。

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

  4. 无可奉告。

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

我认为最终决策必须是您是否必须/能够实时运行算法,但我对Matlab的实时性存疑,这取决于您计划使用的方法。


谢谢您的回答!但是,当您说Matlab中的代码可重用性不好时,您是什么意思?为什么会这样? - hjweide
2
许多人倾向于过度使用脚本,我认为这使得由于名称冲突和依赖关系而极难重用该代码。同时,很难强制执行数据结构(例如输入数据),这意味着大多数用户必须找出如何构造输入数据(是行向量还是列向量等)。我并不是说重用优秀的Matlab代码是不可能的,但存在很多糟糕的代码,人们编写代码时往往不考虑可重用性。 - denahiro

4

其他人已经发表了很多好的评论(我之前在另一个答案中也谈到过这个话题https://dev59.com/gW445IYBdhLWcg3wDWCc#5065585),但我想指出Python有许多非常出色的工具,可以实现并行计算/分配工作到多个核心。以下是一个简短而不全面的列表:

你会发现,如果你需要与外部C库进行交互或编写C扩展,cython比Matlab提供的工具要好得多,并且它内置了出色的numpy支持。以下是其他选项列表:http://wiki.python.org/moin/ParallelProcessing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接