【问题标题】:Java - Image RecognitionJava - 图像识别
【发布时间】:2016-12-18 05:51:39
【问题描述】:

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

【问题讨论】:

  • 可能有更聪明的方法来处理这个问题,但我尝试的第一件事是使用 JAI 从另一个图像中减去一个图像并尝试将结果与水印匹配
  • 如果您发布示例图片,您甚至可能会获得它的代码...

标签: java image-processing


【解决方案1】:

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

关于图像比较,您可以在这里看到另一个有用的答案:Checking images for similarity with OpenCV

【讨论】:

    【解决方案2】:

    我认为这更多的是关于性能而不是图像比较本身,并且答案是以这种方式编写的,所以如果您在比较本身方面需要帮助,请评论我...

    1. 为每张图片创建简化直方图

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

    2. 对图像进行排序

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

    3. 匹配 A 和 B 分组图像

      现在对应的图像应该有相似的直方图,所以从未排序的组B(带水印)中获取图像,bin-search在A组(原始)中所有最接近的匹配,然后比较更多仅针对选定图像而不是 5000 使用更强大的方法。

    4. 如果来自A 组的图像已经匹配,则添加标志

      因此您可以忽略项目符号 #3 中已匹配的图像以提高速度

    [备注]

    还有其他改进方法,例如使用Perceptual hash algorithms

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 2021-12-23
      • 2013-10-28
      • 2019-07-06
      • 2017-04-18
      相关资源
      最近更新 更多