feature_register op• 데이터 종류: points → indices
• 호출: import fullseye as fs; fs.ledger.iss_keypoints(points, radius, nms_radius=None, gamma21=0.99, gamma32=0.99, max_kp=400, min_neighbors=8)(구현을 직접 호출하려면 import feat_shot; feat_shot.iss_keypoints(points, radius, nms_radius=None, gamma21=0.99, gamma32=0.99, max_kp=400, min_neighbors=8), 원장에서 가져오려면 ops3d.get("iss_keypoints"))
ISS(Intrinsic Shape Signatures, 3D Harris 상당) 키포인트 검출.
국소 공분산의 최소 고윳값 λ3 를 saliency 로 하고, 고윳값이 distinct(방향이 well-defined)한 점만 후보로 하여 NMS 로 성기게 고른다. 회전 불변. 반환값=점 index 배열.
인수:
• points (N,3). radius: saliency 용 근방 구 반경(점군과 같은 단위).
• nms_radius: 비최대 억제의 거리. None 이면 0.6*radius.
• gamma21·gamma32: 고윳값 비 λ2/λ1, λ3/λ2 의 상한(기본값 0.99). 둘 다 이
미만인 점만 후보(비가 1 에 가까운=등방이라 방향이 정해지지 않는 점을 제외).
• max_kp: 반환 상한. min_neighbors: 근방이 이보다 적은 점은 후보로 하지 않는다(기본값 8).
절차: 각 점에서 radius 내의 근방을 모아, 주목점을 원점으로 한 2 차 모멘트 행렬 (qᵀq)/n 의 고윳값 λ1≥λ2≥λ3 를 구한다(λ1 이 1e-12 이하이면 제외). λ3 를 saliency 로하여 내림차순으로 주사하고, 채택된 점으로부터 nms_radius 미만에 있는 것을 버리는 탐욕적 NMS. 반환값은 int64 의 점 인덱스 배열(saliency 내림차순). 후보가 없으면 길이 0.
주의: 근방은 주목점으로 중심화한다(무게중심이 아님). 평면 위의 점은 주목점도 같은 평면에 있으므로 λ3 는 이론상 0 이며, 반올림 찌꺼기(λ3/λ1 ≤ 1e-9)는 후보에서 뺀다. 모든 점에서 근방 탐색하는 Python 루프이므로, 수만 점을 넘는 구름은 voxel_grid_downsample 로 솎아 낸 뒤 사용한다. shot_descriptor 의 키포인트 입력에 직결되며, register_shot 은 saliency 반경 0.6*radius·NMS 반경 0.3*radius 로 호출한다(radius 는 register_shot 의 지지 반경).
• blas_threads_and_memory — 행렬 분해가 느린 이유 — BLAS 스레드·캐시·메모리 배치
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• feature_register — py -3.11 examples_3d/feature_register.py
indices 를 입력으로 받는 것)feature_register)harris3d_keypoints · compute_fpfh · shot_descriptor · register_spin · register_fpfh · register_shot
*Provenance: feat_shot.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.