常用的图像相似度比较算法:哈希算法

常用的图像相似度比较有三种哈希算法:

1.均值哈希算法 aHash 2.差值哈希算法 dHash 3.感知哈希算法 pHash

均值哈希算法 步骤 1.缩放:图片缩放为 8*8 ,保留结构,除去细节。 2.灰度化:转换为灰度图。 3.求平均值:计算灰度图所有像素的平均值。 4.比较:像素值大于平均值记作 1 ,相反记作 0 ,总共 64 位。 5.生成 hash :将上述步骤生成的 1 和 0 按顺序组合起来既是图片的指纹( hash )。 6.对比指纹:将两幅图的指纹对比,计算汉明距离,即两个 64 位的 hash 值有多少位是不一样的,不相同位数越少,图片越相似。

差值哈希算法 差值哈希算法相较于均值哈希算法,前期和后期基本相同,只有中间比较 hash 有变化。 步骤 1.缩放:图片缩放为 8* 9 ,保留结构,除去细节。 2.灰度化:转换为灰度图。 3.求平均值:计算灰度图所有像素的平均值。 这步没有,只是为了与均值哈希做对比 4.比较:像素值大于后一个像素值记作 1 ,相反记作 0 。本行不与下一行对比,每行 9 个像素, 八个差值,有 8 行,总共 64 位 5.生成 hash :将上述步骤生成的 1 和 0 按顺序组合起来既是图片的指纹( hash )。 6.对比指纹:将两幅图的指纹对比,计算汉明距离,即两个 64 位的 hash 值有多少位是不一样 的,不相同位数越少,图片越相似。

感知哈希算法 均值哈希算法过于严格,不够精确,更适合搜索缩略图,为了获得更精确的结果可以选择感知哈希 算法,它采用的是 DCT (离散余弦变换)来降低频率的方法。 步骤: 1.缩小图片: 32 * 32 是一个较好的大小,这样方便 DCT 计算 2.转化为灰度图:把缩放后的图片转化为灰度图。 3.计算 DCT:DCT 把图片分离成分率的集合 4.缩小 DCT DCT 计算后的矩阵是 32 * 32 ,保留左上角的 8 * 8 ,这些代表图片的最低频率。 5.计算平均值:计算缩小 DCT 后的所有像素点的平均值。 6.进一步减小 DCT :大于平均值记录为 1 ,反之记录为 0. 7.得到信息指纹:组合 64 个信息位,顺序随意保持一致性。 8.最后比对两张图片的指纹,获得汉明距离即可。

经验分享 程序员 微信小程序 职场和发展