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 中使用
1.5MB
779 行
blockhash
这是用于检测相似图像的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许可证。