复制照片搜索只比较纯图像数据和图像相似度?

时间:2013-06-22 11:25:44

标签: image perl bash image-processing duplicate-removal

在13年内收集了大约600GB的照片 - 现在存储在freebsd zfs / server上。

照片来自家庭计算机,从几个部分备份到不同的外部USB HDD,来自磁盘灾难的重建图像,来自不同照片处理软件(iPhoto,Picassa,HP和许多其他:()在几个深度子目录中 - 很快= < em> TERRIBLE MESS 有许多重复项。

所以在我做的第一个:

  • 在树中搜索相同大小的文件(快速)并为这些文件制作md5校验和。
  • 收集重复的图像(相同大小+相同的md5 =重复)

这有很多帮助,但这里仍然有很多重复:

  • 照片与某些照片管理软件添加的exif / iptc数据不同,但图像相同(或者至少“外观相同”且尺寸相同)
  • 或者它们只是原始图像的大小调整版本
  • 或者它们是原件的“增强版”等。

现在问题:

  • 如何查找重复项 withg仅检查JPG中的“纯图像字节”而不使用exif / IPTC和meta信息?因此,想要过滤掉照片副本,只有exif标签有所不同,但图像是相同的。 (因此文件检查不起作用,但图像检查可能......)。这是(我希望)不是很复杂 - 但需要一些指导。
  • 什么perl模块可以从JPG文件中提取可用于比较/检查的“纯”图像数据?

更复杂

  • 如何找到“相似”的图像,只有什么
    • 原件的大小调整版本
    • “enchanced”版本的原件(来自某些照片处理程序)
  • 这里已经是unix命令格式或perl模块(XS?)中可用的任何算法,我可以用它来检测这些特殊的“重复”吗?

我能够制作复杂的脚本 BASH 和“+ - ”:)知道 perl。。可以直接在服务器上使用FreeBSD / Linux实用程序,通过网络可以使用OS X(但是通过LAN使用600GB不是最快的方式)...

我粗略的想法:

  • 仅在工作流程结束时删除图像
  • use Image::ExifTool脚本,用于根据图像创建日期和相机模型(也可能是其他exif数据)收集重复的图像数据。
  • 制作纯图像数据的校验和(或提取直方图 - 相同的图像应该具有相同的直方图) - 不确定这个
  • 使用一些相似性检测来查找基于调整大小和foto增强的重复项 - 不知道该怎么做...

任何想法,帮助,任何(软件/算法)暗示如何在混乱中下订单?

PS:

这是几乎相同的问题:Finding Duplicate image files但我已经完成了答案(md5)。并寻找更精确的校验和图像比较算法。

4 个答案:

答案 0 :(得分:2)

您可以使用ImageMagick工具集中的mogrify -strip删除exif数据。所以你可以为每个图像复制它而不用exif,md5sum,然后比较md5sums。

当涉及到视觉上类似的消息时 - 例如,您可以使用比较(也来自ImageMagick工具集),并生成黑/白差异地图,如描述here,然后制作histogram差异,并检查是否有“足够的”白色表示它是不同的。

答案 1 :(得分:2)

您是否看过Randal Schwartz的this article?他使用带有ImageMagick的perl脚本来比较调整后的(4x4 RGB网格)版本的图片,然后将其进行比较以标记“相似”图片。

答案 2 :(得分:1)

假设您可以使用localy安装的FS:

  • rmlint:我用来找到完全重复的最快工具
  • findimagedupes:自动化整个ImageMagick方式(作为Randal Schwartz的脚本,我还没有经过测试?似乎)
  • Detecting Similar and Identical Images Using Perseptual Hashes一路走来(一篇很棒的参考文章)
  • dupeguru-pe(gui):快速且工作出色的专用工具
  • geeqie(gui):我发现使用粒度重复数据删除选项可以快速/出色地完成工作。此外,您还可以生成有序的图像集合,使“图像”图像彼此相邻,从而可以“翻转”图像。在两者之间看到变化。

答案 3 :(得分:0)

我也遇到了类似的难题-散布了数百个照片和视频,并在大约十二个驱动器上复制了。我知道这可能不是您要找的确切方法,但是FSlint Janitor应用程序(在Ubuntu 16.x,然后是18.x上)对我来说是一个救命稻草。我将项目分块进行,最终将其全部清理干净,最后得到了三套完整的产品(我想要两套异地备份)。

FSLint管理员:
FSLint Janitor

<button class="btn primary" id="copied"><i class="fas fa-copy"></i> Copy Snippet!</button> <span id="copiedMsg"></span>