用仅比较纯图像数据和图像相似性进行重复照片搜索?

jm6*_*666 5 bash perl image image-processing duplicate-removal

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

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

因此,我首先要做的是:

  • 在树中搜索相同大小的文件(快速),并对其进行md5校验和。
  • 收集重复的图像(相同大小+相同的md5 =重复)

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

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

现在的问题:

  • 如何在没有exif / IPTC和类似元信息的情况下,通过只在JPG中校验“纯图像字节” 来查找重复项?因此,要过滤出重复的照片,只有exif标签有什么不同,但是图像是相同的。(因此文件校验和不起作用,但是图像校验和可以...)。(我希望)这不是很复杂-但需要一些指导。
  • 哪个perl模块可以从JPG文件中提取“纯”图像数据,什么可用于比较/校验和

更复杂

  • 如何找到“相似”的图像,只有
    • 调整尺寸的原件
    • 原稿的“经过修饰”的版本(来自某些照片处理程序)
  • 在这里,Unix命令格式或perl模块(XS?)中是否已有可用的算法,我可以用来检测这些特殊的“重复项”?

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

我的粗略想法:

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

任何想法,帮助,任何(软件/算法)提示如何使混乱局面?

附:

这几乎是一个相同的问题:查找重复的图像文件,但答案(md5)已经完成。并寻找更精确的校验和和图像比较算法。

gsi*_*ems 2

您看过兰德尔·施瓦茨 (Randal Schwartz) 的这篇文章吗?他使用 Perl 脚本和 ImageMagick 来比较调整大小(4x4 RGB 网格)的图片版本,然后进行比较以标记“相似”图片。