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 ≈ I + [ω]× 將 R 線性化後,各對應的 Jacobian 矩陣為 J_i = [p_i×n_i | n_i](由純量三重積 n·(ω×p)=ω·(p×n) 得出), 常數項 b_i = -n_i·(p_i - q_i)。以 6×6 求解正規方程 (JᵀJ)x = Jᵀb 得到增量 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 時以 ozakimm(Ozaki 方案)計算正規方程的 JᵀJ、Jᵀb(N 點的歸約),
點-面殘差、位姿的套用為逐元素運算,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(實際迭代次數)。
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 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 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.