仅通过图像数据和相似度比较搜索重复照片?

5

我已经收集了大约13年的照片,总共600GB,现在存储在FreeBSD ZFS/服务器上。

这些照片来自家庭电脑,从不同的外部USB硬盘驱动器进行了几次部分备份,从磁盘灾难中重建的图像,从不同的照片处理软件(iPhoto、Picassa、HP等)在几个深层子目录中 - 简而言之 = 非常混乱,有很多重复文件。

所以我首先做的是:

  • 搜索相同大小的文件(速度快),并为它们制作md5校验和。
  • 收集重复的图像(相同大小+相同md5 = 重复)

这对我帮助很大,但仍然有很多重复项:

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

现在的问题:

  • 如何通过仅对JPG中的“纯图像字节”进行校验和来查找重复项,而不包括exif/IPTC等元信息?因此,希望过滤掉仅在exif标记方面有所不同但图像相同的照片副本(因此文件校验和无法起作用,但图像校验和可以……)。这(我希望)并不是很复杂 - 但需要一些指导。
  • 哪个Perl模块可以从可用于比较/校验的JPG文件中提取“纯”图像数据

更复杂的问题:

  • 如何找到“相似”的图像,即
    • 原始图像的调整大小版本
    • 原始图像的“增强”版本(来自某些照片处理程序)
  • 是否已经有任何算法以Unix命令形式或Perl模块(XS?)可用于检测这些特殊的“重复项”?

我能够使用BASH和Perl创建复杂的脚本。可以直接在服务器上使用FreeBSD/Linux实用程序,在网络上可以使用OS X(但使用LAN处理600GB不是最快的方法)……

我的粗略想法:

  • 在工作流程结束时仅删除图像
  • 使用Image::ExifTool脚本根据图像创建日期和相机型号(也许还有其他exif数据)收集重复的图像数据。
  • 制作纯图像数据的校验和(或提取直方图 - 相同的图像应该具有相同的直方图)- 不确定这一点
  • 使用某些相似度检测来查找基于调整大小和照片增强的重复项 - 不知道如何实现……

您好,以下是您需要翻译的内容:

有什么方法、帮助或(软件/算法)提示可以让混乱中的秩序更加有序吗?

附注:

这里有一个几乎相同的问题:查找重复图片文件,但我已经用md5回答了,并正在寻找更精确的校验和图像比较算法。

4个回答

3
假设您可以使用本地挂载的文件系统:
  • rmlint:我曾经使用过的最快的工具,用于查找完全重复的文件。
  • findimagedupes:自动化整个ImageMagick流程(似乎是Randal Schwartz的脚本,我没有测试过?)
  • 使用感知哈希检测相似和相同的图像一直走在前列(一个很好的参考帖子)
  • dupeguru-pe(GUI):专用工具,速度快,执行得非常出色
  • geeqie(GUI):我发现它快速/出色完成工作,使用细粒度去重选项。然后,您可以生成一个有序的图像集合,使“相似的图像相邻”,从而可以在两者之间“翻转”以查看变化。

链接已更改为http://hackerlabs.github.io/blog/2012/07/30/organizing-photos-with-duplicate-and-similarity-checking/。 - mkraemerx

2
您可以使用ImageMagick工具集中的mogrify -strip删除exif数据。因此,您可以为每个图像复制不带exif的图像,并进行md5sum比较。
当涉及到视觉上相似的消息时,您可以例如使用compare(也来自ImageMagick工具集),并生成黑/白差异地图,如这里所述,然后制作差异的直方图,并检查是否有足够的白色来表示它们不同。

2
当我们使用Magick时,您可以在比较之前将它们调整为相同(小)尺寸,以便比较更快... - Massa

2
你看过 Randal Schwartz 写的这篇文章吗?他使用了一个带有 ImageMagick 的 Perl 脚本来比较已调整大小(4x4 RGB 网格)的图片版本,以便标记“相似”的图片。请参考这篇文章

0

我曾经遇到过类似的困境——数百GB的照片和视频分散在大约十几个驱动器上并且存在重复。我知道这可能不是你想要的确切方法,但FSlint Janitor应用程序(在Ubuntu 16.x,然后是18.x)对我来说是一个救命稻草。我将项目分成几块,最终清理了所有内容,并最终得到了三个完整的备份集(我想要两个离线备份)。

FSLint Janitor:
FSLint Janitor

sudo apt install fslint

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接