
感知哈希如何找到重命名后的重复漫画
2026年6月1日
感知哈希如何找到重命名后的重复漫画
你重命名了一个文件。重新压缩了一个压缩包。从不同来源下载了同一卷。按照一般标准,这些现在是"不同"的文件——不同的名称、不同的校验码、不同的文件大小。
然而,里面的漫画是一样的。每一页都是一样的。如果你试图整理数字图书库,这些几乎相同的重复文件恰恰是标准重复查找工具会遗漏的。
这就是感知哈希解决的问题,也是 Comic Duplicate Scanner 核心技术。
为什么标准文件比较不够用
大多数"重复文件查找"工具通过计算每个文件的校验码,标记共享相同校验码的文件。这对于精确副本效果完美。
但对于漫画档案,这种方法会遗漏现实中最常见的重复文件:
| 场景 | 校验码相同? | 实际是重复? |
|---|---|---|
| 不同文件名的副本 | 否 | 是 |
| 以不同质量重新压缩 | 否 | 是 |
| 以不同内部结构重新打包 | 否 | 很可能是 |
| 从两个不同来源下载 | 否 | 经常是 |
| 精确的字节对字节副本 | 是 | 是 |
感知哈希的做法
感知哈希是从图像的视觉内容而非文件字节计算出的短指纹。最广泛使用的算法 pHash 大致工作原理如下:
- 将图像调整为小的固定大小(如 32×32 像素)
- 转换为灰度
- 应用离散余弦变换(DCT)提取频率分量
- 保留低频部分——这捕获了整体结构
- 将每个值与中位数比较,生成位串
视觉内容相似的两张图像产生的哈希汉明距离很低。
这些步骤直接带来两个重要特性:
- 分辨率无关紧要。 第 1 步在计算之前将每张图像调整为相同的固定网格。同一页面的 1200px 扫描和 3000px 扫描都会缩小为相同的 32×32 缩略图,并产生相同的哈希值。
- 色彩模式无关紧要。 第 2 步在比较之前转换为灰度。同一页面的彩色扫描和灰度(黑白)扫描产生几乎相同的哈希值,因为算法只分析亮度结构,而不是颜色值。
这些步骤直接带来两个重要特性:
- 分辨率无关紧要。 第 1 步在计算之前将每张图像调整为相同的固定网格。同一页面的 1200px 扫描和 3000px 扫描都会缩小为相同的 32×32 缩略图,并产生相同的哈希值。
- 色彩模式无关紧要。 第 2 步在比较之前转换为灰度。同一页面的彩色扫描和灰度(黑白)扫描产生几乎相同的哈希值,因为算法只分析亮度结构,而不是颜色值。
Comic Duplicate Scanner 如何应用这项技术
Comic Duplicate Scanner 在档案级别应用感知哈希:
- 提取 — 打开每个 CBZ 或 CBR 档案并读取内部图像
- 每页哈希 — 每页获得一个感知哈希
- 比较 — 建立相似度索引,找到共享高比例匹配页面的档案
- 评分 — 根据匹配页数和匹配程度分配匹配置信度
当两个档案 90% 的页面匹配时,误报的概率接近于零。
实际案例
案例1:不同来源,不同文件名
从一个网站下载了 HxH_v12_en.cbz,从另一个网站下载了 Hunter_X_Hunter_Volume_12.cbz。校验码比较:无匹配。感知哈希:各章节页面几乎相同 → 标记为重复。
案例2:重新压缩的档案 有人将 CBZ 通过压缩工具处理,将每张 JPEG 降至 80% 质量。校验码改变了。感知哈希:视觉上相同 → 检测到。
案例3:内部页面重新排列或重命名
一个档案的页面命名为 001.jpg,另一个为 page_001.jpg。感知哈希不查看内部文件名 → 仍然检测到。
案例5:彩色扫描与黑白扫描 您有同一本漫画册的两份副本:一份是早期数字版本的彩色扫描,另一份是后来再版的灰度扫描。文件大小不同,色彩深度不同,视觉外观不同。但由于 dHash 在哈希之前会转换为灰度,两个副本都简化为相同的亮度指纹 → 被标记为重复项。这是几乎所有其他重复检测工具完全忽略的情况。
案例5:彩色扫描与黑白扫描 您有同一本漫画册的两份副本:一份是早期数字版本的彩色扫描,另一份是后来再版的灰度扫描。文件大小不同,色彩深度不同,视觉外观不同。但由于 dHash 在哈希之前会转换为灰度,两个副本都简化为相同的亮度指纹 → 被标记为重复项。这是几乎所有其他重复检测工具完全忽略的情况。
感知哈希的局限性
重大视觉编辑会打破匹配。 轻微水印或轻微裁剪通常不影响检测。
非常低分辨率的图像不可靠。
跨卷视觉风格相似的漫画。 偶尔可能出现误报——审查界面让你在提交删除前检查缩略图。
使用 Comic Duplicate Scanner
Comic Duplicate Scanner 是一款原生 Mac 应用,将感知哈希技术带到整个图书库。它将选定的重复文件移至废纸篓(非永久删除)。
清理库后,搭配 iPhone 上的 BiblioFuse 使用,获得单一经过整理的阅读来源。