gicp op• 資料種類:points × points → pose
• 呼叫: 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。
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• gicp_register — py -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)*Provenance: gicp.py — 3D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.