compression op• 데이터 종류: image2d → image2d
• 호출: import fullseye as fs; fs.ledger.error_level_map(image, quality: 'int' = 90, normalize: 'bool' = True) -> 'np.ndarray'(구현을 직접 호출하려면 import imgforensics; imgforensics.error_level_map(image, quality: 'int' = 90, normalize: 'bool' = True) -> 'np.ndarray', 원장에서 가져오려면 opsimgforensics.get("error_level_map"))
ELA(오차 수준 분석). 지정 품질로 재압축한 차분의 지도. image2d.
Krawetz 2007. JPEG는 8x8 블록마다 양자화하므로, 한 번 압축된 영역은같은 품질로 재압축해도 오차가 작고, 나중에 붙인 / 그린 영역은 오차가크게 남는다는 생각에 기초한다.
normalize=True(기본값)이면 최댓값으로 나누어 [0, 1]로 한다(보기 위해). False이면 8 bit 계조 그대로의 절대 오차(세기 위해).
Pillow가 없으면 ImportError. 근사로 떨어지지 않는다. DCT의 양자화만을 numpy로 흉내 내면, 부호화기의 반올림·색 공간 변환·채널 솎아내기가 사라진 *별개의 것*이된다. 그것을 ELA라고 부르면, 이 족이 없애려 하는 "그럴듯하게 틀린다"를스스로 하게 된다.
이 지도가 말할 수 없는 것(tests/test_imgforensics.py가 수치로 고정. 256x256의 1/f^1.6 화상의 중앙 64x64에 다른 화상을 붙인 것):
==================================== =============== =============== =========
원래 화상 붙인 부분 ELA 배경의 ELA 비
==================================== =============== =============== =========
무압축(한 번도 JPEG 안 거침) 0.1966 0.1793 1.096
한 번 JPEG 품질 75를 거침 0.1966 0.0401 4.898
==================================== =============== =============== =========
• 무압축 PNG에서는 아무것도 말할 수 없다. 위의 1.096배는 "붙인 곳과 붙이지 않은 곳을구별할 수 없다"는 의미이다. ELA가 의미를 갖는 것은 "원본이 JPEG"일 때뿐이며, 그때 비로소 4.898배라는 차이가 된다.
• 흔히 말하는 "ELA는 고주파를 쫓고 있을 뿐"도 이 화상에서는 성립하지 않는다 —— ELA와 Sobel 기울기 강도의 상관은 0.003(무압축) / 0.057(JPEG 완료). ELA는 8x8 블록의 양자화 잔차를 보고 있으므로, 기울기와는 다른 것을 재고 있다. 그래도 위 표대로 무압축에서는 변조를 분리하지 않는다. "기울기의 바꿔 말하기이기 때문에안 된다"가 아니라, 비교 기준이 될 양자화 이력이 없기 때문에 안 된다.
• 평탄한 영역은 압축해도 오차가 나오지 않으므로, 변조되어 있어도 어두운 채로 된다.
• 샘플 데이터 카탈로그(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_forensics_roc — py -3.11 examples/poc_forensics_roc.py
image2d 를 입력으로 받는 것)perceptual_hash · fingerprint_correlate · jpeg_quality_estimate · jpeg_ghost_map · noise_inconsistency_map · copy_move_regions · watermark_embed · watermark_extract
compression)jpeg_quality_estimate · jpeg_ghost_map · jpeg_ghost_quality
*Provenance: imgforensics.py — IMGFORENSICS 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.