motion op• 데이터 종류: voxel × voxel → flow_dense
• 호출: import fullseye as fs; fs.ledger.scene_flow_lk(vol0, vol1, device='cpu', win=3, levels=3, iters=3, reg=0.001)(구현을 직접 호출하려면 import match3d; match3d.scene_flow_lk(vol0, vol1, device='cpu', win=3, levels=3, iters=3, reg=0.001), 원장에서 가져오려면 ops3d.get("scene_flow_lk"))
• GPU: 이 연산자는 GPU 경로가 있습니다(device="cuda")
Lucas-Kanade scene flow(2D 광류의 3D 판). voxel 별 운동장 d=(dz,dy,dx).
> 아래 상세 설명은 원문입니다 —— 요약과 제목은 번역되어 있습니다.
テンプレ照合と違い 密な運動/変形を推定する。明るさ一定 ∇I·d + I_t = 0 を窓内最小二乗で
per-voxel に解く(3x3 構造テンソル A=Σ∇I∇Iᵀ, b=-Σ∇I·I_t を窓和 conv3d で)。pyramid + warp の
coarse-to-fine で大変位に対応(各 level で I1 を現 flow で戻し残差を反復補正=Gauss-Newton)。
vol1(x) ≈ vol0(x - d)。返り値 flow (3,D,H,W)。並進・拡大(発散)・回転(渦)場を捉える。
実測: 一様並進 [1.5,-2,1] を中央領域平均で誤差 0.044 voxel、拡大場で外向き発散を正しく検出。
grad_scale=32 は sobel3d(deriv[-1,0,1]×smooth[1,2,1]²)の実測スケール。GPU 対応(全 conv3d)。
引数: `vol0, vol1` は同形の 3-D(違えば ValueError。NaN/Inf や float32 桁あふれも
ValueError)。`win は窓の半幅(窓は一辺 2·win+1)、levels` はピラミッド段数(各段
`avg_pool3d で 2 倍縮小。大変位ほど段数を増やす)、iters は各段の warp 反復、reg` は
構造テンソル対角への正則化(平坦部の 0 除算回避。大きいほど平坦部の flow が 0 に寄る)。
1 反復の更新は各軸 ±2 voxel に clamp される。
返り値 `(3, D, H, W) float32 numpy、flow[0]=dz, flow[1]=dy, flow[2]`=dx
(voxel 単位)。`vol1(x) ≈ vol0(x − d)、すなわち vol0 の構造が +d` 動いて vol1 になる。
端は border 補間で埋まるので端 1〜2 voxel の値は信用しない。剛体運動の R,t が欲しいなら
点群にして `icp_point2point_3d / fit_rigid` へ。
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• motion_scene — py -3.11 examples_3d/motion_scene.py
flow_dense 를 입력으로 받는 것)motion)—
*Provenance: match3d.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.