This example demonstrates using Topological Data Analysis (TDA) to classify tissue samples as healthy or pathological based on topological features.
cargo run -p medicine_examples --example mri_tissue_classificationIn medical imaging (MRI/CT), distinguishing between healthy tissue and pathological structures is critical:
- Tumor Detection: Some tumors have similar density to healthy tissue but distinct structure
- Necrotic Core Identification: Dead tissue forms "holes" inside tumors
- Robust Classification: Topology is invariant to noise and deformation
Traditional methods use pixel intensity (density). TDA adds structural analysis:
| Feature | Intensity-Based | Topology-Based |
|---|---|---|
| Solid tumor | High density | χ = 1 (no holes) |
| Necrotic tumor | Similar density | χ ≤ 0 (has holes) |
| Healthy tissue | Normal density | χ = 1 (contractible) |
The Euler Characteristic (χ) counts topological features:
χ = V - E + F = (connected components) - (holes)
| Topology | χ Value | Meaning |
|---|---|---|
| Solid disk | 1 | Healthy tissue (contractible) |
| Ring/Torus | 0 | Has a hole (necrotic core) |
| Two disks | 2 | Disconnected (fragmented) |
[Step 1] Ingest Points → Load 3D point cloud from simulated MRI
↓
[Step 2] Triangulate → Build Vietoris-Rips complex (radius=0.6)
↓
[Step 3] Compute χ → Calculate Euler Characteristic
↓
[Step 4] Diagnose → Classify based on topology
Each step is composed monadically via PropagatingEffect::bind().
Sample A (Healthy): χ = 1 → HEALTHY (no holes)
Sample B (Tumor): χ = 0 → PATHOLOGICAL (has hole/void)
- Real MRI Data: Replace simulated points with actual scan data
- Different radii: Tune triangulation radius for your data scale
- 3D Visualization: Export simplicial complex for rendering
- Persistent Homology: Use Betti numbers for richer topological features
- Multi-scale Analysis: Sweep radius to find optimal classification
PropagatingEffect::bind()- Monadic composition of analysis stepsPointCloud::triangulate()- Vietoris-Rips complex constructionBaseTopology::num_elements_at_grade()- Count simplices at each dimensionCausalTensor- Store point cloud coordinates