为图片添加"指纹"来进行高相似度图片检测

这是Adrian Rosebrock在PyImageSearch.com里写的一篇关于计算机可视化,图像处理,和构建图像搜索引擎的博客。

大约在五年前,我当时为一个相亲网站做开发工作。那个网站当时处于早期起步阶段,但却显露出了一定的强劲的吸引力。与其它相亲网站不同,这个公司凭借一种尊重道德的声誉来占据市场。这不是一个你去用于搭讪的网站。相反,这是一个你用来找到真实感情关系的网站。

由于数以百万计的风险投资(这发生在美国经济大萧条以前),他们的关于真爱和找到另一半的在线广告势如破竹的逆转了当时形势。他们被福布斯报道。他们甚至有机会能短暂出现在全国联播的电视台上。这些早期的成功带来了在启动阶段梦寐以求的指数增长———他们的用户数每月增加一倍。对他们来说事情看起来非常好。

但他们有一个严重的问题——色情泛滥问题。

一小部分相亲网站的用户上传色情图片,并将其设置为他们的资料图片。这种行为毁掉了许多客户的体验感----导致他们取消了他们的会员资格。

现在,也许对于一些相亲网站来说在某处出现一些色情图片没什么大不了。甚至,这仅仅被认为是正常或可以预料的,以及仅是网络相亲的一个可以接受和忽视的副产品。

然而,这种行为既不能被接受,也不能被忽视。

要知道的是,这是一家正在起步的以打造最佳的相亲天堂而上市的公司,这里应当没有任何污秽和低俗的东西,而这些东西正困扰着其他的相亲网站。简单地说,他们需要努力支撑起本就非常难维持的名声。

令人失望的是,那家相亲网站十分挣扎地在尝试阻止色情泛滥。他们雇佣了许多图片管理员,但他们能做的却只是一天八小时盯着管理界面手动移除掉那些被上传到社交网络的色情图片。

他们在这个问题上仅仅是在浪费金钱(更不用提那些无法统计的人力资源了)。因为它们能做的仅仅是缓解和控制大规模爆发,而不是从根本上解决问题。

大规模爆发在2009七月达到临界水平。这是第一次在八个月的时间里面,用户没有实现成倍增长,甚至还出现了下降的趋势。更糟糕的是,投资者威胁说,如果公司不能解决问题,他们将撤出资金。

事实上,如潮涌般的淫秽冲击这象牙塔,大势进攻,似乎想将其颠覆。

正当“相亲巨人”的膝盖开始屈曲时,我提出了一个更强大和长期的解决方案:如果我们使用图像指纹来对抗爆发怎么样?

我们都知道,每个图像都有“指纹”。就像可以通过指纹认证一个人,它也能用来辨别图像。

这导致了一个三阶段算法工具的实现

1.首先对一堆不合法的图片进行“ 指纹标识”,然后将这些图片存储在数据库里。

2.当用户上传一个新的资料图片时,我们将其与“ 图像指纹” 数据库里的图片进行比较。如果上传指纹匹配任何不合法的图像的指纹,我们将阻止用户将其设置为他们的资料图片。

3.当图片适配器识别出新的色情图片后,这些图片同样会被指纹标记然后存储在我们的数据库中,这样就可以创造一个一直发展的数据库来防止不合法的上传。

我们的方法,虽然不完美,但是能有效果。渐渐地,大规模的爆发被缓解了。尽管这些上传不能被完全停止,因为会有新的色情图片产生,但是通过这种算法我们成功将非法上传减少了至少百分之八十。

同样我们也做到了让投资者满意。他们继续资助我们直到经济大萧条。然后我们都失业了。

回首过去,我不禁大笑。我最终还是丢掉了工作。公司也并没有运行下去。甚至一些投资者都很难维持他们的资产。

但好在有一样东西还是留存了下来。那就是图片指纹标识算法。多年后的今天,我想和你分享这个算法的基础知识,希望你能够在自己的项目中使用它。

其中最大的问题便是,我们如何创建这个图片指纹或者说是图片散列?

你可以继续阅读后面的内容来寻找答案。

我们将要做些什么工作呢?

我们将尝试利用图像指纹来执行近副本重复图像检测。这种技术通常被称为“感知图像哈希” 或简单地称为“图像哈希”。

什么是图像指纹/散列?

图像哈希是一个检查图片特征然后根据这些特征构建一个特定的值来标识图片的过程。

