#hash #image #fuzzy #convert-images #pdq

pdqhash

感知哈希,最初由Facebook设计。即使在某些修改后也能识别相同的图像。

2个版本

0.1.1 2022年7月8日
0.1.0 2022年7月8日

#58 in #convert-images

Download history 202/week @ 2024-03-14 158/week @ 2024-03-21 113/week @ 2024-03-28 97/week @ 2024-04-04 61/week @ 2024-04-11 109/week @ 2024-04-18 52/week @ 2024-04-25 95/week @ 2024-05-02 98/week @ 2024-05-09 97/week @ 2024-05-16 117/week @ 2024-05-23 109/week @ 2024-05-30 117/week @ 2024-06-06 118/week @ 2024-06-13 118/week @ 2024-06-20 81/week @ 2024-06-27

464 每月下载量

Apache-2.0

4MB
601

PDQ 哈希

此哈希是对PDQ算法的纯Rust实现,该算法由Facebook(现在为Meta)于2019年开发并开源。它指定了一种转换,将图像转换为二进制格式('PDQ哈希'),其中'感知相似'的图像会产生相似的结果。它旨在为图像表示提供行业标准,以便在威胁缓解方面进行合作。

计算

PDQ算法于2019年由Facebook(现在为Meta)开发和开源。它指定了一种转换,将图像转换为二进制格式('PDQ哈希'),其中'感知相似'的图像会产生相似的结果。它被设计用来提供一个行业标准的图像表示,以便在威胁缓解方面进行合作。

Obtain PDQ Hash of an image

比较两个图像简化为计算它们表示之间的距离(例如,汉明距离),或作为%位相似度。 比较两个位字符串

(这里仅使用16位以便更容易理解;PDQ哈希表示256位)

考虑额外的图像转换

此外,还可以通过仅操作处理后期阶段中创建的离散余弦变换来高效地推断原始图像的旋转和镜像的PDQ哈希。 比较两个位字符串 示例:镜像原始图像的PDQ哈希仅需要操作变换

对应PDQ哈希所需的DCT操作

  • 镜像Y -> 取消交替列的符号
  • 镜像X -> 取消交替行的符号
  • 镜像主对角线 -> 转置
  • 镜像非对角线 -> 取消非对角线符号,转置
  • 旋转90 -> 取消交替列的符号,转置
  • 旋转180 -> 取消非对角线符号
  • 旋转270 -> 取消交替行的符号,转置

提供相似性弹性

生成的哈希对某些转换具有弹性,一些转换的弹性比其他转换更高,以检测额外的尝试性操作。通常,保留整体结构的图像比更改像素位置和更大的像素变化区域具有更高的弹性。 获取图像的PDQ哈希

导致相似哈希的转换

  • 文件格式更改
  • 质量降低
  • 轻微裁剪和移动
  • 旋转(当比较额外哈希时)
  • 调整大小
  • 轻微水印
  • 镜像(当比较额外哈希时)
  • 应用噪声或过滤器
  • 轻微徽标

依赖项

~13MB
~57K SLoC