发布信息

图像检索项目中检测图像相似度的方法分享

作者:软荐小编      2024-07-14 09:02:34     206

代码相似度检测 软件_代码相似性检测_代码相似度检测工具

本文代码可在微信公众号“01二进制”后台回复“检测图像相似度”获取。

前言

我目前正在做一个海量的图片检索项目,可以简单理解为“以图搜图”。这个功能最初是由搜索引擎推广的,后来在电商领域变得非常实用。在做这个图片检索项目之前,我查了一些资料。现在项目已经接近尾声,在这里分享一些简单的信息。本文先介绍一下图片检索最基础的知识——用 Python 检测图片相似度。

说到检测“某物”的相似度,相信很多人第一个想到的就是把需要比较的事物构造成两个向量,然后用余弦相似度来比较两个向量之间的距离。这种方法应用很广泛,比如比较两个用户兴趣的相似度,比较两段文本的相似度。然而在比较图像的相似度时,这种方法并不常用,原因后面会讲到,这里先介绍一下另外两个概念——图像指纹和汉明距离。

图像指纹

图像指纹与人的指纹一样,是一种身份的象征。简单来说,图像指纹就是将图像经过一定的哈希算法计算后得到的一组二进制数。如下图所示:

代码相似度检测工具_代码相似度检测 软件_代码相似性检测

给定一个输入图像,我们可以使用哈希函数并根据图像的视觉外观计算其“图像哈希”值。相似的头像应该具有相似的哈希值。构建图像指纹的算法称为感知哈希算法。

汉明距离

通过上面对图像指纹的描述,我们知道可以利用感知哈希算法将图像转换成某种字符串,而还有一种叫做汉明距离的方法来比较字符串。以下定义摘自维基百科:

在信息论中代码相似度检测 软件,两个等长字符串之间的汉明距离是两个字符串对应位置上不同字符的个数,也就是将一个字符串转换成另一个字符串需要替换的字符个数。

汉明距离通常用于衡量两幅图像的差异性,汉明距离越小,相似度越高,汉明距离为0表示两幅图像完全相同。

感知哈希算法

常用的感知哈希算法有三种,分别是平均哈希算法(aHash)、感知哈希算法(pHash)、差值哈希算法(dHash)。很多博客都写了这三种哈希算法的介绍和比较,很多库也支持通过调用相关函数直接计算哈希值。这里就不多说了,推荐一篇叫《图像相似度中的哈希算法》的文章。

代码可在微信公众号“01二进制”后台回复“检测图片相似度”获取

三种hash算法的实现代码如下:

阿哈什

代码相似度检测 软件_代码相似度检测工具_代码相似性检测

达什

代码相似度检测 软件_代码相似度检测工具_代码相似性检测

代码相似度检测工具_代码相似度检测 软件_代码相似性检测

当然你也可以选择安装ImageHash库然后调用相应的hash函数进行计算。

比较两张图片的相似度的思路

那么看到这里,我们对于比较两张图片的相似度就有了一个简单的想法,只需要通过感知哈希算法获取图片的图像指纹,然后比较两个哈希值之间的汉明距离就可以了。

具体来说,阮一峰介绍了一个简单的图像搜索原理,可以分为以下几个步骤:

缩小尺寸。将图像缩小到8x8大小,一共64个像素点。这一步的目的是去除图像的细节,只保留结构、明暗等基本信息,丢弃由于大小、比例不同造成的图像差异。简化颜色。将缩小后的图像转化为64级灰度。也就是说代码相似度检测 软件,所有像素点一共只有64种颜色。计算平均值。计算所有64个像素点的平均灰度。比较像素点的灰度。将每个像素点的灰度与平均值进行比较,如果大于等于平均值​​,记为1;如果小于平均值,记为0。计算哈希值。将上一步的比较结果组合起来,形成一个64位的整数,这个整数就是这幅图像的指纹。组合的顺序并不重要,只要所有图像的顺序一致就可以。

这种方法对于查找相同图片很有效,但对于“相似图片”的搜索效果很差,而且不能进行局部搜索,所以通常用来“检测图片是否侵权”。目前Google图像识别和百度图像识别几乎都使用深度学习进行相似性检索,下一篇文章会介绍。

为什么余弦相似度不适合检测图像相似度?

最后我们来讨论一下为什么不使用余弦相似度来检测图像的相似度。我们在开头就说过,如果需要使用余弦相似度来衡量相似度,需要先构造两个向量。通常我们将图像转化为像素向量(以像素灰度值的频率为依据)来计算两幅图像的相似度。这种做法其实就是计算两幅图像的直方图的相似度。但是这样只保留了像素的频率信息,丢失了像素的位置信息,信息损失太大,只在特定的场景下适用。使用余弦相似度来表示图像相似度的代码也可以在后台回复微信公众号“01二进制”获取“检测图像相似度”。

总结

本文介绍的方法都是使用非深度学习的方法来检测图像相似度。虽然它们很容易理解,但每种方法都有其局限性。要创建一个图像检索系统,第一步就是比较图像的相似度。然而,现在大多数都使用深度学习的方法提取图像特征,然后进行比较,这大大提高了准确性。后面我会介绍如何通过深度学习提取图像特征来比较图像的相似度。

由于能力有限,在整理描述的过程中难免会存在一些错误,如果大家有什么建议,可以留言批评指正。

代码相似性检测_代码相似度检测工具_代码相似度检测 软件

相关内容 查看全部