#perceptual #hash #fingerprint

无std blockhash

用于检测相似图像的感知哈希算法

6个版本 (1个稳定版)

1.0.0 2024年4月8日
0.5.0 2022年9月17日
0.4.0 2022年3月29日
0.3.0 2021年8月12日
0.1.0 2020年5月14日

#112 in 图像

每月 33 次下载
3 crate 中使用

MIT 许可证

1.5MB
779

blockhash

Crates.io CI status MIT License

这是用于检测相似图像的Blockhash算法的实现,可以生成16位、64位、144位和256位的感知哈希。

默认支持image crate,但可以轻松添加对任何图像类型的支持。

文档

用法

use blockhash::blockhash64;

let img = image::open("images/example.png").unwrap();
let hash = blockhash64(&img);

assert_eq!(hash.to_string(), "c7c48f8989c77e0c");

Blockhash算法

这是算法工作原理的基本概述。请注意,此说明使用浮点数,但库本身仅使用整数运算以避免任何舍入错误。

为了演示算法,我们将计算以下图像的64位哈希

首先,我们通过取红色、绿色和蓝色分量的平均值将其转换为灰度图像

然后,我们将图像划分为64个(8×8)块,并计算每个块中所有像素的平均亮度

接下来,我们将块划分为4个水平带,并为每个带找到中值

亮度高于中值的块代表1,亮度低于中值的块代表0。这为我们提供了哈希的64位,从左到右,从上到下读取

我们可以将哈希表示为十六进制字符串

c7c48f8989c77e0c

许可证

本项目采用MIT许可证

依赖关系