例如,看看这个网页顶部的图像。当给定一个输入图像,我们将应用哈希函数基于图像的视觉特征计算图像哈希或者说图像散列。相似的图像也应该有类似的哈希。利用图像的散列算法,使得进行高相似度图片检测从根本上更加容易。

特别地是,我们将使用差别哈希或简单的称作Dhash算法来计算我们图像指纹或者说图片散列。简单的说,DHash算法关注的邻近的像素值之间的差异。然后,基于这些差异,构建哈希值。

我们为什么不用MD5,SHA-1,等算法?

不幸的是,我们不能在我们的工具中使用加密哈希算法。由于加密哈希算法的特性,在输入文件中的一点非常小的变化都将导致产生一个完全不同的哈希。在图像散列这个案例中,我们实际上希望相似的文件输入后也能产生相似的哈希值。

在哪些领域可以使用图像指纹?

就像我上面的例子,你可以使用图像指纹来维护一个存储有不合适的图像的数据库。并在用户试图上传类似图片时警告他们。

你可以建立一个类似TinEye的逆向图片搜索引擎,用来跟踪图片以及它们出现过的网站。

你甚至可以使用图像指纹来帮助管理自己的个人照片集。假设,你有一个装有你的照片库的部分备份的硬盘,然后需要一种方法来删除一些部分备份,并保留特定的图片副本-图像指纹法可以帮助你实现。

简单地说,你可以在任何与检测高相似度图片副本的情况中使用到图片指纹/哈希。

我们需要哪些库?

为了构建我们的图像指纹的解决方案,我们将利用三个主要的Python包:

PIL/Pillow用于辅助读取和加载图像。

Imagehash,里面包含我们的DHash工具。

以及NumPy、SciPy这两个Imagehash所需要的数学依赖包。

你可以通过执行下列命令安装所有需要的必备库:

第一步便是为我们的图像数据集创建指纹。

在你产生疑问前,我首先告诉你,我肯定不会使用工作中常碰到的色情图片来做例子的啦。哈哈。相反,我仅用一些普通图片数据来演示。

计算机视觉效应的研究中,Caltech-101数据集曾是一个传奇。它包含超过7500张图片遍及101个不同类型,包括人,摩托车和飞机。

从7500图像中,我随机选择了17张图片。

然后,从17个随机选择的图片,我通过随机改变他们的尺寸(加或者减几个百分点)来产生N张新的图片。我们的目标是找到这些近似图像---就像在一个干草堆里找针一样。

想创建一个类似的数据集来试试手?那就赶快下载Caltech-101数据集,取出17左右的图片,然后运行repo里面的gather.py脚本吧。

同样,除了宽度和高度之外,这些图像在各个方面都是相同的。由于他们没有同样的尺寸,我们不能依靠简单的MD5校验。更重要的是,类似的内容的图像可能会含有差异非常大的MD5哈希/散列。相反,我们可以借助图像哈希/散列,这样含相似的内容的图像也将有类似的哈希指纹。

好了,现在让我们开始写代码,来为我们的数据集创建“指纹”。创建一个新的文件,命名为index.py,开始工作吧:

我们要做的第一件事就是引入我们需要的包。我们将使用Python图像库的图像类来从磁盘上加载我们需要的图片。然后就用imagehash库可以用来构建可感知哈希。

然后,用argpars解析命令行参数,shelve将被用来作为一个简单停留在磁盘上的键值数据库(Python词典),glob是利用来更加容易的搜集图片的路径

现在,我们解析我们的命令行参数。首先,-dataset是图像的输入目录的路径。其次,-shelve是shelve database的输出路径。

接下来,我们打开shelve database库。该数据库将用来存储图像哈希。请看一下代码:

这部分是我们工作的集中处。我们开始循环我们的图像数据库,从磁盘加载它,然后创建图像的指纹(哈希/散列)。

现在,我们就来看整个教程中最最最重要的几行代码(真的很重要哈):

正如我前面提到的一样,有相同图片指纹(哈希)的图片被视作一致相同的。

因此,如果我们的目标是找到接近相同的图像;我们需要保证一个图片序列有相同的哈希值。

那几行代码就是这个功能。

前者提取图像的文件名。然后后者维持一系列有同样哈希值的图片名字序列。

要从我们的数据库提取图像指纹,并建立我们的哈希值数据库,用以下命令:

