我正在寻找几种方法来比较两个图像,看它们有多相似。目前我计划将百分比作为“相似性指数”的最终结果。我的课程大纲是这样的:
我最近做了很多阅读,我读过的一些东西似乎非常复杂和先进,而不是像我这样只有大约一年的Java经验的人。到目前为止,我读过:
傅里叶变换 - 我发现这在Java中实现相当混乱,但显然Java Advanced Imaging API有一个类。虽然我不确定如何将输出转换为实际结果
SIFT算法 - 似乎非常复杂
直方图 - 可能是迄今为止最简单的
像素抓取 - 似乎可行,但如果两张图片之间存在相当大的差异,那么它看起来不会产生任何类型的准确结果。我可能错了?
我还想先使用Sobel滤镜预处理图像,然后进行比较。问题是实际的比较部分。
所以是的,我想看看是否有人有想法比较Java中的图像。希望此前有人做过类似的项目。我只想获得一些关于可行的比较技术的输入,这些技术在Java中难以实现。
提前致谢
答案 0 :(得分:4)
您可以从this paper获得良好的概述。您可能要研究的另一个领域是content based image retrieval (CBIR)。
很抱歉没有特定于Java。 HTH。
答案 1 :(得分:1)
作为简单像素抓取的更好替代方案,请尝试SSIM。但 要求您的图像基本上是来自同一角度的同一个对象。例如,如果您要比较使用不同算法压缩的图像(例如JPEG与JPEG2000),这将非常有用。此外,这是一种相当简单的方法,您应该能够合理地快速实施以查看结果。
我不知道Java实现,但有一个C++ implementation using OpenCV。您可以尝试重新使用它(通过javacv之类的东西)或者从头开始编写它。算法本身并不复杂,所以你应该能够直接实现它。