Overview
distance_transforms
is a high-performance Python package for computing distance transforms. It offers significant performance improvements over traditional implementations, especially for large arrays.
Installation
Install distance_transforms using pip:
pip install distance_transforms
Quick Example
import numpy as np
import matplotlib.pyplot as plt
import distance_transforms as dts
# Create a random binary array
= np.random.choice([0, 1], size=(10, 10)).astype(np.float32)
arr
# Apply distance transform
= dts.transform(arr) result
What is a Distance Transform?
A distance transform converts a binary image into a grayscale image where the value of each pixel is the distance to the nearest foreground pixel (typically marked as 1 in the binary image). This transformation is useful in various applications including:
- Path planning and navigation
- Morphological operations
- Feature extraction
- Medical image analysis
- Computer vision algorithms
Key Features
- High Performance: Optimized algorithms for CPU and GPU
- Julia Integration: Powered by DistanceTransforms.jl for maximum efficiency
- GPU Acceleration: Support for NVIDIA GPUs through PyTorch and CUDA
- Simple API: Clean, intuitive Python interface
- NumPy Integration: Works seamlessly with NumPy arrays
- PyTorch Support: Native support for PyTorch CUDA tensors
- Multi-Dimensional: Works with 1D, 2D, and 3D arrays
Performance Comparison
distance_transforms
significantly outperforms traditional implementations:
import numpy as np
import torch
import time
import distance_transforms as dts
from scipy.ndimage import distance_transform_edt
# Create a large 3D array
= (100, 100, 100)
size = np.random.choice([0, 1], size=size).astype(np.float32)
arr
# Benchmark SciPy
= time.time()
start = distance_transform_edt(arr == 0) ** 2
scipy_result print(f"SciPy time: {time.time() - start:.3f}s")
# Benchmark distance_transforms (CPU)
= time.time()
start = dts.transform(arr)
dts_result print(f"distance_transforms CPU time: {time.time() - start:.3f}s")
# Benchmark distance_transforms (GPU)
if torch.cuda.is_available():
= torch.tensor(arr, device='cuda')
tensor = time.time()
start = dts.transform_cuda(tensor)
dts_gpu_result print(f"distance_transforms GPU time: {time.time() - start:.3f}s")
Typical results on modern hardware: - SciPy: ~1.200s - distance_transforms (CPU): ~0.500s - distance_transforms (GPU): ~0.120s
API Preview
# CPU transform with NumPy
import numpy as np
import distance_transforms as dts
= np.random.choice([0, 1], size=(100, 100)).astype(np.float32)
arr = dts.transform(arr)
result
# GPU transform with PyTorch
import torch
import distance_transforms as dts
= torch.rand((100, 100), device='cuda')
tensor = (tensor > 0.5).float()
tensor = dts.transform_cuda(tensor) result
When to Use Distance Transforms
Distance transforms are particularly useful in:
- Medical Image Analysis: Segment organs, measure distances between anatomical structures
- Computer Vision: Object recognition, shape analysis, skeletonization
- Path Planning: Navigation algorithms in robotics
- Deep Learning: Custom loss functions like Hausdorff distance for segmentation tasks
Next Steps
- Explore the User Guide for comprehensive documentation
- Check the API Reference for detailed function information
- Visit our GitHub repository for the latest updates