icp_point2point_3d — 3D refine op

• 資料種類:points × points → pose

• 呼叫: import fullseye as fs; fs.ledger.icp_point2point_3d(src, dst, iters=50, init_R=None, init_t=None, tol=1e-06, max_corr_dist=None, trim_ratio=None, device='cpu', reproducible=False)(要直接呼叫實作,import match3d; match3d.icp_point2point_3d(src, dst, iters=50, init_R=None, init_t=None, tol=1e-06, max_corr_dist=None, trim_ratio=None, device='cpu', reproducible=False);從台帳取用則 ops3d.get("icp_point2point_3d"))

• GPU:無(僅 CPU 參考實作)

用法

用 point-to-point ICP(Kabsch/SVD)精化點群。

透過粗匹配估計獲得(整數 NCC/Fourier-Mellin±3°/Hough±0.5voxel)從初始姿態(init_R,init_t)開始,src側點被嚴格地轉換為dst側點。對齊。在每次迭代時,重新縫合最近鄰對應關係(cKDTree)並使用 Kabsch 演算法透過使用(SVD)計算和累積相對旋轉和平移,即使對應關係未知,收斂到亞體素精度。

對於部分重疊和異常值,請使用 Trimmed ICP(僅採用小距離對應)。使用絕對距離門(max_corr_dist)來處理這個問題。最終的RMSE被實際採用。由於評估是基於對應關係(內點),因此即使在部分觀察中也能準確反映姿勢品質。

論點:

src:(N,3)移動側點雲(torch.Tensor或numpy.ndarray)。

dst:(M,3) 固定側(參考)點組。

iters:最大迭代次數。

init_R: (3,3) 初始旋轉。如果無,則它是單位矩陣。

init_t: (3,) 初始翻譯。如果沒有,則它是零向量。

tol:如果 RMSE 的相對改進低於該值,則收斂終止。

max_corr_dist:將超過此距離的對應關係視為異常值(使用 None 停用)。

修剪比率:0<r<=1。在每次迭代中,只有前 r 個與最小最近鄰距離對應

採用修整後的 ICP。對部分重疊有效(重疊率r)。禁用無。

device:放置回傳值的torch裝置(如「cpu」)。 SVD 是在 CPU 上使用 NumPy 求解的。

可重現:如果為 True,則減少量將獨立於點順序和 BLAS 線程數(預設 False = 與之前相同)。

平均值是math.fsum,互協方差H是ozakimm(Ozaki方案),方向是逐個元素計算的,RMSE也是math.fsum。

即使 src 中點的順序發生變化,R·t·rmse 的位數仍保持不變(同一台計算機,同一 LAPACK)。在trim_ratio中斷時

可以以不同的順序選擇相距完全相同的距離的點。在 200,000 個點時,每次重複 0.7 毫秒變成約 170 毫秒。

傳回值:

R:(3,3)旋轉。 dst ~= src @ R.T + t。 在有手電筒的環境中 torch.Tensor,如果沒有,則相同的值numpy.ndarray(於2026-09-07

即使將主體轉換為 numpy,為了相容性,類型也保持不變。 )

★ 同族中的 icp_point2plane 總是回傳 numpy —— 在族中

由於類型未對齊,因此可以安全地向下游傳遞“np.asarray(R)”。

(兩者都有效。保留這種錯位以避免破壞性更改。)

t: (3,) 平移(與 R 型相同)。

訊息:字典。 「rmse」(招募的最終 RMSE),「iters」(實際迭代次數),

「融合」(布林),「內點」(採用次數),「rmse_history」(列表)。

參考(範例資料、文獻)

• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。

• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。

可執行的範例(實際呼叫該運算子並已驗證的樣例)

• gicp_register — py -3.11 examples_3d/gicp_register.py

• itokawa_self_register — py -3.11 examples_3d/itokawa_self_register.py

• itokawa_shape_match — py -3.11 examples_3d/itokawa_shape_match.py

• partial_overlap_icp — py -3.11 examples_3d/partial_overlap_icp.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_point2plane


*Provenance: match3d.py — 3D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

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