sensor op• 데이터 종류: images → fingerprint
• 호출: import fullseye as fs; fs.ledger.sensor_fingerprint(images, denoiser: 'str' = 'wiener', sigma: 'float' = 0.02, zero_mean: 'bool' = True) -> 'np.ndarray'(구현을 직접 호출하려면 import imgforensics; imgforensics.sensor_fingerprint(images, denoiser: 'str' = 'wiener', sigma: 'float' = 0.02, zero_mean: 'bool' = True) -> 'np.ndarray', 원장에서 가져오려면 opsimgforensics.get("sensor_fingerprint"))
여러 장으로부터 PRNU 센서 지문 K 를 최대우도 추정합니다(Chen et al. 2008).
K = Σ_i W_i I_i / Σ_i I_i²(W_i = I_i - denoise(I_i)). 촬상 모델 I = I⁰ + I⁰·K + Θ 하에서 이것이 K의 최우 추정량이 된다 —— 밝은 화소일수록 PRNU가 강하게 나오므로(곱셈적 결함이기 때문에), 밝기로 가중한 평균이다.
반환은 (H, W)의 float64이며, zero_mean=True(기본값)이면 행·열 평균을뺀 다음 표준 편차 1로 정규화되어 있다. 정규화는 fingerprint_correlate 의 PCE를 스케일 불변으로 하기 위해서이며, 지문의 절대적인 강도는 fingerprint_strength_map이 따로 반환한다.
images는 같은 shape의 2장 이상. 리사이즈해서 맞추면 안 된다 —— PRNU는 화소의 물리적 위치 그 자체이므로, 보간하는 순간 지문은 사라진다(shape 불일치는 ValueError).
장수와 분리도의 실측(tests/test_imgforensics.py::test_prnu_separates_two_sensors, 128x128·PRNU 강도 3%·읽기 잡음 σ=0.01, 기본값 denoiser="wiener"):
====== ======================== ================= =================
장수 참 K와의 상관 동일 센서 PCE 다른 센서 PCE
====== ======================== ================= =================
2 +0.727 5295 16.5
4 +0.809 6472 14.5
8 +0.859 7246 13.1
16 +0.892 7755 -12.3
====== ======================== ================= =================
"참 K와의 상관"을 재는 것이 중요하다. PCE만 보고 있으면지문이 센서의 패턴을 전혀 잡지 못해도 "분리된 것처럼 보인다" —— 실제로 이 구현은 한 번 그 상태에 있었다(_wiener_denoise의 docstring). PCE는 "같은 센서에서 일관되게 나타나는 무언가"를 재므로, 그것이 PRNU라는 보장은 PCE 자체에는 없다.
denoiser="wavelet"(PyWavelets 필수)은 같은 조건에서 상관 +0.745 〜 +0.901, 동일 센서 PCE 6068 〜 8852로 일관되게 강하다. 기본값을 "wiener"로 해 둔 것은 optional 의존을 필수로 만들지 않기 위해서이지, 정확도로 고른 것이 아니다.
이것은 합성 잡음에서의 값이며, 실제 카메라에서는 피사체의 내용이 잔차로 새어 들어가므로자릿수 단위로 작아진다. 이 표는 "구현이 올바르게 동작하고 있다"는 것의 고정이지, 실운용의 임계값이 아니다.
• 샘플 데이터 카탈로그(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
• poc_prnu_camera_fingerprint — py -3.11 examples/poc_prnu_camera_fingerprint.py
fingerprint 를 입력으로 받는 것)fingerprint_correlate · fingerprint_strength_map
sensor)fingerprint_correlate · fingerprint_strength_map
*Provenance: imgforensics.py — IMGFORENSICS 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.