如何比较两个图像的相似性(与MD5不完全匹配)?

时间:2012-10-03 19:05:28

标签: java php android ubuntu ocr

如何拍摄两张图片并进行比较,看看它们有多相似?

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

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

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

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

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

我也尝试过Android的OpenCV,但无法使任何样本正常工作。

有没有人做过这样的事情,或者至少使用过一些可以完成我想要的东西?

2 个答案:

答案 0 :(得分:1)

有两个不同的任务 - 识别感兴趣的区域(可以使用Haar级联进行 - 与面部检测相同)和识别已识别的图像,这可以是 完成了不变的瞬间技术(比如胡的时刻 - 它足以在卫星图像上计算苏联坦克,因此它对小宠物来说是好事)。不变矩的优良特性是在低质量的情况下软结果降级 - 你得到符号概率列表 - 比如80%皮卡丘和30%其他东西。

我们正在开发基于在Android中使用的不变时刻的OCR库:

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

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

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

答案 1 :(得分:0)

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

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