noise opimage2d → image2dimport 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% 以内。
この地図が言えないこと:
block を 8 の倍数に
しないとブロック格子と干渉して縞が出る(既定 16 は 8 の倍数)。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 ブロックを
判定から外すか、中央値を場所ごとに取ること。py -3.11 examples/image_forensics_audit.pypy -3.11 examples/poc_forensics_roc.pyimage2d を入力に取れる)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 operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.