noise op• Datenarten: image2d → image2d
• Aufruf: import fullseye as fs; fs.ledger.noise_inconsistency_map(image, block: 'int' = 16) -> 'np.ndarray' (die Implementierung direkt: import imgforensics; imgforensics.noise_inconsistency_map(image, block: 'int' = 16) -> 'np.ndarray'; aus dem Register: opsimgforensics.get("noise_inconsistency_map"))
Eine Karte der Rauschstandardabweichung pro Block. image2d.
Nimmt mit der 3x3-Maske von Immerkær 1996 den hochfrequenten Anteil, berechnet je nicht überlappendem block-Quadrat sigma = sqrt(pi/2) / 6 * mean(|conv|) und setzt es als Blockkonstante zurück. Stammt ein eingefügter Bereich aus einer anderen Belichtung, Kompressionsrate oder Kamera, bildet dieser Wert gegenüber der Umgebung eine Stufe.
Die Genauigkeit ist gut (fixiert durch tests/test_imgforensics.py). Bei einem synthetischen Bild mit wahrem σ 0.01 in der oberen und 0.04 in der unteren Hälfte (2.55 und 10.20 in 8 bit, Verhältnis 4.0) ist die Schätzung 2.533 und 10.214, Verhältnis 4.033 —— Absolutwerte wie Verhältnis innerhalb von 1%.
Was diese Karte nicht aussagen kann:
• Textur wird als Rauschen gezählt. Die Maske von Immerkær ist laplaceartig, daher zeigen Bereiche mit feinen Mustern ein hohes σ. Gemessen: In einem Bild mit gleichem Rauschen σ=0.01 in beiden Hälften und einem nur der unteren Hälfte hinzugefügten Schachbrettmuster: Musterseite 15.97 / flache Seite 2.58 = 6.2-fach. Auch eine Stufe kann "ein Muster" statt "einer Manipulation" sein.
• Umgekehrt senkt geglättete Manipulation σ und ist sichtbar, aber wird ein flaches Objekt auf einen flachen Hintergrund eingefügt, zeigt sich kein Unterschied.
• JPEG entfernt Rauschen blockweise, daher interferiert bei komprimierten Bildern block, wenn es kein Vielfaches von 8 ist, mit dem Blockraster und es entstehen Streifen (der Default 16 ist ein Vielfaches von 8).
• ★ Am Bildrand tritt immer eine von Manipulation unabhängige Stufe auf (gemessen 2026-09-06). Da die Faltung mit mode="reflect" spiegelt, nehmen in den äußeren Blöcken die hohen Frequenzen ab und σ fällt niedrig aus. Bei einem 256x256-Bild mit null Manipulation und gleichmäßigem Rauschen: äußerster Blockstreifen 8.815 gegenüber 9.537 im Zentrum (-7.6 %). Die rohe lokale std desselben Bildes unterscheidet sich nur mit 0.03491 und 0.03563 (-2.0 %), daher erzeugt der Schätzer den Großteil des Unterschieds. Als Abstand vom Median: außen 0.7173 / Zentrum 0.5948 = 1.21-fach. Bei pixelweiser ROC verschiebt allein dies die Nullpunkt-AUC weg von 0.5 (0.447 gemessen in examples/poc_forensics_roc.py). Den äußeren 1 Block von der Entscheidung ausnehmen oder den Median ortsabhängig bilden.
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• image_forensics_audit — py -3.11 examples/image_forensics_audit.py
• poc_forensics_roc — py -3.11 examples/poc_forensics_roc.py
image2d als Eingabe)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. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.