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.