该脚本将运行几秒钟,一旦完成,你会得到一个名为db.shelve的包含图像的哈希值和文件名的键值对的文件。

这个基本的算法就是多年前我在那个公司工作时使用的算法。我们收集不合规的图像,并给每一张都构建“指纹”,然后存储在我们的数据库中。当一个新的图片出现,我们简单地计算它的哈希,再与数据库比较看它是否是已经被标记为不合规的那一类图片。

在接下来的步骤中,我将向您演示如何执行实际的搜索,以确定是否数据库中存在有对应哈希值的不合规图片。

步骤2:查找数据集

既然我们已经建立了图像指纹数据库,现在就让我们来搜索我们的数据集。

打开一个新的文件,命名为search.py,编写代码如下:

我们将再次导入我们需要的的相关的包。然后,解析命令行参数。我们需要三个开关-dataset,这是我们的原始图像数据集的路径;-shelve,shelve数据库,这里存有我们的键值对;-query,试图上传(要查询)的图片的路径。我们的目标是确定试图上传的图片是否已经在我们的数据库中存在类似的。

现在,让我们写代码来实际操作:

我们首先打开数据库,然后从磁盘加载图像,计算图像哈希,并找到所有具有相同哈希值的图片。

如果有任何图像具有相同的哈希值,我们在这些图像里循环,并将它们显示到屏幕上。

使用此代码,我们将能够确定图像的哈希值是否已经存在于数据库。

结果

如我刚才所说,我已经Caltech-101数据集提取了约7500张原始图像,随机选取17张,然后生成N个随机调整了几个百分点尺寸的新图片。

不同的图片尺寸仅有几个像素的差别——但是我们却不能简单的依赖该文件的MD5哈希值来达到目的(这一点我们将在“改进算法”部分加以阐述)。相反,我们需要利用图像哈希找到接近于重复的图像。

打开你的终端并执行以下命令:

如果一切顺利,你应该看到以下结果:

在左边我们有我们的输入图像。我们计算该图像的哈希值,然后在我们的数据库中是否有图像也具有相同的哈希值。

可以肯定的是。有两个图像在我们的数据集里有完全相同的指纹(哈希值,指纹听起来更形象),如图右所示。这些图像,虽然有完全相同的视觉内容,却并不完全相同!三个图像有不同的宽度和高度。

让我们尝试另一个输入图像:

以下是结果:

我们再次将输入图像置于左边。我们的图像指纹算法能够找到具有相同指纹的三个一致的图像,在右侧显示。

最后一个例子:

这一次我们的输入图像是左侧的摩托车。我们计算出这个图像的指纹,然后在我们的哈希值库里面查询对照。正如我们可以于右边看到的一样,我们能够确定有其他三个图像在数据库中具有相同的指纹。

改善我们的算法

可以再许多方面改善我们的算法,但最关键的是要考虑到哈希值相近,但不完全相同的情况。

For example, images in this post were only resized (either up or down in scale) by a few percentage points. If an image were resized by a larger factor, or if the aspect ratio was changed, the hashes would not be identical.

例如,这篇文章中的图像只是调整(要么加大,要么减小)几个百分点的尺寸。如果一个图像进行更大程度的改变,便将不能得到相同的哈希值了。

然而,图像却仍然是相似的。(这便是问题所在)

为了找到类似的,但不完全相同的图像,我们需要研究一下Hamming距离。Hamming距离可以用来计算不同哈希值的bit位数。显然,两幅只有一个bit位不同的哈希值的图像要比有10个bit位的差异的更相似。

然而,我们立刻便遇到了第二个问题-我们的算法的可扩展性。

考虑到这一点:当我们被给定一个输入图像并被指示要我们在我们的的数据库中找到所有相似的图像。然后我们将不得不计算输入图像与数据库中所有的图像的Hamming距离。

当我们的数据库越来越大以后,比较其中的所有图片的哈希值将话费大量时间。最终当数据库达到一定程度以后,这种线性的比较将变得不切实际。

解决方案:当超出本文例子范围以后,就得利用k-d树和VP树从线性的到亚线性的来减少搜索问题的复杂程度。

总结

在这篇博客中我们学习了如何构建和利用图像的哈希值来进行近似副本图像检测。这些图像哈希是用了图片的视觉特征来计算的。

就像指纹能识别一个人,图像哈希也可以识别图像。

使用关于图像指纹的知识,我们建立了一个系统来通过图像哈希来找到并识别具有相似图片特征的图片。

