sensor op• 데이터 종류: image2d × fingerprint → table
• 호출: import imgforensics; imgforensics.fingerprint_correlate(image, fingerprint, denoiser: 'str' = 'wiener', sigma: 'float' = 0.02, exclude: 'int' = 11) -> 'dict'(또는 opsimgforensics.get("fingerprint_correlate"))
이미지 한 장을 지문에 대조합니다. 판정은 돌려주지 않습니다 —— 증거량과 주의서를 돌려줍니다.
> 아래 상세 설명은 원문입니다 —— 요약과 제목은 번역되어 있습니다.
残差 `W = I - denoise(I) と参照信号 I·K` の巡回相互相関を FFT で取り、
正規化相互相関のピークと PCE(peak-to-correlation energy)を返す。
返り(`table` 語彙の dict):
`pce` PCE。しきい値は同梱しない(下の caveats 参照)
`ncc_peak` 正規化相互相関のピーク値([-1, 1])
`peak_shift ピークの位置 (dy, dx)`。(0, 0) でなければ位置がずれている
= 切り出し / 手ぶれ補正 / リサイズを疑う手がかり
`n_pixels` 使った画素数
`caveats` この数値が言えないことの列(文字列)
`peak_shift を返すのは重要で、(0, 0)` 以外のピークは「同じセンサだが
切り出されている」か「たまたまの相関」のどちらかである。どちらかは
この op には決められない。実測では別センサの照合はいつも `(0, 0)` 以外に
ピークが立ち(`(-51, -60) (31, -8)` など毎回ばらばら)、同一センサは
必ず `(0, 0)` に立つ。
再圧縮で PRNU は消える(`tests/test_imgforensics.py::test_prnu_dies_under_recompression`、
8 枚から作った指紋・128x128):
========== ========== ==========
再圧縮 PCE 無圧縮比
========== ========== ==========
無圧縮 7246 1.00
品質 95 6174 0.85
品質 90 4214 0.58
品質 75 1412 0.19
品質 50 530 0.07
品質 30 207 0.03
========== ========== ==========
つまり 低い PCE は「別のカメラ」ではなく「情報が残っていない」かもしれない。
ここでしきい値を同梱すると、圧縮された画像を機械的に「別カメラ」と判定する
道具になってしまう。
黙って間違う経路(実測): `fingerprint` に指紋ではなく普通の画像を渡すと、
shape は合っているので例外は出ず、PCE も有限値が返る。指紋は `(H, W)` の
float64 なので既存の `image2d` 述語を完全に満たし、実行時には区別できない。
そこで入口で「ゼロ平均でない」ものを :class:ValueError で弾く
(`|mean| > 0.05 * std`)。実測
(`tests/test_imgforensics.py::test_fingerprint_gate_rejects_plain_images`):
============================== ==============
渡したもの `|mean|/std`
============================== ==============
:func:sensor_fingerprint の返り 4.8e-18
普通の自然画像 4.626
暗い画像(平均 0.015) 4.626
高コントラスト画像 1.801
============================== ==============
比はスケール不変なので、暗い画像でも明るい画像でも同じように弾ける
(0.05 のしきい値から 1.5 桁以上離れている)。
それでも完全ではない: 自分でゼロ平均化した画像を渡すとゲートは通り、
PCE = -5.97 という有限値が返る(実測)。つまり実行時チェックは
片側しか守れない。これが「指紋を `image2d` に相乗りさせず語彙を分ける」
判断の根拠で、詳細は `opsimgforensics` の docstring にある。
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• image_forensics_audit — py -3.11 examples/image_forensics_audit.py
table 를 입력으로 받는 것)sensor)sensor_fingerprint · fingerprint_strength_map
*Provenance: imgforensics.py — IMGFORENSICS 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.