+
95
-

如何判断两张图片的相似度?

如何判断两张图片的相似度?

有哪些方式方法?

网友回复

+
15
-

暴力判断

比较两个图片是否相等有很多方法,最直观的,也最容易想到的算法就是遍历两个图片的每一个像素,最终求差来得到两个图片是否相等。 这种方式的优点是速度很快,比较精度特别高,但是如果两个图片稍微有一点不同,哪怕只是一个像素的差距,都会返回False。 因此,该算法的适用性并不广泛,除非你的需求就是要判断两张图片严格相等,但是多数情况下,我们需求都是比较两张图片是否相似。所以,接下来,我们来看看市面上主流的图像相似度的判别算法。

图像相似的判别算法

图像相似也有很多判别法,我没有去尝试每一种方法,但是基本上所有的方法都了解了一遍,在这里总结一下主流的算法,同时也是巩固一下。

直方图比较法

直方图比较法是一个比较基础,也比较简单快捷的一种办法,目前我就是使用这个方法作为项目的主力相似性判别法。 直方图比较的原理是,将所要比较的两幅图片的直方图数据,然后再将直方图数据归一化之后方便比较,最终得到一个相似指数,通过设定相似指数的边界,我们可以得到是否是同一张图片。 直方图算法运行速度很快,也是比较图片相似度算法中很受欢迎的算法,如果你的项目中,需要比较有着极高相似度的图片,而且你需要将这种具有极高相似度的图片归为同一个图片,那么就选用直方图算法吧!

哈希算法

感知哈希算法(pHash,全拼:Perceptual hash algorithm)是哈希算法的一种,哈希算法还包括平均值哈希算法(aHash),差异值哈希算法(dHash),经过对比之后,最终决定采用pHash算法来作为辅助相似性判别法。

pHash简单来说,是通过感知哈希算法对每张图片生成一个“指纹”字符串,然后通过比较“指纹”字符串的距离(通常采用汉明距离,Hamming distance,两个等长字符串之间的汉明距离,是两个字符串对应位置的不同字符的个数),这个距离越小,代表两个图片越相似,一般的,我们有下面规则: Hamming distance = 0 -> particular like Hamming distance < 5 -> very like hamming distance > 10 -> different picture 关于aHash, pHash, dHash的区别,我总结如下: · aHash:平均值哈希。转灰度压缩之后计算均值,最终通过像素比较得出哈希值,速度很快,但敏感度很高,稍有变化就会极大影响判定结果,精准度较差。因此比较适用于缩略图比较,最常用的就是以图搜图。 · pHash:感知哈希。在均值哈希基础上加入DCT(离散余弦变化,下面也会涉及,这里不展开),两次DCT就...

点击查看剩余70%

+
15
-

推荐一个开源项目:https://github.com/ha...

点击查看剩余70%

我知道答案,我要回答