procrustes oppoints × points → matriximport fullseye as fs; fs.ledger.procrustes_fit(source, target, scaling: 'bool' = True, reflection: 'bool' = False) (実装を直接呼ぶなら import shapestats; shapestats.procrustes_fit(source, target, scaling: 'bool' = True, reflection: 'bool' = False)、台帳から引くなら opsshapestat.get("procrustes_fit"))source を target へ重ねる相似変換。→ (4, 4) の同次行列。
点の並びが対応していることが前提(i 番目どうしが同じ解剖学的位置)。
対応が無い点群では例外は出ず、意味の無い変換が返る —— 対応の有無は
この関数からは見えない。対応が無いなら ICP 系(registration)を使う。
scaling=True なら大きさの違いも吸収する。reflection=False(既定)は
det(R) = +1 を強制する —— 許すと左手系の個体が右手系の平均に重なり、
左右非対称性という測りたいものが消える。
行列は同次座標で target ~ source @ M[:3,:3].T + M[:3,3] の向き。
py -3.11 examples/poc_change_detection_misreg.pypy -3.11 examples/poc_die_tilt_tsv_overlay.pypy -3.11 examples/shapestat_landmark_tour.pymatrix を入力に取れる)—
procrustes)procrustes_align · procrustes_distance · generalized_procrustes · shape_mean
Provenance: shapestats.py — SHAPESTAT operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.