feature_register op• 데이터 종류: voxel → keypoints
• 호출: import fullseye as fs; fs.ledger.harris3d_keypoints(vol, device='cpu', k=0.005, nms=3, topn=64, sigma_i=1.5, response='mineig', rel_thresh=0.01, border=2)(구현을 직접 호출하려면 import feat_harris; feat_harris.harris3d_keypoints(vol, device='cpu', k=0.005, nms=3, topn=64, sigma_i=1.5, response='mineig', rel_thresh=0.01, border=2), 원장에서 가져오려면 ops3d.get("harris3d_keypoints"))
• 원장 경유의 반환값: fullseye.ledger.harris3d_keypoints(...) 는 선언된 out 형 keypoints 의 값만 반환합니다(실제 함수는 보조 정보도 반환). 버려진 쪽이 필요하면 fullseye.ledger.harris3d_keypoints.raw(...) 를 쓰거나 feat_harris.harris3d_keypoints 를 직접 호출하세요.
• 실제 반환: (keypoints, scores)
• GPU: 이 연산자는 GPU 경로가 있습니다(device="cuda")
3D Harris 키포인트 검출(2D Harris 코너 검출의 3D 판).
voxel 밀도장의 3D 기울기 g=(gz,gy,gx) 로부터, 각 복셀에서 국소 구조 텐서 M=Σ_w w·g gᵀ(3x3 대칭, gaussian 창 sigma_i 로 가중합)를 구성하고, 코너성을측정한다. 응답이 주변에서 극대이고 임계값을 넘는 복셀을 keypoint 로 한다(초기 자세추정 없이 검출할 수 있으므로, 대회전+부분 겹침의 대응이나 ICP 의 coarse init 공급에 쓸 수 있다).
코너성 지표:
• "mineig"(기본값): 3x3 대칭 행렬의 최소 고윳값(Shi-Tomasi 식). 3 방향 모두에 구조가 있을(=모서리)수록 최소 고윳값이 크다. 닫힌 식(삼각함수법)으로 산출. k 조정이 필요 없고 강건(실측 mean repeatability 85%, min 72.5%).
• "harris": R = det(M) - k·tr(M)³. 3D 에서는 고윳값이 3 개이므로 tr 의 3 제곱으로무차원화. ★주의: 밀도 voxel 의 모서리에서는 det/tr³ 비가 경험적으로 ~0.01 밖에되지 않으므로, 2D 표준의 k=0.04〜0.06 에서는 모든 응답이 음이 되어 검출 0 이 된다. 3D 에서는 k≈0.005 가 필요(실측 k=0.005 에서 mean 89.6%).
인수:
vol: (D,H,W) 밀도 voxel(numpy / torch). points_to_voxel 의 출력을 상정.
device: torch 디바이스("cpu" 등). 모든 연산을 이 디바이스에서 수행한다.
k: Harris 의 감도 계수(response="harris" 일 때만 유효). 3D 밀도장에서는
0.005 전후(2D 관례의 0.04〜0.06 은 3D 에서는 너무 강해 검출 0 이 된다).
nms: 비최대 억제의 입방체 창의 한 변의 길이(홀수, 표준 3 = 3x3x3 근방).
topn: 응답 내림차순으로 반환하는 keypoint 의 최대 수.
sigma_i: 구조 텐서의 적분 창(gaussian)의 표준편차(voxel).
response: "mineig"(기본값, 강건) 또는 "harris".
rel_thresh: 응답의 임계값 = rel_thresh × 유효 영역의 최대 응답(잡음 억제).
border: 가장자리에서 border 복셀 이내는 검출하지 않는다(기울기의 가장자리 효과 제거).
반환값:
keypoints: (M,3) float64. keypoint 의 voxel 좌표 (z,y,x)(sobel3d 와
같은 축 순서). 응답 내림차순, 최대 topn 개.
responses: (M,) float64. 대응하는 응답값(내림차순).
의존: sobel3d(3D 기울기), _gauss3d(적분 창 평활). 모두 device 위에서 동작.
• 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
keypoints 를 입력으로 받는 것)fuse_to_voxel · dlt_pose · pnp_ransac · reprojection_error
feature_register)iss_keypoints · compute_fpfh · shot_descriptor · register_spin · register_fpfh · register_shot
*Provenance: feat_harris.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.