图像分类/识别的开源库

4 人关注

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

为了提供更多的背景,参考图片是有品牌的包装,而照片是相同的包装,但有各种噪音:闪光灯的反射、光线不足、不完美的视角等等。这些照片已经被(手动)分割:只有包装是可见的。

在我从事图像识别的年代(比如15年前),我可能会尝试用参考图像训练一个神经网络,但我想知道现在是否有更好的方法来做这件事。

image-processing
computer-vision
image-recognition
Dan Mazzini
Dan Mazzini
发布于 2012-04-10
4 个回答
ely
ely
发布于 2016-10-05
已采纳
0 人赞同

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

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

最难的部分是选择你的描述符。描述符将是你从每张图像中计算出来的特征,目的是计算与参考图像集的相似度距离。一组可以尝试的东西是定向梯度直方图、SIFT特征和颜色直方图,并以各种方式对图像的不同部分进行分档,将这些描述符串联起来。

接下来,把你的一些数据留作训练用。对于这些数据,你必须根据它们所属的真正的参考图像来手动标注它们。你可以将这些标签输入scikits.learn的内置函数,它可以训练一个多类SVM来识别你的图像。

之后,你可能想看看MPI4Py,一个在Python中实现的MPI,以便在进行大型描述符计算和对数万张剩余图像进行分类时利用多处理器的优势。

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

谢谢;我目前在我的项目中使用Ruby,但Python看起来是这种工作的一个更好的选择。
dranxo
dranxo
发布于 2016-10-05
0 人赞同

对我来说,最好的办法是在照片和参考图片之间有一个相似度测量,这样我就可以向人类操作员展示从最相似到最不相似的图片,使她的工作更容易。

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

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

Radim Burget
Radim Burget
发布于 2016-10-05
0 人赞同