2011-12-27 133 views
49

我花了一段时间研究一个库,该库允许我在Java中将图像与另一个进行比较。用于比较图像相似度的Java库

我真的没有发现任何有用的,也许是我的GoogleSearch技能不够高,所以我想我会问你们,如果你可以点我到哪里,我能找到这样的一个方向。

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

我希望你们有什么我可以使用,我不知道怎么写类似的东西我自己......

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

+0

你想比较哪种类型的相似性?图像尺寸相同,或者可以缩放/旋转/弯曲? – dbf 2011-12-27 13:04:28

+1

我只想知道这两个图像是否相同(来自人类POV) – 2011-12-27 13:28:25

+0

我最近发现了一个称为Rainbow4j的令人敬畏的库,由Galen框架开发和使用。它可以比较基于像素差异,色差等的图像,并具有很多可配置性。 – kaqqao 2016-10-25 08:54:22

回答

28

你可以看看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图像处理指南开始(因为它有一个Java中的算法实现检查相同的图像)和最后一个SO问题的链接。此外,check PerceptualImageDiff和该项目的源代码(C++);它听起来非常漂亮 - 它显然应该检查两个图像是否与人类视觉系统相同

+0

我挖掘了你的资源 - 特别是文章的简单实现是非常有用的。 – 2012-01-13 13:05:12

+0

dang .. 404找不到该食谱链接 – tObi 2017-09-03 14:51:55

+0

@tobi [archive](http://archive.org)仍然有一个版本;更新我的帖子。 – 2017-09-03 15:02:30

8

只是把我的头顶部,OpenCV是一个伟大的图像处理库,但它可能是矫枉过正,如果你只是想比较的图像。如果是这样的话,我会去ImageJ

有人已经问过如何使用OpenCV here来做到这一点。

我会使用C++来做这件事,但是如果您必须使用Java,那么有一个项目为OpenCV制作了一个Java包装器here

7

我使用了类this link比较两个产品图片,并且结果是凉爽。要实现它仅仅用于比较两个图像并不难,您只需删除JAI和Swing等行。它将图像大小调整为300x300并返回差异值,如“1234”。最大差值接近“11041”,在链接中说明。做一个部门,你可以简单地得到百分比。如果有兴趣,我可以在稍后发布修改后的代码。

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

Getting the edge-detected form of the images