我正在寻找几种方法来比较两张图片,看看它们有多相似。目前我计划将百分比作为“相似性指数”的最终结果。我的程序大纲是这样的:
- 用户选择 2 张图片进行比较。
- 通过一个按钮,可以使用几种不同的方法比较图像。
- 最后,每种方法旁边都会有一个百分比,表示基于该方法的图像的相似程度。
我最近读了很多书,我读过的一些东西似乎非常复杂和高级,不适合像我这样只有大约一年 Java 经验的人。到目前为止,我已经阅读了:
傅里叶变换 - 我发现这在 Java 中实现起来相当困惑,但显然 Java 高级成像 API 有一个类。虽然我不确定如何将输出转换为实际结果
SIFT 算法 - 看起来异常复杂
直方图 - 可能是迄今为止提到的所有图表中最简单的
像素抓取 - 似乎可行,但如果两张图像之间存在相当大的差异,它看起来不会产生任何准确的结果。我可能是错的?
我还有一个想法,即先使用 Sobel 滤波器对图像进行预处理,然后再进行比较。问题是实际比较部分。
是的,我想看看是否有人对用 Java 比较图像有想法。希望这里有人以前做过类似的项目。我只是想获得一些关于可行的比较技术的意见,这些技术在 Java 中实现起来并不难。
提前致谢
最佳答案
- 傅立叶变换 - 这可用于高效地计算 cross-correlation ,它将告诉您如何对齐两张图片,以及它们在最佳对齐时的相似程度。
- 筛选描述符 - 这些可用于比较局部特征。它们通常用于对应分析和对象识别。 (另见 SURF)
- 直方图 - 归一化的互相关通常会在全局级别比较图像时产生良好的结果。但是,由于您只是比较颜色分布,因此您最终可能会宣布有很多雪的室外场景与有很多白色墙纸的室内场景相似......
- 抓取像素 - 不知道这是什么...
您可以从 this paper 得到一个很好的概述。 .您可能要查看的另一个字段是 content based image retrieval (CBIR) .
很抱歉不是特定于 Java 的。 HTH.
关于java - 图像比较技术与 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4328187/