4

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

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

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

4

4 回答 4

5

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

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

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

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

之后,您可能希望查看 MPI4Py,它是 Python 中 MPI 的实现,以在对数以万计的剩余图像进行大型描述符计算和分类时利用多处理器。

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

于 2012-04-12T02:47:43.210 回答
1

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

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

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

于 2012-04-12T03:05:24.573 回答
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

于 2012-11-12T17:35:31.867 回答
0

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

于 2016-10-05T11:27:08.517 回答