jpeg_quality_estimate — IMGFORENSICS compression op

• 数据种类:image2d → table

• 调用: import fullseye as fs; fs.ledger.jpeg_quality_estimate(image, max_step: 'int' = 64, n_coeff: 'int' = 21) -> 'dict'(要直接调用实现,import imgforensics; imgforensics.jpeg_quality_estimate(image, max_step: 'int' = 64, n_coeff: 'int' = 21) -> 'dict';从台账取用则 opsimgforensics.get("jpeg_quality_estimate"))

用法

由已解码图像盲估量化表与 JPEG 质量。table。

不读取文件的 DQT,而是只从像素来估计(要点就在这里,即使是重新保存为 PNG / 被粘贴的图像,也能看出“原本是 JPEG 质量 N”)。取 8x8 块 DCT,对每个系数估计梳状间隔(Fan & de Queiroz 2003),再从按 IJG 公开的缩放规则生成的标准表族中选出最吻合的质量。

返回(dict):

jpeg_compressed 根据 n_coeff 个系数中出现梳状的有几个来判断的

bool。并不是“是 JPEG”的证明(见下方 caveats)

quality 估计质量 1..100(没有梳状时为 None)

table 估计出的 (8, 8) 量化步长(0 = 无法估计)

n_quantized 出现梳状的系数数 / n_coeff

fit_error 与所选质量的标准表的平均绝对差

caveats 此数值无法断言的事

实测(tests/test_imgforensics.py::test_jpeg_quality_estimate_recovers_quality,将 256x256 的 1/f^1.6 图像用 Pillow 编码 → 解码后估计):

======= ========= =============== ============

真 Q 估计 Q 出现梳状的系数 fit_error

======= ========= =============== ============

95 95 11/20 0.091

90 90 19/20 0.579

80 80 13/20 1.308

70 71 12/20 2.083

60 60 9/20 2.111

50 52 7/20 1.857

40 40 6/20 3.333

30 None 4/20 —

======= ========= =============== ============

在低质量一侧崩溃是原理上的极限。质量越低,高频系数越多地被量化为 0,读取梳状的材料本身就从图像中消失了(“出现梳状的系数”一列就是它消失的过程)。质量 30 时材料不足,不返回估计(quality=None)。不在这里勉强给出答案,是本 op 的设计方针。

而且在无压缩 PNG 上为 jpeg_compressed=False / quality=None (用 4 个 seed 确认,并在同一测试中固定)。关键在于此处不默默回答“质量 100”,否则“无压缩”与“几乎无损的 JPEG”会得到相同的答案。

参考(示例数据、文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

• 算法的正典(作者、年份)与用途见上面的族使用指南。

可运行的示例(实际调用该算子并已验证的样例)

• image_forensics_audit — py -3.11 examples/image_forensics_audit.py

类型可衔接的下一个算子(可接受 table 作为输入)

evidence_quantile

同类别(compression)

error_level_map · jpeg_ghost_map · jpeg_ghost_quality


*Provenance: imgforensics.py — IMGFORENSICS 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.