图像分类/识别开源库

4
我有一组参考图像(200张)和一组这些图像的照片(数万张)。我必须以半自动的方式对每张照片进行分类。您会建议我使用哪种算法和开源库来完成这个任务?对我来说最好的事情是有一种相似度测量方法,用于照片和参考图像之间的比较,这样我就可以向人工操作员展示从最相似到最不相似排序的图像,以使她的工作更容易。
为了提供更多背景信息,参考图像是品牌包装,而照片也是相同的包装,但带有各种噪声:闪光灯反射、低光、不完美的透视等。这些照片已经(手动)分割:只有包装可见。
回到我处理图像识别的时候(大约15年前),我可能会尝试使用参考图像训练神经网络,但现在是否有更好的方法呢?
4个回答

5
我建议您使用Python,并使用NumPy/SciPy库进行数值计算。对于处理图像的一些有用库有Mahotas和scikits.image库。
此外,您还需要使用scikits.learn,它是Libsvm的Python封装程序,这是一个非常标准的支持向量机实现。
难点在于选择描述符。描述符将是您从每个图像中计算的特征,旨在计算与参考图像集的相似度距离。建议尝试好的事物包括方向梯度直方图、SIFT特征和颜色直方图,并尝试各种方式对图像的不同部分进行分组和连接这些描述符。
接下来,留出一部分数据进行训练。针对这些数据,您必须根据它们所属的真实参考图像手动标记它们。您可以将这些标签馈入scikits.learn中的内置函数,它可以训练多类别SVM以识别您的图像。
之后,您可能需要查看MPI4Py,这是Python中MPI的一个实现,以便在进行大型描述符计算和剩余数万张图像的分类时利用多处理器。
您描述的任务非常困难,高精度地解决它可以轻松地导致计算机视觉领域的研究级出版物。希望这些提示能给您一些起点:在Google上搜索任何上述概念都将发现有用的研究论文和更多有关如何使用各种库的详细信息。

谢谢。我目前在我的项目中使用Ruby,但是Python看起来更适合这种工作。 - Dan Mazzini

1
对我来说最好的事情是有一种相似度量方法,可以将照片与参考图像进行比较,这样我就可以向人工操作员展示从最相似到最不相似的图像,以便让她的工作更轻松。
人们通常使用所谓的“地球移动距离”来实现这一点。简单来说,每个图像中的像素都被想象成一个岩石堆,高度对应于像素值,并将两个图像之间的距离定义为将一个岩石排列转移到另一个所需的最小工作量。
目前,这方面的算法是一个研究课题。以下是其中一个 Matlab 的代码:http://www.cs.huji.ac.il/~ofirpele/FastEMD/code/。看起来他们也有 Java 版本。以下是原始论文和 C 代码的链接:http://ai.stanford.edu/~rubner/emd/default.htm

0

现在,基于深度学习的框架如TorchTensorflowTheanoKeras是最好的开源工具/库,用于对象分类/识别任务。


0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接