Java库来比较图像的相似性

时间:2011-12-27 13:00:27

标签: java image comparison similarity

我花了很多时间研究一个允许我用Java比较图像的库。

我真的没有找到任何有用的东西,也许我的GoogleSearch技能不够高所以我想我会问你们是否可以指引我找到我能找到的方向像这样的东西。

基本上我想要做的是将两个图像相互比较,得到两个图像相似的值。像一个百分比左右。

我希望你们有一些我可以使用的东西,我不知道如何自己写这样的东西......

PS:它不一定必须是Java,这只是我的应用程序将运行的环境。

3 个答案:

答案 0 :(得分:29)

你可以看看关于SO本身的两个答案:this one is about image comparison itself, offering links to stuff in C++(如果我正确阅读)this one offers links to broader approaches, one being in C

我建议从第二个链接开始,因为那个讨论的链接会导致一些相关技术的实现代码,你可以自己“翻译”成Java。

这是我最好的谷歌技能,但没有Java - 抱歉。我希望这是一个很好的起点!

编辑: Here's someone with your problem who wrote his own comparison class in Java。我没有读过源代码。他明确表示他也找不到这个目的的Java库,所以这就是他自己编写的原因。

哦,关于这个question on SO has probably the best links,关于图像处理的Java库。希望其中有一个可以比较图像的相似性。

好的,上次编辑: The Java Image Processing Cookbook显示了基本算法的Java实现,以确定两个图片之间的差异。它还有一封电子邮件,可以联系编写它的人以及一系列参考资料。虽然没有图书馆。

在阅读您的问题评论后编辑: 除非你已经检查了所有上面的链接,因为你想要的似乎是检查两个图像是否相等,我建议从Java Image Processing Cookbook开始(因为它有一个Java实现的算法来检查相等的图像)和SO问题的最后一个链接。另外,check PerceptualImageDiff和该项目的源代码(C ++);它听起来真的很漂亮 - 显然应该检查两个图像是否与人类视觉系统相等。

答案 1 :(得分:8)

就在我的脑海中,OpenCV是一个很棒的图像处理库,但如果您只是想比较图像,那可能会有点过分。如果是这种情况,我会选择ImageJ

有人已经问过如何使用OpenCV here执行此操作。

我会使用C ++,但是如果你必须使用Java,那么有一个项目为OpenCV创建了一个Java包装器,here

答案 2 :(得分:7)

我使用this link中的课程来比较两个产品图片,结果很酷。实现它只是为了比较两个图像并不是很难,你只需要删除JAI和Swing等等。它将图像大小调整为300x300并返回差值,例如“1234”。最大差值接近“11041”,在链接中说明。做分工,你可以简单地得到百分比。如果有兴趣,我可以稍后在这里发布修改后的代码。

结果很酷,但我仍然得到“数码相机照片”,检测到类似于“电视照片”。所以,我使用ImageJ来检测图片中的 edge 。使用检测边缘操作,ImageJ将图像转换为边缘检测到的灰度图像。比我将两个边缘检测图像放在同一比较器中并将两个值相乘。结果变得更加准确。

Getting the edge-detected form of the images