gicp — 3D gicp op

데이터 종류: points × pointspose

호출: import fullseye as fs; fs.ledger.gicp(source, target, max_iter: 'int' = 30, k: 'int' = 20, epsilon: 'float' = 0.001, tol: 'float' = 1e-08, init=None) -> 'dict'(구현을 직접 호출하려면 import gicp; gicp.gicp(source, target, max_iter: 'int' = 30, k: 'int' = 20, epsilon: 'float' = 0.001, tol: 'float' = 1e-08, init=None) -> 'dict', 원장에서 가져오려면 ops3d.get("gicp"))

원장 경유의 반환값: fullseye.ledger.gicp(...) 는 **선언된 out 형 pose 의 값만** 반환합니다(실제 함수는 보조 정보도 반환). 버려진 쪽이 필요하면 fullseye.ledger.gicp.raw(...) 를 쓰거나 gicp.gicp 를 직접 호출하세요.

사용법

Generalized-ICP(공분산 가중 마할라노비스 ICP)로 강체 변환 (R,t) 를 추정합니다.

> 아래 상세 설명은 원문입니다 —— 요약과 제목은 번역되어 있습니다.

各反復で source→target の最近傍対応を張り、残差 `d_i = R·s_i + t - q_i` を

重み `W_i = (C_target[q_i] + R·C_source[s_i]·Rᵀ)⁻¹` で測るマハラノビス

コスト `Σ d_iᵀ W_i d_i を、小角線形化 R ← (I+[ω]×)R` の Gauss-Newton で

最小化する。各対応のヤコビアン `J_i = [-[R·s_i+t]× | I]`(3×6)から

正規方程式 `(Σ J_iᵀ W_i J_i) x = -(Σ J_iᵀ W_i d_i)`(6×6)を解いて増分

`x=[ω|τ]` を得、Rodrigues で回転に戻して累積する。

共分散は plane-to-plane(`estimate_covariances`)。point-to-plane が target の

法線方向へ残差を射影する(rank-1)のに対し、GICP は source・target 双方の

full 3×3 共分散を合成した重みを使うため、平面的・ノイズを含む点群で頑健。

ICP はローカル最適化なので 近い初期化を前提(粗マッチや `init` を渡す)。

引数:

source (N,3): 動かす側の点群。

target (M,3): 参照側(固定)の点群。

max_iter: 最大反復数。

k: 共分散推定の近傍数。

epsilon: plane-to-plane の法線方向小分散(0<ε<1)。

tol: 収束閾値。増分並進 ‖τ‖ が `tol×(target のRMS半径)` 未満かつ

増分回転 ‖ω‖(rad)が `tol` 未満で打ち切り(スケール相対)。

init: (R0(3,3), t0(3,)) の初期姿勢タプル、または None(単位)。

返り値:

dict:

"R" (3,3) ndarray — target ≈ R·source + t を満たす回転。

"t" (3,) ndarray — 並進。

"rmse" float — 最終対応上のユークリッド RMSE(採用点)。

"iterations" int — 実反復数。

例外:

ValueError: 入力形状不正 / 点数不足 / 数値発散(非有限)= fail-closed。

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

gicp_registerpy -3.11 examples_3d/gicp_register.py

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

fuse_to_voxel · pose_error · bundle_adjust · mean_reprojection_error · optimize_pose_graph · relative_pose · mean_edge_error · rotation_translation_error

같은 카테고리(gicp)

estimate_covariances


*Provenance: gicp.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.