我正在尝试实现基于内容的图像检索系统,但在此之前,我想先概述一些适合此任务的编程语言(具有良好的库等)。

有人知道吗?一些适合这种任务的语言和库?那么Python或Java呢?

最佳

评论

范围是一个学术项目;-)很抱歉没有告诉您!

我在计算机视觉小组的软件启动工作中工作了大约3年。我们使用python + scipy / numpy进行快速原型设计,并使用C ++进行生产代码。用于重型C ++的boost :: python包装器有助于移植。 BLAS和LAPACK用于大量数字内容。

@wim-您的评论将是一个不错的答案,并详细说明了为何在开发的不同阶段使用这些语言。

您可以使用Matlab或Octave进行快速原型制作,然后借助Armadillo(用于线性代数)和MLPACK(用于机器学习和模式识别)等工具包将其转换为C ++。 Armadillo内部使用BLAS和LAPACK(与Matlab相同)。您还可以通过Armadillo的mex接口将'n'match Matlab / Octave代码与C ++代码混合。

#1 楼

也许您可以更具体地说明工作的范围和规模(学术项目?台式机或移动商业产品?基于Web的商业项目?)。

一些建议和评论:


Matlab在学术界很常见,对于草绘/验证想法非常有用。您将可以访问其他研究人员的大量代码(在CV和机器学习中);原型制作和调试将非常快速和容易,但是在这种环境下开发的任何东西都将很难投入生产。取决于您代码的工作方式,您可能会遇到内存/性能问题(在某些情况下,您无法根据Matlab的原语来描述您想做的事情,而不得不开始循环播放像素,而Matlab的解释语言并非在这种情况下提供帮助)。与数据库,Web服务器等的交互并不容易,有时甚至是不可能的(您不会获得Matlab程序成为Web前端调用的Thrift服务器)。费用$$$。
C ++是许多生产级CV系统所使用的(想像Google的图像搜索或Streetview规模,或者许多商业机器人应用规模的东西)。像OpenCV这样的好库,性能出色,易于放入生产环境。如果需要进行机器学习,则那里有很多库(LibSVM / SVMlight,Torch)。如果您必须求助于“在所有像素上循环”代码,则效果会很好。易于用于对大型检索系统中所需的系统/存储层进行编码(例如:非常大的磁盘上的哈希图,用于将反索引映射特征散列存储到图像)。 Thrift / Message Pack之类的东西可以将您的检索程序转换为RPC服务器,可以由Web前端调用。但是:原型开发不是很敏捷,尝试新想法非常糟糕,开发时间很慢;并由经验不足的编码人员掌握,可能很难跟踪性能和/或不稳定问题。
Python在某种程度上介于两者之间。您可以将其用于Matlab样式的数值计算(使用numpy和scipy),并且可以绑定到OpenCV之类的库。您可以使用它来处理系统/数据结构,并获得可接受的性能。尽管比Matlab或C ++少,但有很多机器学习软件包。除非必须诉诸“所有像素循环”代码,否则您将能够以1:1.5到1:3的性能比和2:1到10:1的比例编写几乎所有可以用C ++完成的代码源代码大小(有争议)。但是,取决于项目的成功与否,有时会出现性能问题,而改写C ++则成为不可能。

评论


$ \ begingroup $
另外,与Python不同,Matlab在文档编制方面也很强大。
$ \ endgroup $
– Andrey Rubshtein
2012年2月15日在16:45

$ \ begingroup $
C呢?如果有疑问,那是我的首选语言。
$ \ endgroup $
– Zetta Suro
2012年8月18日在2:47

#2 楼

尤其是由于您的项目是学术性的,因此Mathematica是一个非常优秀且合适的软件系统。 Mathematica 8拥有用于图像处理,线性代数,数字,GPU等的全面功能。它也是一个符号系统,因此很多次我都可以得出方程的封闭式解决方案-非常适合计算机视觉任务。 Mathematica还可以与Python,C,C ++,Java,.NET,...,代码进行通信。

#3 楼

如果这是一个学术项目,那么您绝对应该使用Matlab,尤其是图像处理工具箱和计算机视觉系统工具箱。与在C ++中相比,在Matlab中进行算法原型设计和评估所需的时间要少几个数量级。

即使有了Python接口,OpenCV也比Matlab难用得多,如果需要的话,您可以通过mex从Matlab调用C或C ++代码。

#4 楼

用于图像检索系统。您将拥有客户端和服务器端代码。
服务器端可以使用Python或C / C ++。 OpenCV是您的最佳选择。它同时具有python和C ++接口。
对于客户端,我认为最好使用Java。

#5 楼

最好的计算机视觉语言是C ++。尽管它的主要缺点是实现您想要的东西更加困难。 OpenCV是最好的计算机视觉库,但是您可以使用matlab或python进行相同的操作。

在这里看看。