图像分类/识别开源库

时间:2012-04-10 14:18:52

标签: image-processing computer-vision image-recognition

我有一组参考图像(200)和一组照片(数万张)。我必须以半自动方式对每张照片进行分类。你会建议我使用哪种算法和开源库来完成这项任务?对我来说最好的事情是在照片和参考图像之间进行相似性测量,这样我就可以向操作人员展示从最相似的图像到最少的图像,以使她的工作更轻松。

为了给出一些更多的背景,参考图像是品牌包装,照片是相同的包装,但有各种噪音:来自闪光灯的反射,低光,不完美的视角等。照片已经是(手动)分段:只有包可见。

回到我的图像识别时代(就像15年前一样)我可能会尝试使用参考图像训练神经网络,但我想知道现在是否有更好的方法来做到这一点。

4 个答案:

答案 0 :(得分:5)

我建议您使用Python,并使用NumPy / SciPy库进行数值工作。一些用于处理图像的有用库是Mahotas库和scikits.image库。

此外,您还需要使用scikits.learn,它是Libsvm的Python包装器,这是一个非常标准的SVM实现。

困难的部分是选择你的描述符。描述符将是您从每个图像计算的特征,旨在计算与参考图像集的相似距离。一组很好的尝试将是直方图梯度直方图,SIFT特征和颜色直方图,并且可以使用各种方法对图像的不同部分进行分级并将这些描述符连接在一起。

接下来,留出一些数据进行培训。对于这些数据,您必须根据它们所属的真实参考图像手动标记它们。您可以将这些标签提供给scikits.learn中的内置函数,它可以训练多类SVM识别您的图像。

之后,您可能需要查看MPI4Py(Python中的MPI实现),以便在进行大量描述符计算和对数万个剩余图像进行分类时利用多处理器。

您描述的任务非常困难,高精度地解决它很容易导致计算机视觉领域的研究级出版物。我希望我已经给了你一些起点:在Google上搜索上述任何一个概念都会找到有用的研究论文以及有关如何使用各种库的更多细节。

答案 1 :(得分:1)

  

对我来说最好的事情是在照片和参考图像之间进行相似性测量,这样我就可以向操作人员展示从最相似的图像中排序的图像,以使她的工作更轻松。

人们这样做的一种方式是所谓的“地球移动者的距离”。简而言之,人们将图像中的每个像素想象为一堆高度与像素值对应的岩石,并将两个图像之间的距离定义为将一种岩石排列转移到另一种岩石所需的最小工作量。

此算法是当前的研究课题。这里有一个matlab:http://www.cs.huji.ac.il/~ofirpele/FastEMD/code/。看起来他们也有一个java版本。这是原始论文和C代码的链接:http://ai.stanford.edu/~rubner/emd/default.htm

答案 2 :(得分:0)

使用IMMI(图像挖掘扩展,http://rapid-i.com),AGPL许可证尝试Radpiminer(最广泛使用的数据挖掘平台之一http://www.burgsys.com/mumi-image-mining-community.php)。

它目前实现了几种相似性测量方法(不仅是逐个像素的比较)。可以为学习算法(例如,神经网络,KNN,SVM ......)输入相似性度量,并且可以对其进行训练以便提供更好的性能。本文给出了一些方法的信息: http://splab.cz/wp-content/uploads/2012/07/artery_detection.pdf

答案 3 :(得分:0)

现在基于深度学习的基础知识,如 Torch Tensorflow Theano Keras 是用于对象分类/识别任务的最佳开源工具/库。