最后,我们演示了如何使用此图像哈希来快熟找到有近似特征的图片。

英文原文:https://realpython.com/blog/python/fingerprinting-images-for-near-duplicate-detection/

译者:青蒿素

这是Adrian Rosebrock在PyImageSearch.com里写的一篇关于计算机可视化,图像处理,和构建图像搜索引擎的博客。

大约在五年前,我当时为一个相亲网站做开发工作。那个网站当时处于早期起步阶段,但却显露出了一定的强劲的吸引力。与其它相亲网站不同,这个公司凭借一种尊重道德的声誉来占据市场。这不是一个你去用于搭讪的网站。相反,这是一个你用来找到真实感情关系的网站。

由于数以百万计的风险投资(这发生在美国经济大萧条以前),他们的关于真爱和找到另一半的在线广告势如破竹的逆转了当时形势。他们被福布斯报道。他们甚至有机会能短暂出现在全国联播的电视台上。这些早期的成功带来了在启动阶段梦寐以求的指数增长———他们的用户数每月增加一倍。对他们来说事情看起来非常好。

但他们有一个严重的问题——色情泛滥问题。

一小部分相亲网站的用户上传色情图片,并将其设置为他们的资料图片。这种行为毁掉了许多客户的体验感----导致他们取消了他们的会员资格。

现在,也许对于一些相亲网站来说在某处出现一些色情图片没什么大不了。甚至,这仅仅被认为是正常或可以预料的,以及仅是网络相亲的一个可以接受和忽视的副产品。

然而,这种行为既不能被接受,也不能被忽视。

要知道的是,这是一家正在起步的以打造最佳的相亲天堂而上市的公司,这里应当没有任何污秽和低俗的东西,而这些东西正困扰着其他的相亲网站。简单地说,他们需要努力支撑起本就非常难维持的名声。

令人失望的是,那家相亲网站十分挣扎地在尝试阻止色情泛滥。他们雇佣了许多图片管理员,但他们能做的却只是一天八小时盯着管理界面手动移除掉那些被上传到社交网络的色情图片。

他们在这个问题上仅仅是在浪费金钱(更不用提那些无法统计的人力资源了)。因为它们能做的仅仅是缓解和控制大规模爆发,而不是从根本上解决问题。

大规模爆发在2009七月达到临界水平。这是第一次在八个月的时间里面,用户没有实现成倍增长,甚至还出现了下降的趋势。更糟糕的是,投资者威胁说,如果公司不能解决问题,他们将撤出资金。

事实上,如潮涌般的淫秽冲击这象牙塔,大势进攻,似乎想将其颠覆。

正当“相亲巨人”的膝盖开始屈曲时,我提出了一个更强大和长期的解决方案:如果我们使用图像指纹来对抗爆发怎么样?

我们都知道,每个图像都有“指纹”。就像可以通过指纹认证一个人,它也能用来辨别图像。

这导致了一个三阶段算法工具的实现

1.首先对一堆不合法的图片进行“ 指纹标识”,然后将这些图片存储在数据库里。

2.当用户上传一个新的资料图片时,我们将其与“ 图像指纹” 数据库里的图片进行比较。如果上传指纹匹配任何不合法的图像的指纹,我们将阻止用户将其设置为他们的资料图片。

3.当图片适配器识别出新的色情图片后,这些图片同样会被指纹标记然后存储在我们的数据库中,这样就可以创造一个一直发展的数据库来防止不合法的上传。

我们的方法,虽然不完美,但是能有效果。渐渐地,大规模的爆发被缓解了。尽管这些上传不能被完全停止,因为会有新的色情图片产生,但是通过这种算法我们成功将非法上传减少了至少百分之八十。

同样我们也做到了让投资者满意。他们继续资助我们直到经济大萧条。然后我们都失业了。

回首过去,我不禁大笑。我最终还是丢掉了工作。公司也并没有运行下去。甚至一些投资者都很难维持他们的资产。

但好在有一样东西还是留存了下来。那就是图片指纹标识算法。多年后的今天,我想和你分享这个算法的基础知识,希望你能够在自己的项目中使用它。

其中最大的问题便是,我们如何创建这个图片指纹或者说是图片散列?

你可以继续阅读后面的内容来寻找答案。

我们将要做些什么工作呢?

