perceptual_hash — IMGFORENSICS hash op

• 데이터 종류: image2d → phash

• 호출: import fullseye as fs; fs.ledger.perceptual_hash(image, mode: 'str' = 'dct', hash_size: 'int' = 8) -> 'np.ndarray'(구현을 직접 호출하려면 import imgforensics; imgforensics.perceptual_hash(image, mode: 'str' = 'dct', hash_size: 'int' = 8) -> 'np.ndarray', 원장에서 가져오려면 opsimgforensics.get("perceptual_hash"))

사용법

지각 해시. bool 의 1-D 비트열을 돌려줍니다.

mode:

"dct" (hash_size * 4) 정사각으로 축소 → 2-D DCT-II(직교) → 왼쪽 위

hash_size x hash_size를 취해 DC를 제외한 중앙값과 비교.

Zauner 2010의 pHash와 같은 절차. 길이 hash_size**2비트.

"average" hash_size 정사각으로 축소 → 평균과 비교(aHash). 같은 길이. "difference" (hash_size, hash_size + 1)로 축소 → 가로로 이웃한 화소의대소를 비교(dHash). 같은 길이이며, 평균 휘도의 변화에 강하다.

실측(tests/test_imgforensics.py가 수치로 고정. 256x256의 1/f^1.6 화상, hash_size=8 = 64비트. 무관한 2장의 거리는 dct 31.3 / average 34.2 / difference 32.6(20쌍의 평균. 이론값은 32 = 비트 길이의 절반)):

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

변환 dct average difference

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

JPEG 품질 60 재압축 0 0 0

JPEG 품질 30 재압축 2 0 0

1/2 축소 0 0 0

1/4 축소 0 0 0

밝기 +0.1 0 0 0

좌우 반전 28 42 34

90도 회전 32 30 32

다른 화상 28 40 34

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

이 op가 말할 수 없는 것:

• 거리가 작다 = 같은 화상, 은 아니다. 8x8의 거친 축소로 떨어뜨리므로, 세부의 변조는 거리 0인 채로 통과한다. 실측: 512x512의 화상에 24x24의카피&무브를 넣었을 때의 거리는 dct 0 / average 0 / difference 1.

• 거리가 크다 = 다른 화상, 도 아니다. 위 표대로 반전과 회전은 "다른 화상"과구별되지 않는다(둘 다 무관한 2장과 같은 거리 영역에 들어간다). 기하 변환에 대한불변성은 전혀 없다.

• 반환값은 phash 어휘이지 signal이 아니다. bool의 1-D는기존 signal / indices / descriptor의 술어를 모두 만족하므로, 잘못 다루면 signal1d.lowpass 등이 유한하고 그럴듯한 값을 반환한다(실측 5 op). 그래서 hash_distance는 dtype을 검사한다.

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

• 샘플 데이터 카탈로그(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

타입이 이어지는 다음 연산자(phash 를 입력으로 받는 것)

hash_distance · watermark_embed · watermark_capacity

같은 카테고리(hash)

hash_distance


*Provenance: imgforensics.py — IMGFORENSICS 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.