direction op• 데이터 종류: normals → image2d
• 호출: import fullseye as fs; fs.ledger.normals_to_egi(normals, n_az=36, n_el=18)(구현을 직접 호출하려면 import reprconv; reprconv.normals_to_egi(normals, n_az=36, n_el=18), 원장에서 가져오려면 opsreprconv.get("normals_to_egi"))
법선 (N,3) → 확장 가우스 상 (n_el, n_az) 의 image2d.
방향의 2-D 히스토그램(Horn, *Extended Gaussian Images*, Proc. IEEE 72(12) 1984). "어느 방향의 면이 얼마나 있는가"의 지도로, 평면이 지배적인 물체에서는 1 개의 bin 에 산이 선다. 비가역 —— bin 폭만큼의 방향 해상도를 버린다. 버린 양은 잴 수 있다: 최빈 bin 의 중심 방향과 입력 평균 방향의 각도 차가 양자화 오차이며, 기본값 (36, 18) 에서는 bin 폭 10 도에 대해 실측 3.7 도(selftest 가 낸다).
앙각의 bin 은 sin(el) 로 등분한다(등입체각). 도로 등분하면 극이 지나치게촘촘해져서 "북극에 면이 집중되어 있다"는 거짓 산이 선다.
★위치의 점군을 넘겨도 예외는 나지 않는다. backends_typed.TYPE_TO_SORT 가 normals 를 points 로 접어 넣고 있으므로, 진화기도 대장도 둘을 구별하지 않는다. 이 op 는 방향만 보므로(길이는 버린다), (N,3) 의 좌표를 넘기면 "원점에서 각 점을 본 방향"의 히스토그램이 그럴듯하게 반환된다. 실측(2026-09-08, 200 점의 곡선 vs 전부 바로 위를 향한 법선): 0 아닌 bin 이 1 → 12, 최대 bin 이 200 → 44 로 바뀔 뿐이며, 총합은 둘 다 200. "총합이 점 수와 맞으니 옳다"로는 구별이 되지 않는다. fullseye.set_system("extra_checks", "on") 으로 하면, 단위 길이에서 벗어난벡터를 거부한다(아래 Raises).
Args:
normals: (N, 3).
n_az: 방위의 bin 수(기본값 36 = 10 도 간격).
n_el: 앙각의 bin 수(기본값 18).
Returns:
(n_el, n_az) float64 의 계수 맵(행 = 앙각, 열 = 방위).
Raises:
ValueError: bin 수가 1 미만 / 상한 초과 / 입력 부정.
ValueError: extra_checks='on' 에서, 길이가 1 에서 1e-6 을 넘게 벗어나는
벡터를 포함할 때(위치의 점군을 법선으로 넘긴 사고를 잡는다).
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• representation_conversion — py -3.11 examples/representation_conversion.py
image2d 를 입력으로 받는 것)direction)normals_to_angles · angles_to_normals
*Provenance: reprconv.py — REPRCONV 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.