我们将尝试利用图像指纹来执行近副本重复图像检测。这种技术通常被称为“感知图像哈希” 或简单地称为“图像哈希”。

什么是图像指纹/散列?

图像哈希是一个检查图片特征然后根据这些特征构建一个特定的值来标识图片的过程。

例如,看看这个网页顶部的图像。当给定一个输入图像,我们将应用哈希函数基于图像的视觉特征计算图像哈希或者说图像散列。相似的图像也应该有类似的哈希。利用图像的散列算法,使得进行高相似度图片检测从根本上更加容易。

特别地是,我们将使用差别哈希或简单的称作Dhash算法来计算我们图像指纹或者说图片散列。简单的说,DHash算法关注的邻近的像素值之间的差异。然后,基于这些差异,构建哈希值。

我们为什么不用MD5,SHA-1,等算法?

不幸的是,我们不能在我们的工具中使用加密哈希算法。由于加密哈希算法的特性,在输入文件中的一点非常小的变化都将导致产生一个完全不同的哈希。在图像散列这个案例中,我们实际上希望相似的文件输入后也能产生相似的哈希值。

在哪些领域可以使用图像指纹?

就像我上面的例子,你可以使用图像指纹来维护一个存储有不合适的图像的数据库。并在用户试图上传类似图片时警告他们。

你可以建立一个类似TinEye的逆向图片搜索引擎,用来跟踪图片以及它们出现过的网站。

你甚至可以使用图像指纹来帮助管理自己的个人照片集。假设,你有一个装有你的照片库的部分备份的硬盘,然后需要一种方法来删除一些部分备份,并保留特定的图片副本-图像指纹法可以帮助你实现。

简单地说,你可以在任何与检测高相似度图片副本的情况中使用到图片指纹/哈希。

我们需要哪些库?

为了构建我们的图像指纹的解决方案,我们将利用三个主要的Python包:

PIL/Pillow用于辅助读取和加载图像。

Imagehash,里面包含我们的DHash工具。

以及NumPy、SciPy这两个Imagehash所需要的数学依赖包。

你可以通过执行下列命令安装所有需要的必备库:

第一步便是为我们的图像数据集创建指纹。

在你产生疑问前,我首先告诉你,我肯定不会使用工作中常碰到的色情图片来做例子的啦。哈哈。相反,我仅用一些普通图片数据来演示。

计算机视觉效应的研究中,Caltech-101数据集曾是一个传奇。它包含超过7500张图片遍及101个不同类型,包括人,摩托车和飞机。

从7500图像中,我随机选择了17张图片。

然后,从17个随机选择的图片,我通过随机改变他们的尺寸(加或者减几个百分点)来产生N张新的图片。我们的目标是找到这些近似图像---就像在一个干草堆里找针一样。

想创建一个类似的数据集来试试手?那就赶快下载Caltech-101数据集,取出17左右的图片,然后运行repo里面的gather.py脚本吧。

同样,除了宽度和高度之外,这些图像在各个方面都是相同的。由于他们没有同样的尺寸,我们不能依靠简单的MD5校验。更重要的是,类似的内容的图像可能会含有差异非常大的MD5哈希/散列。相反,我们可以借助图像哈希/散列,这样含相似的内容的图像也将有类似的哈希指纹。

好了,现在让我们开始写代码,来为我们的数据集创建“指纹”。创建一个新的文件,命名为index.py,开始工作吧:

我们要做的第一件事就是引入我们需要的包。我们将使用Python图像库的图像类来从磁盘上加载我们需要的图片。然后就用imagehash库可以用来构建可感知哈希。

然后,用argpars解析命令行参数,shelve将被用来作为一个简单停留在磁盘上的键值数据库(Python词典),glob是利用来更加容易的搜集图片的路径

现在,我们解析我们的命令行参数。首先,-dataset是图像的输入目录的路径。其次,-shelve是shelve database的输出路径。

接下来,我们打开shelve database库。该数据库将用来存储图像哈希。请看一下代码:

这部分是我们工作的集中处。我们开始循环我们的图像数据库,从磁盘加载它,然后创建图像的指纹(哈希/散列)。

现在,我们就来看整个教程中最最最重要的几行代码(真的很重要哈):

正如我前面提到的一样,有相同图片指纹(哈希)的图片被视作一致相同的。

因此,如果我们的目标是找到接近相同的图像;我们需要保证一个图片序列有相同的哈希值。

那几行代码就是这个功能。

