noise op• 数据种类:image2d → image2d
• 调用: import fullseye as fs; fs.ledger.noise_inconsistency_map(image, block: 'int' = 16) -> 'np.ndarray'(要直接调用实现,import imgforensics; imgforensics.noise_inconsistency_map(image, block: 'int' = 16) -> 'np.ndarray';从台账取用则 opsimgforensics.get("noise_inconsistency_map"))
逐块噪声标准差的地图。image2d。
用 Immerkær 1996 的 3x3 掩模取高频成分,对 block 见方的非重叠块分别求出 sigma = sqrt(pi/2) / 6 * mean(|conv|),以块常数还原。若贴入的区域来自不同的曝光、不同的压缩率、不同的相机,该值就会与周围形成台阶。
精度很好(由 tests/test_imgforensics.py 固定)。在真实 σ 上半为 0.01、下半为 0.04(8 bit 下为 2.55 与 10.20,比 4.0)的合成图像上,估计为 2.533 与 10.214,比 4.033 —— 绝对值和比都在 1% 以内。
这张图无法断言的事:
• 纹理会被算作噪声。Immerkær 的掩模类似拉普拉斯算子,所以细纹理区域的 σ 会偏高。实测:在上下噪声同为 σ=0.01、只在下半加了棋盘格的图像中,纹理侧 15.97 / 平坦侧 2.58 = 6.2 倍。即使有台阶,也可能不是“篡改”而是“纹理”。
• 反之,被平滑过的篡改 σ 会下降所以能看见,但在平坦背景上贴入平坦物体时不会出现差异。
• JPEG 逐块削减噪声,所以对已压缩的图像,若 block 不是 8 的倍数,就会与块网格干涉而出现条纹(默认 16 是 8 的倍数)。
• ★ 图像边缘必定会出现与篡改无关的台阶(2026-09-06 实测)。由于卷积以 mode="reflect" 折返,外围块的高频减少,σ 偏低。在零篡改、均匀噪声的 256x256 上,最外层块带为 8.815,中心为 9.537(-7.6 %)。同一图像的原始局部 std 为 0.03491 与 0.03563(-2.0 %),差别很小,所以差异的大半是估计器造成的。以与中位数的偏离来看,最外层 0.7173 / 中心 0.5948 = 1.21 倍。逐像素取 ROC 的话,仅此一项就会使零点 AUC 偏离 0.5 (examples/poc_forensics_roc.py 实测为 0.447)。请把外围 1 个块排除在判定之外,或按位置分别取中位数。
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• 算法的正典(作者、年份)与用途见上面的族使用指南。
• image_forensics_audit — py -3.11 examples/image_forensics_audit.py
• poc_forensics_roc — py -3.11 examples/poc_forensics_roc.py
image2d 作为输入)perceptual_hash · fingerprint_correlate · error_level_map · jpeg_quality_estimate · jpeg_ghost_map · copy_move_regions · watermark_embed · watermark_extract
noise)—
*Provenance: imgforensics.py — IMGFORENSICS 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.