【问题标题】:Find duplicate images of different sizes查找不同大小的重复图像
【发布时间】:2016-01-27 01:45:54
【问题描述】:

我想知道是否有预先存在的算法/库/框架来比较两张图像,看看其中一张是否是另一张的调整大小版本?在这个阶段,编程语言并不重要。

如果那里什么都没有,我需要写一些东西。到目前为止我的想法:

  • (昂贵)将较大的调整为较小的并逐像素比较。

  • 更好的是,只需调整图片上一些随机“区域”的大小并进行比较。如果它们匹配,则转换更多,等等......

  • 将图像分成许多行和列,并对颜色值进行某种奇偶校验。

我特别看到前两个想法的问题是,首先有不同的方法可以重新调整图片的大小,因此数学计算结果可能根本不一样。一些重新调整大小会增加模糊等......

如果有人能指出一些关于这个主题的优秀文献,那就太好了。我的谷歌搜索主要是共享软件应用程序,这不是我想要的。

我们的目标是让它在网络服务器的后面运行。

【问题讨论】:

  • 当您选择随机区域时,如何选择目标区域进行比较?
  • 查找特征向量,他们已经成功地将其用于面部识别(特征脸)或任何数量的比随机采样更复杂的图像识别技术
  • @Acorbe 你可以乘以大小的比例,假设它们被调整大小而不是裁剪。
  • 您可能对Feature Detection 算法感兴趣(请参阅页面底部的列表)。基本上,如果两个图像在相同的相对位置具有相似描述的特征,它们就是相似的。特征匹配越多,匹配越接近。

标签: image image-processing


【解决方案1】:

最佳方法取决于您要比较的图像的特征,图像相同的概率百分比,以及当它们不同时,它们通常会相差很多还是可能会像一个像素差?

如果上述问题的答案是您需要比较的图像将是完全随机的,那么使用昂贵的解决方案,或者一些可用的软件包可能是最好的选择。

如果您知道图像经常不同,并且图像通常差异很大,并且您真的想手动推出解决方案,您可以实施一些初始“快速比较”步骤,会更便宜,并且可以快速识别出许多图像不同的情况。

例如,您可以调整较大图像的大小,然后逐像素比较(或计算像素值的哈希值)仅图像的“对角线”(左上角像素到右下角像素)并通过这样做会排除不同的图像,只对通过此测试的图像进行更昂贵的比较。

或者根据图像类型在“良好分布”的任何地方取一个预设数量的点,并且只对通过此测试的那些进行更昂贵的比较。

如果您对要比较的图像有很多了解,它们具有已知的特征,并且它们的不同之处多于相同之处,那么按照上述思路实施廉价的“快速消除比较”可能是值得的。

【讨论】:

    【解决方案2】:

    您需要为此研究 dHash 算法。

    这几天我写了一个纯java库。您可以使用目录路径(包括子目录)来提供它,它会列出列表中的重复图像以及您要删除的绝对路径。或者,您也可以使用它来查找目录中的所有唯一图像。

    它内部使用了awt api,所以不能用于Android。由于 imageIO 无法读取大量新类型的图像,因此我使用的是内部使用的 12 个猴子 jar。

    https://github.com/srch07/Duplicate-Image-Finder-API

    可以从https://github.com/srch07/Duplicate-Image-Finder-API/blob/master/archives/duplicate_image_finder_1.0.jar下载带有内部捆绑依赖项的Jar

    该api也可以在不同大小的图像中查找重复。

    【讨论】:

    • 如果能了解更多关于 OP question 的详细信息,即处理此问题的 API 部分,那就太好了。也许对它如何工作的一般解释? 该 api 也可以在不同大小的图像中查找重复。
    猜你喜欢
    • 2011-02-12
    • 2012-11-28
    • 2018-04-14
    • 2011-03-28
    • 2015-04-22
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2013-10-01
    相关资源
    最近更新 更多