noise op• Data kinds: image2d → image2d
• Call: import fullseye as fs; fs.ledger.noise_inconsistency_map(image, block: 'int' = 16) -> 'np.ndarray' (implementation को सीधे call करना हो तो import imgforensics; imgforensics.noise_inconsistency_map(image, block: 'int' = 16) -> 'np.ndarray', registry से लेना हो तो opsimgforensics.get("noise_inconsistency_map"))
हर block के noise standard deviation का map। image2d।
Immerkær 1996 के 3x3 mask से high-frequency component लेता है, हर non-overlapping block-वर्ग block के लिए sigma = sqrt(pi/2) / 6 * mean(|conv|) की गणना करता है और उसे block constants के रूप में वापस फैलाता है। यदि चिपकाया गया region किसी अलग exposure, compression ratio या camera से आया है, तो यह मान अपने आसपास के सापेक्ष एक step बनाता है।
Accuracy अच्छी है (tests/test_imgforensics.py से पक्की की गई)। ऊपरी आधे में सही σ 0.01 और निचले आधे में 0.04 वाली synthetic image पर (8 bit में 2.55 और 10.20, अनुपात 4.0), अनुमान 2.533 और 10.214, अनुपात 4.033 है —— निरपेक्ष मान और अनुपात दोनों 1% के भीतर।
यह map क्या नहीं बता सकता:
• Texture को noise गिना जाता है। Immerkær का mask Laplacian जैसा है, इसलिए बारीक patterns वाले regions ऊँचा σ दिखाते हैं। मापा गया: दोनों आधों में समान noise σ=0.01 वाली image में केवल निचले आधे में checkerboard जोड़ने पर, pattern पक्ष 15.97 / सपाट पक्ष 2.58 = 6.2 गुना। कोई step "छेड़छाड़" के बजाय "एक pattern" हो सकता है।
• इसके उलट, smooth की गई छेड़छाड़ σ को घटाती है और दिखाई देती है, लेकिन सपाट background पर चिपकाई गई सपाट वस्तु कोई अंतर नहीं दिखाती।
• JPEG block दर block noise हटाता है, इसलिए compressed images पर, जब तक block 8 का गुणज न हो, यह block grid से टकराता है और धारियाँ दिखती हैं (default 16, 8 का गुणज है)।
• ★ image की सीमा पर छेड़छाड़ से असंबंधित एक step हमेशा दिखता है (2026-09-06 को मापा गया)। चूँकि convolution mode="reflect" से मुड़कर वापस आता है, बाहरी blocks में high frequencies घटती हैं और σ कम आता है। शून्य छेड़छाड़ और uniform noise वाली 256x256 image पर, सबसे बाहरी block पट्टी 8.815 देती है बनाम केंद्र में 9.537 (-7.6 %)। उसी image का raw local std केवल 0.03491 और 0.03563 के बीच बदलता है (-2.0 %), इसलिए अधिकांश अंतर estimator से पैदा होता है। median से विचलन के रूप में: सबसे बाहरी 0.7173 / केंद्र 0.5948 = 1.21 गुना। per-pixel ROC लेने पर, केवल यही zero-point AUC को 0.5 से दूर कर देता है (examples/poc_forensics_roc.py में 0.447 मापा गया)। बाहरी 1 block को निर्णय से बाहर रखें, या हर स्थान के लिए median लें।
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।
• image_forensics_audit — py -3.11 examples/image_forensics_audit.py
• poc_forensics_roc — py -3.11 examples/poc_forensics_roc.py
image2d को input के रूप में लेते हैं)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 note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.