watermark_capacity — IMGFORENSICS 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"))

Usage

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": [...]}.

References (sample data, literature)

• 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.

Runnable examples (verified samples that actually call this op)

• image_forensics_audit — py -3.11 examples/image_forensics_audit.py

Ops the type connects to (they accept table as input)

evidence_quantile

Same category (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.