我正在尝试找出一种比较两个图像颜色的好方法。我的一个想法是取两个图像的平均颜色并减去该值以获得“颜色距离”。无论哪两个图像具有最小的颜色距离,都将是匹配的。这看起来是从图像数据库中识别图像的可行选择吗?
理想情况下,我想用它来识别通过图像扫描仪的扑克牌。
例如,如果我要扫描 this card 的真实版本在我的计算机上,我希望能够将其与数据库中的所有图像进行比较,以找到最接近的图像。
更新: 我忘了提及我的具体问题所涉及的挑战。
- 卡片的扫描图像和卡片的原始图像很可能尺寸不同(宽度和高度)。
- 我需要使其尽可能高效。我计划使用它一次扫描/识别数百张卡片。我认为,对于每张需要识别的扫描卡,查找(并存储)单个平均颜色值比比较数据库中每个图像的各个像素(数据库有超过 10,000 张图像)要高效得多。我之所以问这个问题,是想看看之前是否有人尝试过比较平均颜色值作为图像识别的一种手段。我有一种感觉,由于颜色值精度和准确性方面的问题,它可能不会像我想象的那样工作。
更新 2: 这是我设想的一个例子。
待识别图像=A
数据库中的图像 = { D1, D2 }
图像 A 的平均颜色 = avg(A) = #8ba489
数据库中图像的平均颜色= { #58727a, #8ba489 }
D2 与图像 A 匹配,因为 #8ba489 - #8ba489 小于 #8ba489 - #58727a。
当然,测试图像不会与任何这些图像完全匹配,因为它会被扫描进来;但是,我正在尝试找到最接近的匹配。
最佳答案
基于内容的图像检索 (CBIR) 可以满足您的需要。 LIRE 是一个用于此目的的 Java 库。您甚至可以首先在演示中尝试使用不同颜色的图像特征的多种方法。请参阅https://code.google.com/p/lire/用于下载和源。还有“简单应用程序”,可让您快速开始索引和搜索。
根据我的经验,我建议使用 ColorLayout 功能(如果图像未旋转)、OpponentHistogram 或 AutoColorCorrelogram。 CEDD 功能也可能会产生良好的结果,并且它是最小的,每个图像大约有 60 字节的数据。
关于java - 使用色差比较图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17553236/