在计算机视觉项目中选择OpenCV还是MATLAB

  • 2020 年 2 月 20 日
  • 筆記

以下文章来源于新机器视觉,作者Vincy Davis

科学计算依赖于执行用不同编程语言编码的计算机算法。计算机视觉就是这样一个跨学科的科学领域,通常简称为CV。计算机视觉被用来开发能够自动完成诸如获取、处理、分析和理解数字图像等任务的技术。它也被用来从现实世界中提取高维数据来产生符号信息。简单地说,计算机视觉使计算机能够像人类一样看到、理解和处理图像和视频。

硬件、机器学习工具和框架的巨大进步导致了计算机视觉在物联网、制造业、医疗保健、安全等各个领域的实现。亚马逊、谷歌、微软和Facebook等主要科技公司都在这一领域的研发上投入了巨大的资金。

在目前可用于计算机视觉的许多工具和库中,有两种主要的工具OpenCV和Matlab在速度和效率方面表现突出。在本文中,我们将详细介绍这两种方法。

OpenCV:为计算机视觉量身定制的开源多平台解决方案

OpenCV由Intel开发,现在由Willow Garage支持,根据BSD 3条款许可证发布,免费用于商业用途。它是最流行的计算机视觉工具之一,旨在为计算机视觉算法提供一种优化的、经过良好测试的、基于开源的(C++)实现。开源库具有多种语言的接口,如C++、Python和Java,支持Linux、Mac OS、Windows、IOS和Android。它的许多功能都是在GPU上实现的。

OpenCV version 1.0的第一个稳定版本是在2006年。OpenCV社区自发布最新版本OpenCV version 4.1.1以来发展迅速,它还带来了dnn(Deep Neural Networks)模块的改进,dnn(Deep Neural Networks)模块是库中一个流行的模块,它用Deep Networks实现前向传递(inferencing),而Deep Networks是使用流行的深度学习框架预先训练的。

OpenCV提供的一些功能包括:

imread函数默认读取BGR(蓝绿红)格式的图像。

调整图像大小时,上下缩放容易。

支持各种插值和下采样方法,如INTER_NEAREST来表示最近邻插值。

支持多种阈值变化,如自适应阈值、按位操作、边缘检测、图像滤波、图像轮廓等。

使图像分割(分水岭算法)能够将图像中的每个像素分类为特定类别的背景和前景。

支持多种特征匹配算法,如蛮力匹配、knn特征匹配等。

随着其活跃的社区和机器学习的定期更新,OpenCV在计算机视觉项目领域只会有突飞猛进的发展。

MATLAB:一个授权的OpenCV集成快速原型工具

OpenCV的一个缺点是它的复杂性,这使得新手计算机视觉用户倾向于使用Matlab。由于缺少文档和错误处理代码,OpenCV相对来说更难学习。Matlab是MathWorks开发的一种专用编程语言,具有多范式的数值计算环境。它在全球拥有超过300万用户,被认为是工程师和科学家最容易和最高效的软件之一。它有一个非常强大和迅速的矩阵库。

Matlab也可以与OpenCV集成。这使得MATLAB用户能够探索、分析和调试包含OpenCV算法的设计。MATLAB的支持包包括MATLAB和OpenCV所需的数据类型转换。

MathWorks提供了计算机视觉工具箱,用于设计和测试计算机视觉、三维视觉和视频处理系统的算法、功能和应用程序。它还允许检测、跟踪、特征提取和对象匹配。Matlab还可以使用深度学习和机器学习算法(如YOLO v2、Faster R-CNN和ACF)训练自定义对象检测器。Matlab的大多数工具箱算法支持C/C++代码生成,用于与现有代码、桌面原型和嵌入式视觉系统部署相结合。

然而,Matlab并不像OpenCV那样包含很多用于计算机视觉的功能,OpenCV更多的功能是在GPU上实现的。Matlab的另一个问题是它不是开源的,它的许可证价格昂贵并且程序不可移植。

另一个在计算机视觉中非常重要的因素是代码的性能,特别是在实时视频处理方面。

哪个执行时间更快?OpenCV还是Matlab?

除了计算机视觉之外,其他领域在选择实现任何功能的编程语言或库时也需要更快的执行速度。在一篇题为“Matlab与OpenCV:不同机器学习算法的比较研究”的论文中,详细分析了这一因素。

改论文使用20个不同的实际数据集对Matlab和OpenCV进行了比较研究。这种区分是基于各种机器学习算法的执行时间,如分类与回归树(CART)、朴素贝叶斯(Naive Bayes)、增强(boost)、随机森林(Random Forest)和k近邻(K-Nearest Neighbor, KNN)。实验在Intel Core 2 duo P7450机器上运行,该机器具有3GB RAM,并在Matlab 7.12.0.635(R2011a)和OpenCV C ++ 2.1版上使用Ubuntu 11.04 32位操作系统。

该论文描述:“为了比较Matlab和OpenCV对于特定机器学习算法的速度,我们运行算法1000次,然后取平均执行时间。平均1000次以上的实验是不必要的,因为几百次之后就会收敛。”

实验结果表明,虽然Matlab是一个成功的科学计算环境,但在考虑执行时间的情况下,几乎所有的实验都是OpenCV无法比拟的。该论文还指出,这可能是由于维数、样本量和训练集的使用的组合。其中一个列出的机器学习算法KNN在数据集D16和D17上分别产生0.8和0.9的对数时间比。

编者认为,作为能够负担得起软件的大学的研究人员和学生,Matlab对于探索和处理计算机视觉概念非常有用。然而,在构建可用于工业生产的真实世界的计算机视觉项目时,OpenCV胜过Matlab。(作者:Vincy Davis)

声明:部分内容来源于网络,仅供读者学习、交流之目的。文章版权归原作者所有。如有不妥,请联系删除。