对象跟踪:MATLAB与Python Numpy

hjw*_*ide 10 python matlab tracking numpy video-processing

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

我正在尝试做一些研究来决定是否应该使用MATLAB或使用Python Numpy(数值Python).我考虑的一些因素:

1.)经验

我在两者方面都有合理的经验,但也许有更多使用Numpy的图像处理经验.但是,我总是发现MATLAB非常直观且易于掌握.

2.)实时能力

我的选择能够支持从外部摄像机实时获取视频数据,这一点非常重要.我发现MATLAB的这个链接显示了如何做到这一点.我确信Python可能也是如此,也许使用OpenCV库?

3.)表现

我听说过,虽然从未使用过,但MATLAB可以轻松地在多个内核之间分离独立的计算.我认为这会非常有用,我不确定Numpy是否也同样简单?

4.)价格

我知道有一个与MATLAB相关的成本,但我将在一所大学工作,因此可以访问完整的MATLAB而不需要任何成本,因此价格不是一个因素.

我非常感谢任何做过类似事情的人的任何意见,以及你的经历.谢谢!

tac*_*ell 7

我会推荐python.

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

如果你希望在c/c ++中使用代码的任何部分,我肯定会推荐python.mex界面有效,但如果你的构建变得复杂/大,那就开始变得很痛苦,而且我从未理清如何有效地调试它.我也很难用mex +分配大块与matlab的内存管理交互(我无法解决这个问题是驱使我切换的原因).

作为旁注/自我推销,我在C++中使用Crocker-Grier (使用swig包装器)和纯python.


Ori*_*eto 7

Python(带有NumPy,SciPy和MatPlotLib)是新的Matlab.所以我强烈建议使用Python而不是Matlab.

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

这是Python和Matlab的简短pro/con列表

Python专业人士:

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

Python缺点:

  • 可能很难安装(特别是OS X中的某些模块)
  • 绘图操作不像Matlab那样好/易,特别是3D绘图或动画
  • 它仍然是一种脚本语言,因此只能用于(快速)原型设计
  • Python不是为多核编程而设计的

Matlab专业人士:

  • 非常容易安装
  • 强大的工具箱(例如SignalProcessing,Systems Biology)
  • 只要您购买许可证,就可以获得统一的文档和个性化支持
  • 容易拥有情节动画和交互式图形(我认为这对于运行实验非常有用)

Matlab缺点:

  • 不是免费的(而且很贵)
  • 基于Java + X11,看起来非常难看(好吧,我接受我完全有偏见)
  • 难以编写大型和可扩展的程序
  • 很多Matlab用户都在转向Python :)

  • 谢谢!今天我和更多的人交谈了,似乎我将使用Python. (3认同)

den*_*iro 5

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

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

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

  4. 没有意见.

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

我认为最后的决定必须是,如果你必须/可以实时运行你的算法我怀疑在Matlab,但这取决于你计划使用什么方法.

  • 许多人倾向于使用过多的脚本,在我看来,由于名称冲突和依赖性,使得重用这些代码非常困难.此外,很难强制执行数据结构(例如输入数据),这意味着大多数用户必须找出他们如何构造输入数据(是行还是列向量等等).我不是说重用好的Matlab代码是不可能的,但是有很多不好的代码,人们在编码时往往不考虑可重用性. (2认同)