transform op• 資料種類:points → voxel
• 呼叫: import fullseye as fs; fs.ledger.points_to_voxel(points, size, bounds=None, device='cpu', smooth=0.0)(要直接呼叫實作,import match3d; match3d.points_to_voxel(points, size, bounds=None, device='cpu', smooth=0.0);從台帳取用則 ops3d.get("points_to_voxel"))
• GPU:該運算子有 GPU 路徑(device="cuda")
點群 (N,3) → 密度 voxel (size³)。用 scatter_add splat,可選高斯平滑。
給定 bounds=(lo,hi) 即可將多個點雲放到同一網格上(=匹配的前提)。
步驟: 以 idx = floor((p − lo)/(hi − lo)·(size − 1)) 將各點落到整數網格上,並對該 voxel 加 1(值 = 落入該 voxel 的點數)。若 smooth > 0,則以 σ=smooth(voxel 單位) 的 gaussian 做 3 軸可分離 conv(半徑 max(1, int(4σ + 0.5)),邊緣 replicate)。輸出的軸順序 與 points 的行順序完全一致(points[:, 0] → 軸 0),不會重排為(depth,row,col)。
• bounds: 2 個 3 維向量 (lo, hi)。為 None 時取點雲自身的 min/max(網格隨點雲
而變,因此比較 2 個點雲時務必傳入相同的 bounds)。長度不為 3、非有限、或存在 hi <= lo 的軸時拋出 ValueError(tsdf 系的 ((xmin,xmax),...) 寫法會被視為長度 2 而拒絕)。
• 範圍外的點不會被捨棄,而是 被 clip 到邊緣 voxel(邊緣會累積虛假密度)。若想裁掉,
請事先在點雲端去除。
• size: 每邊的 voxel 數。hi − lo 為 0 的軸只會被替換為 1e-9,不發出警告。
• 空點雲且 bounds=None 時,numpy 的 min 會拋出例外。
• 回傳值: (size, size, size) float64 numpy(即使在 device 上計算也會傳回 CPU)。值為點數
(平滑後為點數的加權分佈),不做正規化。
後續: 作為 match_points_ncc / signed_distance_field / voxel_to_mesh 的輸入。
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• sh_descriptor_retrieval — py -3.11 examples_3d/sh_descriptor_retrieval.py
• shape_desc_pose — py -3.11 examples_3d/shape_desc_pose.py
voxel 作為輸入)voxel_to_mips · voxel_to_mesh · signed_distance_field · to_points · sobel3d · hessian3d · curvature_maps · edt_jfa
transform)gaussians_to_voxel · mesh_to_voxel · mesh_to_points · depth_to_points · voxel_to_mips · voxel_to_mesh · tsdf_from_depth · signed_distance_field
*Provenance: match3d.py — 3D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.