jpeg_quality_estimate — IMGFORENSICS compression op

• 데이터 종류: image2d → table

• 호출: import fullseye as fs; fs.ledger.jpeg_quality_estimate(image, max_step: 'int' = 64, n_coeff: 'int' = 21) -> 'dict'(구현을 직접 호출하려면 import imgforensics; imgforensics.jpeg_quality_estimate(image, max_step: 'int' = 64, n_coeff: 'int' = 21) -> 'dict', 원장에서 가져오려면 opsimgforensics.get("jpeg_quality_estimate"))

사용법

디코딩된 이미지로부터 양자화 표와 JPEG 품질을 블라인드 추정합니다. table.

파일의 DQT를 읽는 것이 아니라 화소만으로 추정한다(거기가 요점이며, PNG로 다시 저장된 / 붙여 넣어진 화상이라도 "원래는 JPEG 품질 N이었다"가보인다). 8x8 블록 DCT를 취해 계수마다 빗의 간격을 추정하고(Fan & de Queiroz 2003), IJG의 공개 스케일링 규칙으로 만든 표준 표의 족에서가장 맞는 품질을 고른다.

반환(dict):

jpeg_compressed 빗이 선 계수가 n_coeff개 중 몇 개였는지로 판단한

bool. "JPEG이다"의 증명이 아니다(아래 caveats)

quality 추정 품질 1..100(빗이 없으면 None)

table 추정한 (8, 8)의 양자화 스텝(0 = 추정하지 못함)

n_quantized 빗이 선 계수의 수 / n_coeff

fit_error 선택된 품질의 표준 표와의 평균 절대 차

caveats 이 수치가 말할 수 없는 것

실측(tests/test_imgforensics.py::test_jpeg_quality_estimate_recovers_quality, 256x256의 1/f^1.6 화상을 Pillow로 부호화 → 복호하여 추정):

======= ========= =============== ============

참 Q 추정 Q 빗이 선 계수 fit_error

======= ========= =============== ============

95 95 11/20 0.091

90 90 19/20 0.579

80 80 13/20 1.308

70 71 12/20 2.083

60 60 9/20 2.111

50 52 7/20 1.857

40 40 6/20 3.333

30 None 4/20 —

======= ========= =============== ============

저품질 쪽에서 무너지는 것은 원리적인 한계이다. 품질이 내려갈수록 고주파 계수는 0으로양자화되어, 빗을 읽을 재료 자체가 화상에서 사라진다("빗이 선 계수"의 열이그 사라지는 방식). 품질 30에서는 재료가 부족하여 추정을 반환하지 않는다(quality=None). 여기서 무리하게 답을 내지 않는 것이 이 op의 설계 방침이다.

그리고 무압축 PNG에서는 jpeg_compressed=False / quality=None (4개의 seed로 확인, 같은 테스트로 고정). 여기서 조용히 "품질 100"이라고 답하지 않는 것이핵심이며, 그렇게 하면 "무압축"과 "거의 무열화의 JPEG"이 같은 답이 된다.

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(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 를 입력으로 받는 것)

evidence_quantile

같은 카테고리(compression)

error_level_map · 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.