Skip to content

图片相似度

图片哈希

均值哈希算法 (ahash):均值哈希算法就是利用图片的低频信息。将图片缩小至 8*8,总共 64 个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。将缩小后的图片,转为 64 级灰度。计算所有 64 个像素的灰度平均值,将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为 1;小于平均值,记为 0,将上一步的比较结果,组合在一起,就构成了一个 64 位的整数,这就是这张图片的指纹。

感知哈希算法 (phash):感知哈希算法是一种比均值哈希算法更为健壮的算法,与均值哈希算法的区别在于感知哈希算法是通过 DCT(离散余弦变换)来获取图片的低频信息。先将图像缩小至 32*32,并转化成灰度图像来简化 DCT 的计算量。通过 DCT 变换,得到 32*32 的 DCT 系数矩阵,保留左上角的 8*8 的低频矩阵(这部分呈现了图片中的最低频率)。再计算 8*8 矩阵的 DCT 的均值,然后将低频矩阵中大于等于 DCT 均值的设为 1,小于 DCT 均值的设为 0,组合在一起,就构成了一个 64 位的整数,组成了图像的指纹。

差异值哈希算法 (dhash):差异值哈希算法将图像收缩小至 8*9,共 72 的像素点,然后把缩放后的图片转化为 256 阶的灰度图。通过计算每行中相邻像素之间的差异,若左边的像素比右边的更亮,则记录为 1,否则为 0,共形成 64 个差异值,组成了图像的指纹。

其他知名哈希算法:

  • Block Hash:块哈希
  • Median Hash:中值哈希
  • Wavelet Hash:小波哈希

参考:

直方图方法

  • 单通道直方图和三直方图

特征提取

  • SIFT

Emedding 图片嵌入 CLIP

骨干网络

  • 简单 CNN:基本嵌入
  • MobileNetV3:论文 | 参考(imagededup),轻量快速的 CNN
  • VGG16 +?:骨干网络,实现未知
  • clip-vit-large-patch14 | OpenAI ViT 大模型
  • SWAV:代码 | 论文 | 参考,无监督对比聚类
  • ViT 微调版本,参考 Hugging Face

第三方库

参考文献