【问题标题】:Detecting image equality at different resolutions检测不同分辨率下的图像相等性
【发布时间】:2009-11-10 05:24:01
【问题描述】:

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

对于他们中的许多人,我可以只使用 Exif 信息,例如确定匹配的日期。但是有些真的很旧,或者原始文件没有 Exif 信息,或者被我当时使用的任何愚蠢的调整大小软件破坏了。

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

我想知道一张图片是另一张图片的调整大小版本可以产生比一般相似性更好的结果。任何语言的解决方案都可以,但 Ruby 会更好:)

【问题讨论】:

    标签: ruby image image-processing computer-vision similarity


    【解决方案1】:

    有趣的问题,顺便说一句:)

    缓慢的解决方案 - 成功的绝佳机会

    使用尺度不变的特征检测器在两张图像中找到对应的特征。如果这些特征在相似的位置以高分匹配,那么你就有了匹配项。

    我建议SIFT 为图像中的特征生成比例和旋转不变的 128 整数描述符。 SURF(在 OpenCV 中可用)是另一个(更快)特征点检测器。

    您可以通过蛮力(将每个描述符与另一个图像中的描述符进行比较)来匹配两个图像之间的特征,这是 O(n^2) 但非常快(尤其是在 VL SIFT 实现中)。但是,如果您需要将一张图像中的特征与多张图像(您可能必须这样做)进行比较,您应该构建一个特征树,以便将其与另一张图像的特征进行查询。 K-D 树很有用,OpenCV 有一个很好的实现。

    快速解决方案 - 可能有效

    将高分辨率图像下采样到低分辨率尺寸,并使用类似SAD 之类的相似性度量(其中两个图像中一个像素周围的 3x3 像素块之间的差异之和就是分数)确定匹配。

    【讨论】:

    • 您如何将“快速解决方案”应用于关系数据库?
    【解决方案2】:

    我建议使用 ImageMagick 编写解决方案的脚本。以下(来自comparing images with 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
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多