2012-04-10 47 views
4

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

为了提供更多的背景知识,参考图像是品牌包装,照片是相同的包装,但有各种噪音:闪光灯反射,低光照,不完美透视等。已经(手动)分段:只有包是可见的。我回想起在图像识别(像15年前)的日子里,我可能会尝试用参考图像训练一个神经网络,但我想知道现在是否有更好的方法来做到这一点。

回答

5

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

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

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

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

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

您描述的任务非常困难,并且以高准确度解决问题很容易导致计算机视觉领域的研究级出版物。我希望我已经给出了一些出发点:在Google上搜索上述任何概念都会遇到有用的研究论文以及有关如何使用各种库的更多详细信息。

+0

谢谢;我目前在我的项目中使用Ruby,但对于这类工作,Python看起来更好。 – danmaz74 2012-04-12 10:53:24

1

对我来说最好的办法是在照片和参考图像之间进行相似性度量,这样我就会向操作人员展示从最相似点到最不相似点的图像,以使她工作更容易。

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

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

0

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

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

0

现在给天深度学习基础framworks像火炬TensorflowTheanoKeras是最好的开源工具/库用于对象分类/识别任务。