curvature_to_shape_index — REPRCONV curvature op

• 데이터 종류: curvature → pairs

• 호출: import fullseye as fs; fs.ledger.curvature_to_shape_index(curvature)(구현을 직접 호출하려면 import reprconv; reprconv.curvature_to_shape_index(curvature), 원장에서 가져오려면 opsreprconv.get("curvature_to_shape_index"))

사용법

주곡률 (N,2) → 형상 지수와 굽음 (N,2) 의 pairs. curvature 의 출구.

Koenderink & van Doorn, *Surface shape and curvature scales*, Image and Vision Computing 10(8) 1992 의 (S, C):

S = (2/pi) * atan2(k1 + k2, k1 - k2) (k1 >= k2, S in [-1, 1])

C = sqrt((k1^2 + k2^2) / 2) (굽은 정도의 크기)

나눗셈이 아니라 atan2 로 쓰여 있는 것이 요점으로, 구형 배꼽점 (k1 == k2) 에서도평면 (k1 == k2 == 0) 에서도 0 으로 나누기가 되지 않으며, shape_index_to_curvature 와의 왕복이 전역에서 엄밀해진다(실측 max|Δ| = 4.6e-16). 교과서의 atan((k1+k2)/(k1-k2)) 를 그대로 구현하면 배꼽점에서 NaN 이 나오고, 그 NaN 이 하류에서 "어두운 화소"로 둔갑한다.

S = -1 은 컵, 0 은 안장, +1 은 모자. C 는 형태와 독립인 "얼마나 굽어 있는가".

입력 순서의 정보만은 돌아오지 않는다: (k2, k1) 순서로 넘겨도 내부에서 k1 >= k2 로재배열하므로, 왕복하면 반드시 내림차순으로 반환된다(방향의 규약이지, 값의 손실이 아니다).

Args:

curvature: (N, 2) 의 [k1, k2], 또는 2 개의 같은 길이 1-D 의 튜플

(principal_curvatures 의 원래 반환이 이것).

Returns:

(N, 2) float64. 열 0 = S in [-1, 1], 열 1 = C >= 0.

Raises:

ValueError: 형태 부정 / 비유한.

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

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

• representation_roundtrip — py -3.11 examples/representation_roundtrip.py

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

angles_to_normals · shape_index_to_curvature · pairs_to_signal · pairs_to_image2d · pairs_to_table · polar_to_cscalar

같은 카테고리(curvature)

shape_index_to_curvature · curvature_to_table


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

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