refine op• 데이터 종류: points × points × normals → pose
• 호출: import fullseye as fs; fs.ledger.icp_point2plane(src, dst, dst_normals, iters=30, tol=1e-09, init=None, trim=None, device='cpu', reproducible=False)(구현을 직접 호출하려면 import match3d; match3d.icp_point2plane(src, dst, dst_normals, iters=30, tol=1e-09, init=None, trim=None, device='cpu', reproducible=False), 원장에서 가져오려면 ops3d.get("icp_point2plane"))
점-면 ICP(Gauss-Newton, 소각 근사)로 강체 변환을 고정밀 정련합니다.
대략적 매치(정수 NCC / Fourier-Mellin ±3° / Hough ±0.5voxel)의 초기 자세를표면 점군의 점-면 거리 최소화로 조여 가는 정밀화 기법. 각 반복에서 src 각 점에 dst 최근접을 대응시키고, 점-면 잔차 r_i = n_i·(R·p_i + t - q_i) 를 최소화한다. R 을 소각 근사 R ≈ I + [ω]× 로 선형화하면 각 대응의 야코비안은 J_i = [p_i×n_i | n_i](스칼라 삼중곱 n·(ω×p)=ω·(p×n) 으로부터), 상수항 b_i = -n_i·(p_i - q_i). 정규 방정식 (JᵀJ)x = Jᵀb 를 6×6 으로풀어 증분 x=[ω|t] 를 얻고, Rodrigues 로 회전으로 되돌려 누적한다. 점-면은접평면 내 미끄러짐을 허용하므로, point-to-point 보다 적은 반복으로 표면에 타이트하게수렴한다(Low 2004).
실측(물결치는 표면 N=2025, CPU float64): 초기 6°/병진 0.06 을 4 반복으로 euclid RMSE 1.7e-16·회전 오차 0° 로 회복(point-to-point 는 17 반복에서 RMSE 4e-2· 회전 1.9° 로 정체). 초기각 3〜20° 에서도 4〜5 반복으로 기계 정밀도.
인수:
src (N,3): 움직이는 쪽의 점군(대략적 매치 후의 초기 자세).
dst (M,3): 참조 쪽의 점군(고정).
dst_normals (M,3): dst 의 단위 법선(정규화되지 않아도 내부에서 정규화).
모르면 pointcloud.estimate_normals(dst) 등으로 사전 추정.
iters: 최대 반복 수.
tol: RMSE 변화가 이 값 미만이면 수렴으로 보고 종료.
init ((R0,t0)): 초기 자세(대략적 매치의 R,t 를 전달). None 이면 단위.
trim (float|None): [0,1) 의 비율. 점-면 잔차가 큰 상위를 매 반복 버리는
Trimmed ICP(부분 겹침·이상값에 강건).
device: "cpu"/"cuda" 등. torch device 문자열(device 비의존).
reproducible: True 이면 정규 방정식의 JᵀJ·Jᵀb(N 점의 축약)를 ozakimm(Ozaki 스킴)으로 계산하고,
점-면 잔차·자세 적용은 요소별 연산, RMSE 는 math.fsum 으로 한다. src 점의 순서·BLAS 스레드 수에 의존하지 않고
R·t·rmse 가 비트 단위로 같다. 기본값 False 는 종래대로(J.T @ J).
반환값:
R (3,3), t (3,), aligned (N,3)=R·src+t, rmse(채택 점의 점-면 RMSE),
n_iter(실제 반복 수).
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• refinement — py -3.11 examples_3d/refinement.py
pose 를 입력으로 받는 것)fuse_to_voxel · pose_error · bundle_adjust · mean_reprojection_error · optimize_pose_graph · relative_pose · mean_edge_error · rotation_translation_error
refine)refine_peak_newton · refine_translation_lk · refine_lm · refine_rotation_z · icp_point2point_3d
*Provenance: match3d.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.