Java – 图像识别

我有大约5000张带有水印的图像和5000张相同的图像,没有水印。 每组图像的文件名不以任何方式彼此相关。 我正在寻找Java中的API,我可以使用它来将每个水印图像与非水标记对配对。

您可以使用OpenCV库。 它可以在Java中使用。 请关注http://docs.opencv.org/doc/tutorials/introduction/desktop_java/java_dev_intro.html

关于图像比较,您可以在此处看到另一个有用的答案: 检查图像与OpenCV的相似性

我认为这更多是关于性能然后关于图像比较本身,答案是以这种方式编写的,所以如果你需要帮助比较本身评论我…

  1. 为每个图像创建简化的直方图

    假设每个通道有8个值,每个强度级别限制为4位。 这将导致每个图像3*8*4=3*32

  2. 排序图像

    取上面的直方图,并将其视为单个数字,并按照升序或降序对A组的图像进行排序无关紧要

  3. 匹配AB分组图像

    现在相应的图像应该有相似的直方图,所以从未分类的组B (水印)中获取图像, bin搜索 A组(原始)中所有最接近的匹配,然后比较选择的图像而不是5000更强大的方法进行比较。

  4. 如果A组中的图像已匹配,请添加标记

    所以你可以忽略子弹#3中已经匹配的图像来获得更快的速度

[笔记]

还有其他改进方法,比如使用Perceptual哈希算法