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

检测两个图像在视觉上是否相同

  •  38
  • Bemmu  · 技术社区  · 16 年前

    有时两个图像文件在文件级上可能不同,但人类会认为它们是相同的。鉴于此,现在假设您有一个巨大的图像数据库,您希望知道人类是否会认为数据库中存在某个图像X。如果所有图像都有一个可感知的散列/指纹,那么可以对图像X进行散列,很容易就可以看到它是否在数据库中。

    我知道有关于这个问题的研究,也有一些算法存在,但是有没有什么工具,比如UNIX命令行工具或库,我可以用来计算这样的散列,而不必从头实现一些算法?

    try $image->Sample("160x160!");
    try $image->Modulate(saturation=>-100);
    try $image->Blur(radius=>3,sigma=>99);
    try $image->Normalize();
    try $image->Equalize();
    try $image->Sample("16x16");
    try $image->Threshold();
    try $image->Set(magick=>'mono');
    ($blob) = $image->ImageToBlob();
    

    编辑:

    8 回复  |  直到 16 年前
        1
  •  14
  •   sanxiyn    16 年前
        2
  •  5
  •   endolith    15 年前

    互相关或相位相关将告诉您图像是否相同,即使存在噪声、降级以及水平或垂直偏移。使用基于FFT的方法将使其比问题中描述的算法快得多。

    Registering an Image Using Normalized Cross-Correlation

    phase correlation 也描述了 making it scale- and rotation-invariant :

    通过首先将图像转换为对数极坐标,该方法可以扩展到确定两幅图像之间的旋转和缩放差异。由于傅里叶变换的特性,旋转和缩放参数可以以平移不变的方式确定。

        3
  •  4
  •   Martin Beckett    16 年前

    颜色直方图适用于已调整大小、重新采样等的相同图像。
    如果你想匹配不同的人在同一个地标上的照片,那就更麻烦了——看看haar分类器。Opencv是一个伟大的免费图像处理库。

        4
  •  1
  •   Scottie T    16 年前

    Microsoft Live Image Search 只是 added

    一些机器学习技术,如支持向量机、神经网络、朴素贝叶斯分类器或贝叶斯网络,最适合解决这类问题。我在前三篇文章中分别写了一篇来对手写数字进行分类,这本质上就是图像模式识别。

        5
  •  0
  •   Ape-inago    16 年前

    将图像调整为1x1像素大小。。。如果它们是精确的,那么它们很可能是同一张图片。。。 那么3x3,如果所有9个像素都是精确的。。。好机会等。

        6
  •  0
  •   FryGuy    16 年前

        7
  •  -1
  •   user35978    16 年前

        8
  •  -1
  •   Dan Dascalescu    8 年前

    DPEG “复制媒体管理器” ,但其代码未打开。这是一个非常古老的工具-我记得在2003年使用过它。