前者提取图像的文件名。然后后者维持一系列有同样哈希值的图片名字序列。

要从我们的数据库提取图像指纹,并建立我们的哈希值数据库,用以下命令:

该脚本将运行几秒钟,一旦完成,你会得到一个名为db.shelve的包含图像的哈希值和文件名的键值对的文件。

这个基本的算法就是多年前我在那个公司工作时使用的算法。我们收集不合规的图像,并给每一张都构建“指纹”,然后存储在我们的数据库中。当一个新的图片出现,我们简单地计算它的哈希,再与数据库比较看它是否是已经被标记为不合规的那一类图片。

在接下来的步骤中,我将向您演示如何执行实际的搜索,以确定是否数据库中存在有对应哈希值的不合规图片。

步骤2:查找数据集

既然我们已经建立了图像指纹数据库,现在就让我们来搜索我们的数据集。

打开一个新的文件,命名为search.py,编写代码如下:

我们将再次导入我们需要的的相关的包。然后,解析命令行参数。我们需要三个开关-dataset,这是我们的原始图像数据集的路径;-shelve,shelve数据库,这里存有我们的键值对;-query,试图上传(要查询)的图片的路径。我们的目标是确定试图上传的图片是否已经在我们的数据库中存在类似的。

现在,让我们写代码来实际操作:

我们首先打开数据库,然后从磁盘加载图像,计算图像哈希,并找到所有具有相同哈希值的图片。

如果有任何图像具有相同的哈希值,我们在这些图像里循环,并将它们显示到屏幕上。

使用此代码,我们将能够确定图像的哈希值是否已经存在于数据库。

结果

如我刚才所说,我已经Caltech-101数据集提取了约7500张原始图像,随机选取17张,然后生成N个随机调整了几个百分点尺寸的新图片。

不同的图片尺寸仅有几个像素的差别——但是我们却不能简单的依赖该文件的MD5哈希值来达到目的(这一点我们将在“改进算法”部分加以阐述)。相反,我们需要利用图像哈希找到接近于重复的图像。

打开你的终端并执行以下命令:

如果一切顺利,你应该看到以下结果:

在左边我们有我们的输入图像。我们计算该图像的哈希值,然后在我们的数据库中是否有图像也具有相同的哈希值。

可以肯定的是。有两个图像在我们的数据集里有完全相同的指纹(哈希值,指纹听起来更形象),如图右所示。这些图像,虽然有完全相同的视觉内容,却并不完全相同!三个图像有不同的宽度和高度。

让我们尝试另一个输入图像:

以下是结果:

我们再次将输入图像置于左边。我们的图像指纹算法能够找到具有相同指纹的三个一致的图像,在右侧显示。

最后一个例子:

这一次我们的输入图像是左侧的摩托车。我们计算出这个图像的指纹,然后在我们的哈希值库里面查询对照。正如我们可以于右边看到的一样,我们能够确定有其他三个图像在数据库中具有相同的指纹。

改善我们的算法

可以再许多方面改善我们的算法,但最关键的是要考虑到哈希值相近,但不完全相同的情况。

For example, images in this post were only resized (either up or down in scale) by a few percentage points. If an image were resized by a larger factor, or if the aspect ratio was changed, the hashes would not be identical.

例如,这篇文章中的图像只是调整(要么加大,要么减小)几个百分点的尺寸。如果一个图像进行更大程度的改变,便将不能得到相同的哈希值了。

然而,图像却仍然是相似的。(这便是问题所在)

为了找到类似的,但不完全相同的图像,我们需要研究一下Hamming距离。Hamming距离可以用来计算不同哈希值的bit位数。显然,两幅只有一个bit位不同的哈希值的图像要比有10个bit位的差异的更相似。

然而,我们立刻便遇到了第二个问题-我们的算法的可扩展性。

考虑到这一点:当我们被给定一个输入图像并被指示要我们在我们的的数据库中找到所有相似的图像。然后我们将不得不计算输入图像与数据库中所有的图像的Hamming距离。

当我们的数据库越来越大以后,比较其中的所有图片的哈希值将话费大量时间。最终当数据库达到一定程度以后,这种线性的比较将变得不切实际。

解决方案:当超出本文例子范围以后,就得利用k-d树和VP树从线性的到亚线性的来减少搜索问题的复杂程度。

总结

在这篇博客中我们学习了如何构建和利用图像的哈希值来进行近似副本图像检测。这些图像哈希是用了图片的视觉特征来计算的。

