Files
homework01/fig.mermaid
2025-12-09 15:54:50 +08:00

93 lines
3.2 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
flowchart TD
%% =========================
%% Multi-view 2D stage
%% =========================
subgraph VIEWS["Per-view input (cameras 1..N)"]
direction LR
C1["Cam 1\n2D detections: 133×2 (+conf)"] --> T1["2D latest tracking cache\n(view 1)"]
C2["Cam 2\n2D detections: 133×2 (+conf)"] --> T2["2D latest tracking cache\n(view 2)"]
C3["Cam 3\n2D detections: 133×2 (+conf)"] --> T3["2D latest tracking cache\n(view 3)"]
C4["Cam 4\n2D detections: 133×2 (+conf)"] --> T4["2D latest tracking cache\n(view 4)"]
end
%% =========================
%% Cross-view association
%% =========================
subgraph ASSOC["Cross-view data association (epipolar)"]
direction TB
EPI["Epipolar constraint\n(Sampson / point-to-epiline)"]:::core
CYCLE["Cycle consistency / view-graph pruning"]:::core
GROUP["Assemble per-target multi-view observation set\n{view_id → 133×2}"]:::core
EPI --> CYCLE --> GROUP
end
T1 --> EPI
T2 --> EPI
T3 --> EPI
T4 --> EPI
%% =========================
%% Geometry / lifting
%% =========================
subgraph GEOM["3D measurement construction"]
direction TB
RT["Camera models\nK, [R|t], SO(3)/SE(3)"]:::meta
DLT["DLT / triangulation (init)"]:::core
NN["Optional NN lifting / completion"]:::core
BA["Optional reprojection refinement\n(15 iters)"]:::core
Y["3D measurement y(t)\nJ×3 positions (+quality / R / cov)"]:::out
RT --> DLT --> NN --> BA --> Y
end
GROUP --> DLT
%% =========================
%% Tracking filter + lifecycle
%% =========================
subgraph FILTER["Tracking filter (per target)"]
direction TB
GATE["Gating\n(Mahalanobis / per-joint + global)"]:::core
IMM["IMM (motion model bank)\n(CV/CA or low/med/high Q)"]:::core
PRED["Predict\nΔt, self-propagate"]:::core
UPD["Update\nKF (linear)\nstate: [p(3J), v(3J)]"]:::core
MISS["Miss handling & track lifecycle\n(tentative → confirmed → deleted)"]:::meta
GATE --> IMM --> PRED --> UPD --> MISS
end
Y --> GATE
%% Optional inertial fusion
IMU["IMU (optional)"]:::meta --> INERT["EKF/UKF branch (optional)\nwhen augmenting state with orientation"]:::meta --> IMM
%% =========================
%% IK + optional feedback
%% =========================
subgraph IKSTAGE["IK stage (constraint / anatomy)"]
direction TB
IK["IK optimization target\n(minimize joint position error,\nadd bone length / joint limits)"]:::core
FB["Optional feedback to filter\npseudo-measurement z_IK with large R"]:::meta
IK --> FB
end
UPD --> IK
FB -.-> GATE
%% =========================
%% SMPL / mesh fitting
%% =========================
subgraph SMPLSTAGE["SMPL / SMPL-X fitting"]
direction TB
VP["VPoser / pose prior"]:::core
SMPL["SMPL(θ, β, root)\nfit to joints / reprojection"]:::core
JR["JR: Joint Regressor\nmesh → joints (loop closure)"]:::core
OUT["Outputs\nmesh + joints + pose params"]:::out
VP --> SMPL --> JR --> OUT
JR -. residual / reproject .-> SMPL
end
IK --> SMPL
classDef core fill:#0b1020,stroke:#5eead4,color:#e5e7eb,stroke-width:1.2px;
classDef meta fill:#111827,stroke:#93c5fd,color:#e5e7eb,stroke-dasharray: 4 3;
classDef out fill:#052e2b,stroke:#34d399,color:#ecfeff,stroke-width:1.4px;