乐趣区

关于android:如何判断两张图片是否类似

如何判断两张图是否类似?
查到了很多算法,流程都是“特征提取”,“特色比照”。以下列出了三个常见算法的通俗的介绍,

均匀哈希算法

均匀哈希算法是三种 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 公布!

退出移动版