就像指纹能识别一个人,图像哈希也可以识别图像。

使用关于图像指纹的知识,我们建立了一个系统来通过图像哈希来找到并识别具有相似图片特征的图片。

最后,我们演示了如何使用此图像哈希来快熟找到有近似特征的图片。

英文原文:https://realpython.com/blog/python/fingerprinting-images-for-near-duplicate-detection/

译者:青蒿素


相关内容

  • 光谱仪使用说明
  • --致力于实验室与检查机构 测量"万用表"专家--光纤光谱仪 软件使用说明书 一.光谱仪说明 天津津科浩强公司生产的80系列紫外-可见-近红外波段光谱仪利用C T 对称交叉光路的原来,在有机化学.生物化学.药品分析.食品检验.医药卫生.环境保护.生命科学等各个领域的科研.生产工作 ...

  • 指纹考勤机说明书内容
  • 指纹考勤系列机型功能列表 一 硬件操作 1. 键盘定义: ①MENU 菜单键:在验证状态长按此键4秒钟进入管理界面: ②OK 确认键:确认当前操作: ③ ESC取消键:取消当前操作: ④ ▲向上键:往上翻动菜单: ⑤ ▼向下键:往下翻动菜单: ⑥ ● 电源键:设备的电源开关键: ⑦ 0-----9 ...

  • 胞外酶对堆肥中微生物群落演替的影响
  • 中国环境科学 2009,29(5):524~530 China Environmental Science 胞外酶对堆肥中微生物群落演替的影响 苏峰峰, 曾光明*, 黄丹莲, 冯冲凌, 胡 霜 (湖南大学环境科学与工程学院, 湖南 长沙 410082) 摘要:研究了添加黄孢原毛平革菌胞外酶对农业废物 ...

  • 液质联用发展史+液质联用仪原理+应用
  • 液相色谱-质谱联用 一.液质发展史(写不写都行) 1.质谱发展简史 质谱作为检测器,具有灵敏度高.专属性好的特点,与其他色谱技术相连接,已广泛的应用于各个研究领域.欲学习液质,我们先了解一下质谱发展的过程-- 19世纪末,E.Goldstein在低压放电实验中观察到正电荷粒子,随后W.Wein发现正 ...

  • 门禁考勤常见问题集锦
  • 一卡通常见问题集锦 一. 高优: 问题一:添加控制器 系统设臵-控制器注册-增加(序列号查看:按两次ESC,两次8,长按ENT) 问题二:通讯不上(485通讯) 1. 2. 3. 4. 通讯端口设臵是否正确(系统设臵-通讯端口设臵): 485接线是否正确(A+,B-对应于控制器的485+,485-) ...

  • 四年级科学
  • 第一单元 我们周围的空气 1.空气的性质 教学目标 过程与方法: △会运用感官和工具认识到空气是有体积的,占据一定空间,而且不能随意缩小. △会利用小工具制作验证假设的工具. △小组动手完成空气水"火箭"的制作. 知识与技能: △知道空气是占据一定空间的,是不能随意缩小的. △知 ...

  • 分子生物学部分概念
  • DNA 指纹图谱 DNA finger print/genetic finger print :1984年英国莱斯特大学的遗传学家Jefferys 及其合作者首次将分离的人源小卫星DNA 用作基因探针,同人体核DNA 的酶切片段杂交,获得了由多个位点上的等位基因组成的长度不等的杂交带图纹,这种图纹极 ...

  • 论文怎么检测相似度入口
  • 论文怎么检测相似度入口 又到了一年一度写毕业论文的时候了,论文怎么检测相似度就是一个大问题了,因为毕业论文写作一般不是太难,因为有创意的论文毕竟是少数,多数论文都是东找西摘而来,但是这样写的论文就牵扯到一个大问题,就是如果提交的论文被发现有抄袭嫌疑的话,就很麻烦了,严重了就很难毕业了,所以我们一定要 ...

  • 用于中药鉴定的指纹图谱技术
  • Vol.17Supplement2007年增刊检验检疫科学INSPECTIONANDQUARANTINESCIENCE □科普园地□ 用于中药鉴定的指纹图谱技术 王羚鸿1,2 邹明强2 俞腾飞1 (1.内蒙古医学院药学院,呼和浩特,010059: )2.中国检验检疫科学研究院,北京,100025 摘 ...