shot_descriptor — 3D feature_register op

• 데이터 종류: points × normals → descriptor

• 호출: import fullseye as fs; fs.ledger.shot_descriptor(points, normals, kp_idx, tree, radius, n_azim=8, n_elev=2, n_rad=2, n_cos=11)(구현을 직접 호출하려면 import feat_shot; feat_shot.shot_descriptor(points, normals, kp_idx, tree, radius, n_azim=8, n_elev=2, n_rad=2, n_cos=11), 원장에서 가져오려면 ops3d.get("shot_descriptor"))

사용법

SHOT 기술자(Tombari 2010). 각 키포인트에 LRF 를 세우고 구형 지지를 취합니다.

지지를 반경2×앙각2×방위8=32 공간 셀로 분할하고, 각 셀에서 "LRF z 축과 근방 점 법선의 cos 각"을 n_cos=11 빈의 히스토그램에 quadrilinear 보간으로 누적 → 32×11=352 차원을 L2 정규화. 반환값 (Kp,352). LRF 를 구할 수 없는 점은 영벡터.

Raises ValueError: normals 의 행 수가 points 와 일치하지 않는 경우(다른 점군의 법선을섞으면 근방 index 가 범위를 넘어 날것의 IndexError 가 된다 — compute_fpfh 와 같은 클래스).

인수: points (N,3), normals (N,3) 단위 법선, kp_idx 는 키포인트의 점인덱스(iss_keypoints 의 출력), tree 는 points 로부터 만든 scipy.spatial.cKDTree(호출 측에서 준비한다), radius 는 지지 반경(LRF 추정과근방 수집 양쪽에 사용). n_azim·n_elev·n_rad·n_cos 를 바꾸면 차원은 n_azim*n_elev*n_rad*n_cos 가 된다.

절차: LRF 는 거리 가중치 max(radius-d, 0) 붙은 공분산의 고유벡터(x=최대, z=최소고윳값)를 근방 다수파의 부호에 맞춰 오른손 좌표계화한다. 근방이 5 점 미만이거나 LRF 가 퇴화한키포인트는 영벡터 그대로(매칭 측에서 제외된다). 각 근방 점은 반경·앙각(arccos(qz/r)/π)·법선 cos 각을 빈 중심 0.5 기준으로 선형 보간하고, 방위는 원환으로 wrap 하여 누적하며, 마지막에 행마다 L2 정규화한다. 반환값은 float64 (len(kp_idx), n_azim*n_elev*n_rad*n_cos)(기본값 352). 2 구름을 비교할 때는 양쪽에서 같은 radius 와 같은 법선 부호 규칙을 사용할 것(법선 방향이반전되면 cos 각 히스토그램이 뒤집힌다). register_shot 이 이 함수를 두 구름에 적용하고, 매칭과 RANSAC 까지 수행한다.

배경 지식 가이드(이 연산자 앞에 있는 물리·규약)

• 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

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

fuse_to_voxel · shape_distance

같은 카테고리(feature_register)

harris3d_keypoints · iss_keypoints · compute_fpfh · 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.