A newer version of the Streamlit SDK is available: 1.56.0
title: Pneumonia Consolidation Annotation Tool
emoji: π«
colorFrom: blue
colorTo: purple
sdk: streamlit
sdk_version: 1.29.0
python_version: '3.11'
app_file: streamlit_app.py
pinned: false
short_description: Pneumonia Consolidation Annotation Tool
Pneumonia Consolidation Segmentation Tools π«
A comprehensive toolkit for segmenting pneumonia consolidation in chest X-rays using machine learning, with tools for preprocessing, annotation, and validation using Dice coefficient metrics.
π Features
1. Dice Score Calculator (Streamlit App)
- Interactive web interface for calculating segmentation metrics
- Compare ground truth vs predicted masks
- Metrics: Dice coefficient, IoU, Precision, Recall, F1, Hausdorff distance
- Visual overlays with color-coded comparisons
- Batch processing support
- Built-in annotation guidelines
2. Image Preprocessing
- CLAHE enhancement for local contrast
- Sharpening filters to reveal air bronchograms
- Edge enhancement for consolidation boundaries
- Batch processing capabilities
3. SAM Integration
- Automatic mask generation using Segment Anything Model
- Interactive point-based segmentation
- Bounding box prompts
- Batch processing support
π Quick Start
Installation
# Clone or download this repository
cd dice/
# Install dependencies
pip install -r requirements.txt
# Optional: For SAM integration
# pip install segment-anything torch torchvision
# Download SAM checkpoint from: https://github.com/facebookresearch/segment-anything
Running the Dice Calculator App
streamlit run dice_calculator_app.py
The app will open in your browser at http://localhost:8501
π Usage Guide
1. Preprocessing Images
Enhance chest X-rays to better visualize consolidations:
# Single image
python preprocessing_consolidation.py \
--input /path/to/image.jpg \
--output /path/to/enhanced.jpg
# Batch processing
python preprocessing_consolidation.py \
--input /path/to/images/ \
--output /path/to/enhanced/ \
--batch \
--extension .jpg
2. Calculating Dice Scores
Using the Streamlit App:
- Start the app:
streamlit run dice_calculator_app.py - Upload your chest X-ray, ground truth mask, and predicted mask
- View metrics and visualizations instantly
- Download results as CSV or images
Programmatic Usage:
import cv2
from dice_calculator_app import calculate_dice_coefficient
# Load masks
ground_truth = cv2.imread('ground_truth_mask.png', cv2.IMREAD_GRAYSCALE)
prediction = cv2.imread('predicted_mask.png', cv2.IMREAD_GRAYSCALE)
# Calculate Dice
dice = calculate_dice_coefficient(ground_truth, prediction)
print(f"Dice Coefficient: {dice:.4f}")
3. Using SAM for Automatic Segmentation
First, download a SAM checkpoint:
- ViT-H (Huge) - Most accurate
- ViT-L (Large) - Balanced
- ViT-B (Base) - Fastest
# Interactive mode (click points to guide segmentation)
python sam_integration.py \
--checkpoint sam_vit_h_4b8939.pth \
--image chest_xray.jpg \
--mode interactive
# Automatic batch processing
python sam_integration.py \
--checkpoint sam_vit_h_4b8939.pth \
--input_dir /path/to/images/ \
--output_dir /path/to/masks/ \
--mode auto
π Understanding the Metrics
Dice Coefficient (Main Metric)
- Range: 0 (no overlap) to 1 (perfect overlap)
- Formula:
2 Γ |A β© B| / (|A| + |B|) - Interpretation:
- > 0.85: Excellent segmentation
- 0.70-0.85: Good (acceptable for fuzzy consolidation borders)
- < 0.70: Needs review
IoU (Jaccard Index)
- Range: 0 to 1
- Formula:
|A β© B| / |A βͺ B| - More strict than Dice coefficient
Precision & Recall
- Precision: How many predicted pixels are correct
- Recall: How many actual consolidation pixels were found
Hausdorff Distance
- Measures maximum distance between mask boundaries
- Lower is better (masks are closer)
π― Annotation Guidelines
Key Radiologic Signs
1. Air Bronchograms β
- Dark, branching tubes inside white consolidation
- 100% diagnostic for pneumonia
- Include entire surrounding region in mask
2. Silhouette Sign
- Heart or diaphragm border "disappears" into white area
- Include boundary in segmentation
3. Border Characteristics
- Fuzzy, poorly defined edges
- Blend into surrounding tissue
- Use enhanced preprocessing to see better
Best Practices
β DO:
- Trace through ribs mentally
- Include full air bronchogram regions
- Use preprocessing to see subtle borders
- Label different types: solid, ground-glass, air bronchograms
β DON'T:
- Include ribs in masks
- Over-segment into normal lung
- Miss subtle ground-glass opacities
π Project Structure
dice/
βββ dice_calculator_app.py # Main Streamlit application
βββ preprocessing_consolidation.py # Image enhancement tools
βββ sam_integration.py # SAM integration
βββ requirements.txt # Python dependencies
βββ README.md # This file
βββ annotations/ # Store annotation masks (create)
β βββ ground_truth/
β βββ predictions/
βββ enhanced_images/ # Preprocessed images (create)
βββ results/ # Dice scores and reports (create)
π§ Advanced Configuration
Streamlit App Settings
In the sidebar:
- Overlay Transparency: Adjust visualization opacity
- Calculate Hausdorff Distance: Enable for boundary distance metrics (slower)
Preprocessing Parameters
Edit preprocessing_consolidation.py to adjust:
clahe = cv2.createCLAHE(
clipLimit=3.0, # Increase for more contrast
tileGridSize=(8,8) # Smaller = more local enhancement
)
SAM Parameters
In sam_integration.py, adjust:
# Confidence threshold for automatic detection
if scores[0] > 0.8: # Lower = more permissive
# Grid density for automatic sampling
grid_size = 5 # Increase for finer sampling
π¬ Workflow Recommendations
For Manual Annotation:
- Preprocess images with
preprocessing_consolidation.py - Annotate in CVAT or Label Studio
- Validate with Dice calculator app
- Iterate until Dice > 0.80
For ML Training:
- Generate initial masks with SAM
- Refine manually in annotation tool
- Calculate metrics to ensure quality
- Use as training data for your model
For Validation Study:
- Have multiple annotators segment images
- Compare annotations using Dice calculator
- Calculate inter-rater agreement
- Establish ground truth consensus
π References
Tools & Models
Medical Context
- Air Bronchograms: Air-filled bronchi visible against consolidated lung
- Silhouette Sign: Loss of normal boundaries due to adjacent opacity
- Consolidation: Filling of air spaces with fluid/exudate in pneumonia
π Troubleshooting
App won't start
# Check Streamlit installation
pip install --upgrade streamlit
# Run with verbose logging
streamlit run dice_calculator_app.py --logger.level=debug
SAM errors
# Ensure PyTorch is installed
pip install torch torchvision
# Download correct checkpoint for model type
# vit_h, vit_l, or vit_b must match checkpoint
Image size issues
Images are automatically resized to match. For best results:
- Use same resolution for all images in a study
- Minimum 512x512 recommended
- Maximum 2048x2048 for performance
π License
This project is for research and educational purposes related to pneumonia diagnosis and medical image segmentation.
π€ Contributing
Contributions welcome! Areas for improvement:
- Additional metrics (Surface Dice, Boundary IoU)
- 3D visualization support
- Integration with DICOM files
- Multi-class segmentation support
π§ Contact
For questions or issues, please open an issue in the repository.
Note: This tool is for research purposes. Always validate with clinical experts and follow appropriate medical imaging guidelines.