refine op• 데이터 종류: voxel × voxel × position → table
• 호출: import fullseye as fs; fs.ledger.refine_lm(scene, template, init_pos, device='cpu', iters=50, scale=True, gain=False, lam0=0.001, tol=1e-08)(구현을 직접 호출하려면 import match3d; match3d.refine_lm(scene, template, init_pos, device='cpu', iters=50, scale=True, gain=False, lam0=0.001, tol=1e-08), 원장에서 가져오려면 ops3d.get("refine_lm"))
• GPU: 이 연산자는 GPU 경로가 있습니다(device="cuda")
Levenberg-Marquardt 에 의한 병진(+등방 스케일/휘도 게인) 서브복셀 정련.
대략적 매치 위치 init_pos(템플릿 중심의 scene 내 좌표 [z,y,x])를 출발점으로, forward-additive Lucas-Kanade를 감쇠 붙은 Gauss-Newton(LM)으로 풀어 SSD
E(p) = Σ_x [ I(W(x;p)) - g·T(x) ]²
를 최소화한다. 정수 NCC / Fourier-Mellin / Hough의 대략적 추정을 연속 좌표로 수렴시키는 후단.
워프 W(x;p) = t + s·(x - c_T) (c_T=템플릿 중심, t=평행 이동, s=등방 스케일)
야코비안 ∂I(W)/∂p는 grid_sample을 자동 미분에 통과시켜 엄밀하게 취득(삼선형 보간의 해석적 기울기.
고정점이 참 SSD 최소와 일치 → sobel 상수배의 바이어스를 피해 고정밀).
LM Δp = -(H + λ·diag(H))⁻¹ b, 성공(비용 감소)이면 λ×0.4 감쇠, 실패면 λ×5 증가.
인수:
scene : 장면 volume (D,H,W).
template : 템플릿 volume (Td,Th,Tw). scene보다 작음.
init_pos : 대략적 템플릿 중심 위치 [z,y,x] (voxel. NCC locate의 [d,h,w] 등).
device : "cpu" / "cuda". device에 의존하지 않음.
iters : 최대 반복 수(보통 4-6으로 수렴).
scale : True면 등방 스케일 s를 동시에 최적화(4 파라미터). False면 평행 이동만.
gain : True면 휘도 게인 g(잔차 I(W)-g·T)를 추가로 최적화. 밝기 차이/잡음에 강건.
lam0, tol : 초기 감쇠 계수 / 수렴 임계값(스텝 노름, 상대 비용 감소).
반환값(dict):
pos : 정밀화된 템플릿 중심 [z,y,x] (연속 좌표)
scale : 등방 스케일(scale=False면 1.0)
gain : 휘도 게인(gain=False면 1.0)
cost : 최종 SSD, rms: 1voxel당 잔차 RMS, iters: 실행 반복 수
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• refinement — py -3.11 examples_3d/refinement.py
table 를 입력으로 받는 것)fuse_to_voxel · mesh_select_lod
refine)refine_peak_newton · refine_translation_lk · refine_rotation_z · icp_point2point_3d · icp_point2plane
*Provenance: match3d.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.