共计 884 个字符,预计需要花费 3 分钟才能阅读完成。
如何判断两张图是否类似?
查到了很多算法,流程都是“特征提取”,“特色比照”。以下列出了三个常见算法的通俗的介绍,
均匀哈希算法
均匀哈希算法是三种 Hash 算法中最简略的一种,它通过上面几个步骤来取得图片的 Hash 值,这几个步骤别离是(1) 缩放图片;(2)转灰度图; (3) 算像素均值;(4)依据类似均值计算指纹。具体算法如下所示:
失去图片的 ahash 值后,比拟两张图片 ahash 值的汉明间隔,通常认为汉明间隔小于 10 的一组图片为类似图片。
例子:
其中转为 8 ×8 尺寸的 Lena 对应的数据矩阵为:
很容失去如上矩阵所有元素的均值 a = 121.328125, 将上述矩阵中大于或等于 a 的元素置为 1, 小于 a 的元素置为 0,可得:
所以可得 Lena 图的 aHash 为
1011111010011110100111011010100110101011101000110000111000101100
将二进制模式 ahash 转十六进制 hash 为
be9e9da9aba30e2c
将两张图片进行均匀 hash 后,再计算出各自的汉明间隔
图 Lena(noise):
图 Barbara:
图汉明间隔:
感知哈希算法
感知哈希算法是三种 Hash 算法中较为简单的一种,它是基于 DCT(离散余弦变换)来失去图片的 hash 值(补充:对于 DCT 具体如何转换参考 https://www.jianshu.com/p/b92…),其算法几个步骤别离是 (1) 缩放图片;(2)转灰度图; (3) 计算 DCT;(4)放大 DCT; (5) 算平均值;(6) 计算指纹。具体算法如下所示:
差别哈希算法
相比 pHash,dHash 的速度要快的多,相比 aHash,dHash 在效率简直雷同的状况下的成果要更好,它是基于突变实现的。其算法几个步骤别离是(1) 缩放图片(2)转灰度图;(3)算差别值;
(4)算平均值;(5)计算指纹。具体算法如下所示:
文章参考了:http://t.zoukankan.com/kalafi…
具体均匀 hash 的测试代码详见:
https://github.com/yuanting20…
本文由博客一文多发平台 OpenWrite 公布!
正文完