检测不同分辨率下的图像相等性

我正在尝试构建一个脚本来浏览我原来的高分辨率照片,并在我拥有专业帐户之前替换我上传到Flickr的旧的低分辨率照片。

对于他们中的许多人,我可以使用Exif信息,例如确定匹配日期。 但有些人真的很老了,要么原始文件没有Exif信息,要么被我当时使用的任何愚蠢的resize软件所破坏。

因此,无法依赖元数据,我不得不求助于内容本身。 问题是原件的分辨率不同于Flickr上的分辨率(这是这项努力的重点)。 那么有没有办法让我将它们与某种模糊的相似性度量进行比较,这样可以让我设置一个需要人类输入的阈值?

我想知道一个图像是另一个图像的resize版本可以产生比一般相似性更好的结果。 任何语言的解决方案都可以,但Ruby会是一个加分:)

我建议使用ImageMagick编写解决方案脚本。 以下(从与IM比较图像的文档)将输出您可以使用的比较值。

convert image1 image2 \ -compose difference -composite -colorspace gray miff:- |\ identify -verbose - |\ sed -n '/^.*Mean: */{s//scale=2;/;s/(.*)//;s/$/*100\/32768/;p;q;}' | bc 

计算两个图像的标准化 颜色直方图 ,并使用某种方法比较它们(例如,直方图交叉点 – 参见上面的链接)。 请注意,需要标准化的直方图,因为图像呈现不同的分辨率。 如果图像如此不同,则它们不是相同的图像。 但如果它们相似,则您有以下两种情况之一:(i)它们是相同的图片或(ii)它们是不同的图片但呈现相似的全局颜色分布。

对于情况(ii),分割图像和矩形瓦片并重复该过程,比较相应的瓦片。 您正在尝试考虑图像的本地属性。 对结果进行排名并选择最佳匹配。