watermark opimage2d → phashimport fullseye as fs; fs.ledger.watermark_extract(image, n_bits: 'int', wavelet: 'str' = 'haar', level: 'int' = 1) -> 'np.ndarray' (実装を直接呼ぶなら import imgforensics; imgforensics.watermark_extract(image, n_bits: 'int', wavelet: 'str' = 'haar', level: 'int' = 1) -> 'np.ndarray'、台帳から引くなら opsimgforensics.get("watermark_extract"))透かしの ブラインド抽出。bool の 1-D(phash 語彙)を返す。
同じ DWT / ブロック分割で中帯域係数の対の大小を読むだけ。原画像も鍵も要らない —— これは 秘匿ではなく完全性の印であり、鍵が無いので 誰でも消せるし 誰でも書ける。所有権の主張には使えない。
返りが phash 語彙なので、埋めたビット列との一致は :func:hash_distance で
そのまま数えられる(BER = hash_distance(sent, got) / n_bits)。
語彙を合わせてあるのはそのため。
PyWavelets 必須(:class:ImportError)。
py -3.11 examples/image_forensics_audit.pyphash を入力に取れる)hash_distance · watermark_embed · watermark_capacity
watermark)watermark_embed · watermark_capacity
Provenance: imgforensics.py — IMGFORENSICS operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.