Medical Image Analysis
# Medical Image Analysis
## Introduction & Motivation
Medical Image Analysis: diagnose and analyze medical images. Segmentation, detection, classification. Applications: cancer detection, lesion identification, treatment planning.
Motivation: Improve diagnostic accuracy; accelerate clinical workflows.
Applications: Disease detection, treatment monitoring, surgical planning.
---
## Core Concepts & Theory
### Image Modalities
X-ray, CT, MRI, Ultrasound.
### Segmentation
Identify organs, tumors, lesions.
### Detection & Localization
Find abnormalities with bounding boxes.
### Classification
Diagnose disease presence/type.
---
## Mathematical Formulation
3D Convolution:
$$y = \sum_{d_x,d_y,d_z} w_{d_x,d_y,d_z} \cdot x_{i+d_x,j+d_y,k+d_z}$$
Dice Loss (Segmentation):
$$L = 1 - \frac{2|X \cap Y|}{|X| + |Y|}$$
Sensitivity & Specificity:
$$ ext{Sensitivity} = \frac{TP}{TP + FN}, \quad ext{Specificity} = \frac{TN}{TN + FP}$$
---
## Advanced Theory & Extensions
### 3D U-Net
Volumetric segmentation.
### Attention U-Net
Spatial and channel attention.
### Multi-task Learning
Segmentation + classification jointly.
---
## Computational Considerations
3D convolution: O(D·H·W·C²).
Memory: High for volumetric data.
Inference: Real-time on specialized hardware.
---
## Practical Implementation Strategies
### Data Preprocessing
Normalization, resampling, augmentation.
### Patch-Based Processing
Handle memory constraints.
### Ensemble Methods
Combine predictions from multiple models.
---
## Benchmark Datasets & Evaluation
LUNA16: Lung nodule detection.
Brats: Brain tumor segmentation.
Camelyon16: Histopathology cancer detection.
---
## Key Challenges & Limitations
### Data Scarcity
Limited annotated medical data.
### Imbalanced Classes
Abnormalities rare in practice.
### Generalization
Domain shift across hospitals.
---
## Hyperparameter Tuning
Patch size: 64x64x64 to 128x128x128.
Learning rate: 1e-4 to 1e-3.
Data augmentation: Rotation, shift, scale.
---
## Real-World Applications & Case Studies
Lung Cancer: Nodule detection and classification.
Brain Tumor: MRI segmentation and prognosis.
Breast Cancer: Mammography lesion detection.
---
## Integration with Other Methods
Medical AI + interpretability for clinical trust; + federated learning for privacy.
---
## Summary & Key Takeaways
Medical Image Analysis via 3D CNNs and attention mechanisms enables disease diagnosis and monitoring.
Principles:
1. 3D processing: Volumetric information.
2. Segmentation: Lesion/organ delineation.
3. Detection: Abnormality localization.
4. Classification: Disease identification.
5. Sensitivity-specificity: Clinical metrics.
---
---
## Appendix: Practical Labs
### Lab 1: 3D Dice Loss
import numpy as np
def compute_3d_dice_loss(predictions, targets, smooth=1e-6):
"""Compute 3D Dice loss"""
# Binarize predictions
pred_binary = (predictions > 0.5).astype(float)
target_binary = targets.astype(float)
# Intersection and union
intersection = np.sum(pred_binary * target_binary)
pred_sum = np.sum(pred_binary)
target_sum = np.sum(target_binary)
# Dice
dice = (2.0 * intersection + smooth) / (pred_sum + target_sum + smooth)
loss = 1.0 - dice
return loss
# Test
np.random.seed(42)
preds = np.random.rand(32, 64, 64, 64)
targets = np.random.randint(0, 2, (32, 64, 64, 64))
loss = compute_3d_dice_loss(preds, targets)
assert 0 <= loss <= 1, "Loss in range"
print("✓ 3D Dice loss working")
if __name__ == "__main__":
print("Lab 1: 3DDiceLoss - PASSED")### Lab 2: Sensitivity & Specificity
import numpy as np
def compute_sensitivity_specificity(predictions, targets):
"""Compute sensitivity and specificity"""
pred_binary = (predictions > 0.5).astype(int)
# True positives and false negatives
tp = np.sum((pred_binary == 1) & (targets == 1))
fn = np.sum((pred_binary == 0) & (targets == 1))
# True negatives and false positives
tn = np.sum((pred_binary == 0) & (targets == 0))
fp = np.sum((pred_binary == 1) & (targets == 0))
# Compute metrics
sensitivity = tp / (tp + fn + 1e-8)
specificity = tn / (tn + fp + 1e-8)
return sensitivity, specificity
# Test
np.random.seed(42)
preds = np.random.rand(100)
targets = np.random.randint(0, 2, 100)
sens, spec = compute_sensitivity_specificity(preds, targets)
assert 0 <= sens <= 1, "Sensitivity in range"
assert 0 <= spec <= 1, "Specificity in range"
print("✓ Sensitivity/Specificity working")
if __name__ == "__main__":
print("Lab 2: SensitivitySpecificity - PASSED")### Lab 3: Patch Extraction
import numpy as np
def extract_patches_3d(volume, patch_size=64, stride=32):
"""Extract 3D patches from volume"""
d, h, w = volume.shape
patches = []
for i in range(0, d - patch_size + 1, stride):
for j in range(0, h - patch_size + 1, stride):
for k in range(0, w - patch_size + 1, stride):
patch = volume[i:i+patch_size, j:j+patch_size, k:k+patch_size]
patches.append(patch)
return patches
# Test
volume = np.random.randn(128, 128, 128)
patches = extract_patches_3d(volume, patch_size=64, stride=32)
assert len(patches) > 0, "Patches extracted"
assert patches[0].shape == (64, 64, 64), "Patch shape"
print("✓ Patch extraction working")
if __name__ == "__main__":
print("Lab 3: PatchExtraction - PASSED")### Lab 4: Multi-Task Loss
import numpy as np
def multi_task_medical_loss(segmentation_pred, classification_pred, seg_target, class_target, seg_weight=0.7):
"""Combined segmentation and classification loss"""
# Segmentation loss (Dice)
seg_loss = 1 - np.mean(segmentation_pred * seg_target)
# Classification loss (CE)
class_loss = -np.mean(class_target * np.log(classification_pred + 1e-7))
# Combined
total_loss = seg_weight * seg_loss + (1 - seg_weight) * class_loss
return total_loss
# Test
np.random.seed(42)
seg_pred = np.random.rand(4, 64, 64, 64)
class_pred = np.random.rand(4, 2)
seg_target = np.random.randint(0, 2, (4, 64, 64, 64))
class_target = np.eye(2)[np.random.randint(0, 2, 4)]
loss = multi_task_medical_loss(seg_pred, class_pred, seg_target, class_target)
assert np.isfinite(loss), "Loss finite"
print("✓ Multi-task loss working")
if __name__ == "__main__":
print("Lab 4: MultiTaskLoss - PASSED")