我正在尝试实现基于内容的图像检索系统,但在此之前,我想先概述一些适合此任务的编程语言(具有良好的库等)。
有谁知道一些很好的语言和库来完成此类任务?那么Python或Java呢?
最好
我正在尝试实现基于内容的图像检索系统,但在此之前,我想先概述一些适合此任务的编程语言(具有良好的库等)。
有谁知道一些很好的语言和库来完成此类任务?那么Python或Java呢?
最好
Answers:
也许您可以更具体地说明工作的范围和规模(学术项目?台式机或移动商业产品?基于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 ++则不是一个选择。
特别是由于您的项目是学术性的,因此Mathematica是一个非常优秀且合适的软件系统。Mathematica 8带有用于图像处理,线性代数,数字,GPU等的全面功能。它还是一个符号系统,因此很多次我都可以得出方程的封闭式解决方案-对于计算机视觉任务非常方便。Mathematica还可以与Python,C,C ++,Java,.NET等代码进行通信。