代码之家  ›  专栏  ›  技术社区  ›  makerofthings7

如何比较两个图像以检测重复项和裁剪重复项?

  •  3
  • makerofthings7  · 技术社区  · 15 年前

    我如何比较两幅图像并确定它们是否100%相似,或者只是改变了颜色,还是裁剪?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    好吧,抽象地说,你需要定义一个相似性函数,用来比较两个图像。要确定图像是否“100%相似”(相等),可以执行以下操作:

    • 比较图像的大小
    • 如果图像大小相同,只需从彼此中减去像素
    • if ( sum( abs( pixel_1_i - pixel_2_j ) ) / num_pixels < threshold ) return true

    如果图像的颜色不同,或被裁剪

    • 对两幅图像应用边缘检测器
    • 计算互相关(在频域中,FFT)
    • 找到最高峰
    • 将(较小的)边贴图放置在确定的位置
    • 计算绝对误差
    • if (error < threshold) return true

    进一步研究:

        2
  •  2
  •   ChrisF    15 年前

    以下是一个相当简单的方法来解决这个问题,对于从稍微不同的角度拍摄的同一主题的两张不同的照片来说,这并不适用,但是如果您有两张想要验证的同一张图片的副本,那么就可以了。

    两个完全相同的图像的情况很简单-只需在像素阵列中循环,从另一个像素阵列中减去RGB值。如果差异小于一个小公差,则像素是相同的。因此,一旦你发现像素差大于公差,你就知道图像是不同的。

    您可以允许一定数量或百分比的差异,以允许由压缩人工制品引起的差异。

    为了检查颜色的变化,您可以查看HLS(色调、亮度和饱和度)值。如果像素有相同的L&S值,但H值不同,那么只是颜色不同(我想)。

    裁剪更困难,因为您必须尝试在较大的图像中找到较小图像的位置。

        3
  •  1
  •   dajuric    12 年前

    可以使用对象描述符,例如:

    筛- http://en.wikipedia.org/wiki/Scale-invariant_feature_transform

    冲浪- http://en.wikipedia.org/wiki/SURF

    然后使用计算的描述符比较图像。这些描述符将使你能够处理旋转,缩放和轻微变化的图像。

    你可以用雅阁网(SURF实现)。