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

Java 如何比较两幅图像的相似性(与MD5不完全匹配)?,java,php,android,ubuntu,ocr,Java,Php,Android,Ubuntu,Ocr,我如何拍摄两张图像并进行比较,看它们有多相似 我不是说用MD5比较两张精确的图像。我正在比较的两幅图像将完全不同,有时可能大小也不同 以口袋妖怪卡为例: 我将扫描每张卡的高清图像。我希望用户能够用手机拍摄他们的口袋妖怪卡,我希望能够将其与我扫描的图像进行比较,然后确定他们拍摄的是哪张卡 处理不必直接在手机上完成,可以选择卸载到web服务,但是请注意,我的编程语言知识有点有限(基本上限于PHP/JAVA/Android)。我使用的服务器是我自己的Ubuntu服务器,因此如果这有帮助的话,我确实可以

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

我不是说用MD5比较两张精确的图像。我正在比较的两幅图像将完全不同,有时可能大小也不同

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

处理不必直接在手机上完成,可以选择卸载到web服务,但是请注意,我的编程语言知识有点有限(基本上限于PHP/JAVA/Android)。我使用的服务器是我自己的Ubuntu服务器,因此如果这有帮助的话,我确实可以从php访问exec命令

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

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

我也尝试了Android版的OpenCV,但没有任何一个示例可以运行


有没有人做过类似的事情,或者至少用过一些可以实现我所寻找的东西?

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


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

有两个不同的任务-识别感兴趣的区域(可以通过Haar级联完成-与人脸检测相同)和识别识别的图像(可以
使用不变矩技术(如Hu矩——这足以在卫星图像上计算苏联坦克的数量,因此对口袋妖怪来说应该是好的)。不变矩很好的特性是在低质量的情况下结果的软降级-你会得到一个符号的概率列表-就像这是80%的pikachu和30%的其他东西

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

( 纯java和合理的速度,在demos子目录中有android示例。 这是一款基于javaocr的应用程序,它可以识别黑白电话号码并拨打: )

您也可以考虑一些瞄准帮助,以便用户位置符号匹配正确。


(因此,第一项任务将使用真正的智能)

您将有很多工作要做,即使有一个像OpenCV这样的现成库,也没有简单的方法来完成您想要做的事情,而且这个过程的数学可能非常复杂。这可能与以下内容有关:您能告诉我android示例的方向吗?阅读后,听起来这可能正是我所需要的。答案中添加了链接。这可能是你的解决方案-但OCR不是微不足道的,没有那么多现成的食谱将永远有效。