pHash 和 dHash 分别是什么?
pHash(Perceptual Hash)基于 DCT(离散余弦变换)。它将图片缩小到 32×32,转为灰度,然后用 DCT 提取频域特征,生成 64 位指纹。两张视觉相似的图片,即使尺寸和格式不同,pHash 的汉明距离通常小于 5。
dHash(Difference Hash)更简单:将图片缩小到 9×8,比较每个像素与右侧像素的亮度差异,生成 64 位指纹。dHash 对色彩渐变和微调更敏感。
如何有效对抗这两种算法?
对抗 pHash 需要改变图片的频域特征:调整亮度/对比度、修改色彩饱和度、裁切边缘像素。
对抗 dHash 需要改变相邻像素的差值关系:添加轻微噪点、翻转/旋转微小角度。
最有效的方法是组合多种操作:先清除元数据,再做像素偏移,最后重新编码。MuTool Image Scrubber 可以完成元数据清理和重新编码步骤。