找到不同大小的重复图像

时间:2012-10-26 17:28:49

标签: image image-processing

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

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

  • (昂贵)将较大的值调整为较小值并逐个像素地进行比较。

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

  • 将图像分成若干行和列,并对颜色值进行某种奇偶校验数学运算。

我首先看到的前两个想法的问题是,首先有不同的方法来重新调整图片的大小,因此数学可能根本不会完全相同。一些重新调整大小会增加模糊等等....

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

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

2 个答案:

答案 0 :(得分:2)

最佳方法取决于您所比较的图像的特征,图像相同的概率百分比,以及它们何时不同,它们通常会大量关闭,还是可能像单像素差异?

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

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

例如,你可以调整较大的图像大小,然后逐个像素地比较(或计算像素值的散列)只是图像的“对角线”(左上角像素到右下角像素)和这样做可以排除不同的图像,只对那些通过此测试的人进行更昂贵的比较。

或者取决于图像的类型,在任何“良好分布”处获取预先设定的点数,并且仅对通过该测试的那些进行更昂贵的比较。

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

答案 1 :(得分:1)

你需要研究dHash算法。

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

它在内部使用了awt api,因此不能用于Android。因为,imageIO在阅读很多新类型的图像时遇到了问题,我使用的是十二只内部使用的猴子罐。

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也可以在不同大小的图像中找到重复。