refine_lm — 3D 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.