差异哈希算法(Different Hash Algorithms,dHash),像aHash和pHash一样,dHash易于实现,相比于它的简单,其实它的识别更为准确。作为一种感知算法的实现,dHash比aHash相近,但比aHash效果更好。aHash关注于平均值,pHash关注频率模式,dHash则基于渐变。下面介绍下dHash算法的工作原理。
算法步骤
- 缩小尺寸。最快速去掉高频和细节的办法就是缩小民族教育。在这里,收缩到9*8的大小,以便它有72的像素点(之后会解释为什么这样)。通过忽略尺寸和纵横比,不管图片如何伸缩,该hash都能匹配相似的图片。
- 简化色彩。转化为灰度图。把缩放后的图片转化为256阶的灰度图。将72个像素转变为72个颜色(为达到最佳效果,可以在缩放尺寸前简化色彩,或者缩放和简化色彩同时进行)
- 计算差异值。dHash算法工作在相邻像素之间,这标识了相对的渐变方向。这样每行9个像素之间产生了8个不同的差异,一共8行,则产生了64个差异值。
- 获取指纹。如果左边的像素比右边的更亮,则记录为1,否则为0(这里用1代表p[x]<p[x+1],设置位从左及右,从上及下的大边)
<