refine op• 資料種類:voxel × voxel × position → position
• 呼叫: import fullseye as fs; fs.ledger.refine_translation_lk(scene, template, init_pos, device='cpu', iters=30, tol=0.0001)(要直接呼叫實作,import match3d; match3d.refine_translation_lk(scene, template, init_pos, device='cpu', iters=30, tol=0.0001);從台帳取用則 ops3d.get("refine_translation_lk"))
• GPU:該運算子有 GPU 路徑(device="cuda")
用 Gauss-Newton 逆合成 Lucas-Kanade 做 3D 平移的次體素精化。
以粗匹配(整數 NCC / Fourier-Mellin / Hough)給出的整數初始位置 init_pos 為起點,最小化 SSD Σ|I(x+p) − T(x)|²,收斂到次體素平移 p。
由於採用逆合成(inverse-compositional, Baker–Matthews)方式,steepest-descent 影像 SD = ∇T 與 Hessian H = Σ SDᵀSD 只在迭代前預先計算一次,每次迭代只有「scene 的 trilinear 變形 + 殘差 + 3×3 線性求解 Δp = H⁻¹ Σ SDᵀ(I(x+p)−T)」。平移的合成為 p ← p − Δp。純平移變形中 ∂W/∂p=I,因此 SD=∇T 可直接使用。
座標系:init_pos 與回傳值都表示 樣板原點(corner, index 0,0,0) 落在 scene 的哪個 (dz,dy,dx)。與 sobel3d / grid_sample 的 corner 慣例一致(注意與 NCC(ncc_locate_3d)的中心慣例相差 T//2)。
scene : (D,H,W) array_like
要搜尋的體資料。
template : (Td,Th,Tw) array_like
要對位的樣板(比 scene 小)。
init_pos : (3,) sequence
整數初始位置 (dz,dy,dx) = 樣板原點的 scene 座標。
device : str
"cpu" / "cuda" 等。與 device 無關。
iters : int
最大迭代次數。
tol : float
‖Δp‖ 低於此值時判定收斂並終止。
pos : (3,) np.ndarray(float64)
精細化後的次體素位置 (dz,dy,dx)。
• 假定為平滑(頻帶受限)的密度場。若整數初始值在真值的 ±0.5〜1 voxel 內, 通常 5〜8 次迭代即可 ‖err‖ < 0.05 voxel(低雜訊時)。實測(獨立 cubic-spline GT):
無雜訊 mean 0.008 / max 0.013 voxel(≈6 次迭代, ≈1.2ms/次),比 NCC 次體素
baseline(mean 0.56 voxel)改善約 60×。
• grad_scale=32 是可分離 sobel3d(導數[-1,0,1]×平滑[1,2,1]²)的固定尺度(線性斜坡實測 32.0)。將其正規化到真實梯度以修正 Δp 的尺度。
• H 中加入微小的 Levenberg 正則化,防止梯度貧乏的平坦樣板出現數值崩潰。
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• refinement — py -3.11 examples_3d/refinement.py
position 作為輸入)refine_peak_newton · refine_lm · fuse_to_voxel
refine)refine_peak_newton · refine_lm · refine_rotation_z · icp_point2point_3d · icp_point2plane
*Provenance: match3d.py — 3D 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.