jpeg_ghost_quality — IMGFORENSICS compression op

• 資料種類:images → image2d

• 呼叫: import fullseye as fs; fs.ledger.jpeg_ghost_quality(ghosts, qualities=None) -> 'np.ndarray'(要直接呼叫實作,import imgforensics; imgforensics.jpeg_ghost_quality(ghosts, qualities=None) -> 'np.ndarray';從台帳取用則 opsimgforensics.get("jpeg_ghost_quality"))

用法

幽靈圖序列 → 逐像素殘差最小的品質的地圖。image2d。

省略 qualities 時假定為 jpeg_ghost_map 的預設值(40..95 step 5) —— 張數不一致時為 ValueError(不回傳索引與品質錯位的圖)。

回傳的是以品質本身為像素值的 (H, W),所以值域不是 [0, 1]。顯示時請自行正規化(本 op 回傳的是數值,而不是圖片)。

★ 合成後哪怕儲存一次,這個 argmin 就不能用了。 2026-09-06 測得。背景 q92、素材 q60,在 128x128 中貼入 32x32:

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

條件 貼上部的眾數品質 背景的眾數品質

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

合成後不儲存 60(正確) 95

合成後以 q95 儲存 95(與背景相同) 95

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

原因在於掃掠的殘差隨品質單調遞減 —— 若最後的儲存品質位於掃掠的上端,argmin 就會在所有像素上黏在那裡(實測:儲存後的殘差平均從 230.7 → 5.9e-02 一路直線下降)。實際的竄改必然要經過儲存,所以這種讀出在真實影像上會變成常數圖。既有測試 test_jpeg_ghost_finds_the_pasted_quality 能通過,是因為合成後一次也沒有儲存(它本身是正確的單元測試,argmin 的實作也沒有錯 —— 只是讀出方式不適合實際場景)。

替代方案:掃掠方向上殘差曲線的谷的深度(局部凹陷)。在同一實驗中逐像素取 ROC,argmin 讀出為 AUC 0.500(與隨機相同),谷深讀出則為 AUC 0.997 / 偽陽性 1 % 時檢出率 0.944 (examples/poc_forensics_roc.py)。即便如此,把整體以 q60 重新儲存後就會降到 0.475 —— 「JPEG 幽靈對後處理很脆弱」才是正確的概括。

參考(範例資料、文獻)

• 範例資料目錄(下載 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 · noise_inconsistency_map · copy_move_regions · watermark_embed

同類別(compression)

error_level_map · jpeg_quality_estimate · jpeg_ghost_map


*Provenance: imgforensics.py — IMGFORENSICS 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

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