moment_invariant op• 데이터 종류: points → descriptor
• 호출: import fullseye as fs; fs.ledger.moment_invariants(points) -> 'np.ndarray'(구현을 직접 호출하려면 import moments3d; moments3d.moment_invariants(points) -> 'np.ndarray', 원장에서 가져오려면 ops3d.get("moment_invariants"))
평행이동+회전+스케일 불변인 형상 특징 벡터(Sadjadi–Hall 류 + 고차 반경 분포).
★입력은 (N,3) 의 점군. 2-D 의 영역(영상)에서 같은 취지의 양이 필요할때는 이 op 가 아니라 HALCON 식의 moments_region_2nd_invar / moments_region_central_invar / moments_region_3rd_invar(Hu 모멘트) 를 쓴다. 이름이 비슷해서 혼동하기 쉬우며, (H,W) 를 넘기면 "points must be a point cloud of shape (N,3)" 로 실패한다(2026-09-09, poc_rotation_invariance_audit 을 작성할 때 실제로 밟았다).
처방:
1. 무게중심 중심화(병진 제거).
2. RMS 반지름 R = sqrt(mean‖p-c‖²) 로 나누어 스케일 정규화(R→1). 이로써 정규화 후의 중심 2 차 모멘트는 균일 스케일 s 에 의존하지 않는다.
3. 정규화 공분산 C̃ 의 주 불변량(특성 다항식의 계수)을 늘어놓는다:
λ̂1 >= λ̂2 >= λ̂3 … C̃ 의 고윳값(= 정규화한 주 2 차 모멘트,
Σλ̂ = 1, 회전 불변)
J2 = λ̂1λ̂2 + λ̂1λ̂3 + λ̂2λ̂3 (Sadjadi–Hall 제 2 불변량 = 2×2 주소행렬식의 합)
J3 = λ̂1λ̂2λ̂3 (제 3 불변량 = det C̃)
4. 정규화 4 차 반지름 모멘트 m4 = mean(‖p̂-c‖⁴)(= mean(r⁴)/mean(r²)²). r = 무게중심으로부터의 거리이므로 회전+병진 불변, RMS 정규화가 끝났으므로 스케일 불변.
반환하는 벡터는 [λ̂1, λ̂2, λ̂3, J2, J3, m4] (길이 6). 제 1 불변량 J1 = Σλ̂ 는 정규화로 항상 1 이 되어 식별에 기여하지 않으므로 생략한다. J2,J3 는 고윳값의 대칭식(중복)이지만, Sadjadi–Hall 의 대수 불변량 시그니처와의호환을 위해 함께 적는다.
식별성의 내역(honest):
• λ̂1,λ̂2,λ̂3(와 대칭식 J2,J3)는 2 차 모멘트(공분산 고윳값)만 에유래하며, 독립 자유도는 주축 종횡비 2 개뿐이다. 이것만으로는 2 차가등방인 형상(solid cube 와 solid sphere 는 둘 다 λ̂≈(1/3,1/3,1/3))을 구별할 수 없다.
• m4 는 반지름 분포의 4 차 모멘트 로, 2 차에서는 뭉개지는 고차의 형상 차이를포착한다. 균일 solid sphere 는 m4=75/63≈1.190, 균일 solid cube 는 m4=19/15≈1.267 로 다르므로 둘을 분리할 수 있다.
구라면 대략 (1/3, 1/3, 1/3, 1/3, 1/27, 1.190), 가늘고 긴 막대라면 (≈1, ≈0, ≈0, ≈0, ≈0, 큼) 에 가까워진다.
np.ndarray, shape (6,)
병진·회전·스케일 불변인 특징 벡터.
보충:
• 입력은 (N,3), N >= 2. 형상 부정·비유한·전체 점 일치(중심화 후의 퍼짐이 0)는 ValueError. 축퇴 판정은 스케일 상대(rms <= 1e-12 × max|centered|)이므로, 좌표가 극소할 뿐인 점군은 거부하지 않는다.
• 반환값은 float64 (6,). λ̂ 는 0 에서 클립 완료, Σλ̂ = 1.
• 불변인 것은 병진·회전·균일 스케일뿐이다. 거울상(반전)에도 불변(고윳값과 반지름 분포는 반전으로 바뀌지 않음)이므로 거울상체는 구별할 수 없다. 비균일 스케일이나 점 밀도의 치우침(샘플링의 조밀)은 값을 바꾼다.
• 점 밀도에 민감한 용도에서는 전단에서 voxel_grid_downsample 로 밀도를 고르게 한다. 비교는 shape_distance(대장 op, 같은 길이의 기술자 벡터끼리의 거리).
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• moment_invariants — py -3.11 examples_3d/moment_invariants.py
descriptor 를 입력으로 받는 것)fuse_to_voxel · shape_distance
moment_invariant)principal_moments · central_moments · inertia_tensor
*Provenance: moments3d.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.