3

如何拍摄两张图像并比较它们以查看它们的相似程度?

我不是在谈论使用 MD5 比较两个精确的图像。我正在比较的两个图像将完全不同,有时尺寸也可能不同。

以口袋妖怪卡片为例:我将扫描每张卡片的高清图像。我希望用户能够用他们的手机为他们的口袋妖怪卡片拍照,并且我希望能够将它与我的扫描图像进行比较,然后确定他们拍照的是哪张卡片。

处理不必直接在手机上完成,卸载到 Web 服务是一种选择,但请注意,我的知识在编程语言上有些有限(几乎仅限于 PHP/JAVA/Android)。我使用的服务器是我自己的 Ubuntu 服务器,所以如果有帮助的话,我可以从 php 访问 exec 命令。

起初,我认为以前有人会这样做(比较两张图片)。我尝试使用 php 和 imageik 使用我发现声称可以做我正在尝试的事情的示例(使用 compareImages() ),但它根本不起作用。关于做这样的事情似乎没有太多(如果有的话)文档,这就是为什么我如此卡住。我所寻找的只是朝着正确的方向前进。

我的第二个想法是尝试使用 OCR 仅提取卡片的标题,然后将其与标题数据库进行比较并显示与该标题相关的图像。到目前为止,我首先尝试使用 phpocr,但它根本不起作用,因为我理解它需要单色图像。接下来,我直接从服务器上的控制台尝试了 tesseract,虽然它比 phpocr 做得更好,但扫描图像上超过 80% 的字符要么错误要么不正确,因此来自智能手机的质量较低的图像真的会有烦恼。

我还尝试了适用于 Android 的 OpenCV,但无法让任何示例正常工作。

有没有人做过这样的事情,或者至少使用了可以完成我正在寻找的东西?

4

2 回答 2

1

有两个不同的任务 - 识别感兴趣的区域(可以使用 Haar 级联完成 - 与面部检测相同)和识别图像的识别可以
使用不变矩技术完成(如 Hu 矩 - 足以计算苏联坦克在卫星图像上,所以它对口袋妖怪有好处)。不变矩的好特性是在质量低的情况下结果的软退化——你会得到一个符号的概率列表——比如这是 80% 的皮卡丘和 30% 的其他东西。

我们正在开发基于不变矩的 OCR 库,以便在 android 中使用:

https://sourceforge.net/projects/javaocr/

(纯java,速度合理,demos子目录下有android示例。这里是基于javaocr的app,它会识别黑底白字电话号码并拨打: https: //play.google.com/store/apps/ details?id=de.pribluda.android.ocrcall&feature=search_result#?t=W251bGwsMSwyLDEsImRlLnByaWJsdWRhLmFuZHJvaWQub2NyY2FsbCJd )

您还可以考虑一些瞄准帮助,以便用户定位符号正确匹配(所以第一个任务将使用真正的智力)

于 2012-10-03T19:53:42.787 回答
0

你应该决定你需要什么样的相似性比较。有几何算法。他们使用边缘检测,然后尝试匹配两个图像中检测到的边缘。在处理具有相同形状的不同颜色对象时,它们可能很有用。还有一些算法更多地基于颜色相似性。他们比较图像中的颜色以及它们的分布方式。

如果您正在寻找一个具体的算法,您可能应该看看Hough Transform

于 2012-10-03T19:44:07.900 回答