watermark op• Data kinds: image2d × phash → table
• Call: import fullseye as fs; fs.ledger.watermark_capacity(image, bits, strengths=(0.02, 0.05, 0.1, 0.2, 0.4), wavelet: 'str' = 'haar', level: 'int' = 1, jpeg_quality=None) -> 'dict' (to call the implementation directly, import imgforensics; imgforensics.watermark_capacity(image, bits, strengths=(0.02, 0.05, 0.1, 0.2, 0.4), wavelet: 'str' = 'haar', level: 'int' = 1, jpeg_quality=None) -> 'dict'; from the registry, opsimgforensics.get("watermark_capacity"))
Sweep the trade-off between embedding strength and PSNR / BER. table.
For each strength it actually runs embed → extract, and returns
psnr_db PSNR between the original and the watermarked image (value range [0, 1] basis, MAX=1)
ber bit error rate of the extraction (counted with hash_distance)
clipped fraction of pixels of the watermarked image that fall outside [0, 1].
The overflow is always lost when saving, so raising the strength looking only at PSNR
increases "degradation you did not measure"
If a quality is passed in jpeg_quality, ber_jpeg, extracted after passing the watermarked image through a real JPEG, is also included (Pillow required. When omitted, the column is absent altogether —— it is not run by default, so that the returned columns do not vary with the environment).
The return is {"capacity_bits": int, "n_bits": int, "rows": [...], "caveats": [...]}.
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
• image_forensics_audit — py -3.11 examples/image_forensics_audit.py
table as input)watermark)watermark_embed · watermark_extract
*Provenance: imgforensics.py — IMGFORENSICS operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.