Binary segmentation accuracy metrics
Project description
Segmentation Metrics
Volumetric binary mask segmentation accuracy metrics
Scope
A small package for assessing the accuracy of binary segmentations. There are lots of metrics that can be used to compare how close two segmentations are, here voxel overlap, surface and volume based metrics are all calculated at once and returned either as individual metrics, a dictionary or a Pandas DataFrame.
The surface based metrics in this package are calculated using code from deepmind's surface-distance repository, however as this is not available as a PyPI package, the code has been included as a submodule here.
Installation
Segmentation Metrics is available on PyPI and can be installed using pip
:
pip install segmentationmetrics
or if you're a conda
user:
conda install segmentationmetrics -c conda-forge
Alternatively, you can install from source:
git clone https://github.com/alexdaniel654/Segmentation_Metrics.git
cd Segmentation_Metrics
pip install -e .
Calculated Metrics
Voxel overlap based metrics
Surface based metrics
- Mean Surface Distance (in mm) - The symmetric mean surface distance is returned by default i.e. the mean of the distance from surface A to surface B and surface B to surface A.
- Hausdorff Distance (in mm) - Computes the robust distance based on the percentile of distances rather than the maximum distance.
Volume based metrics
- Volume Difference (in millilitres)
Example Usage
import nibabel as nib # Package for reading MRI data
import segmentationmetrics as sm
img_manual = nib.load('mask_manually_segmented.nii.gz') # Load manually generated ground truth mask
img_automatic = nib.load('mask_automatically_segmented.nii.gz') # Load automatically generated mask
# Get voxel data from image object
mask_manual = img_manual.get_fdata()
mask_automatic = img_automatic.get_fdata()
# Get zoom from header
zoom = img_manual.header.get_zooms()
# Generate metrics
metrics = sm.SegmentationMetrics(mask_automatic, mask_manual, zoom)
# Print the dice score
print(f'The Dice score is {metrics.dice:.2f}')
The Dice score is 0.85
# Get and print a DataFrame containing all the scores for this mask pair
df = metrics.get_df()
print(df)
Metric Score
dice Dice 0.844512
jaccard Jaccard 0.730870
sensitivity Sensitivity 0.732352
specificity Specificity 0.999926
precision Precision 0.997239
accuracy Accuracy 0.990492
mean_surface_distance Mean Surface Distance 1.459697
hausdorff_distance Hausdorff Distance 7.027224
volume_difference Volume Difference -107.212906
true_volume True Volume 403.632624
predicted_volume Predicted Volume 296.419718
# As above but with asymmetric mean surface distance and Hausdorff distance defined by the 99th percentil rather than the 95th percentile.
metrics = sm.SegmentationMetrics(mask_automatic, mask_manual, zoom, symmetric=False, percentile=99)
df = metrics.get_df()
print(df)
Metric Score
dice Dice 0.844512
jaccard Jaccard 0.73087
sensitivity Sensitivity 0.732352
specificity Specificity 0.999926
precision Precision 0.997239
accuracy Accuracy 0.990492
mean_surface_distance Mean Surface Distance (1.6603182056644057, 1.259075931110695)
hausdorff_distance Hausdorff Distance 9.335755
volume_difference Volume Difference -107.212906
true_volume True Volume 403.632624
predicted_volume Predicted Volume 296.419718
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file segmentationmetrics-1.1.1.tar.gz
.
File metadata
- Download URL: segmentationmetrics-1.1.1.tar.gz
- Upload date:
- Size: 21.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f5b3a9043a92a3a4712dbdcf43ed355b013a207191c39eb04a9cf2373e9530f5 |
|
MD5 | 4ac371beb5dea764d8aeb909ef41f004 |
|
BLAKE2b-256 | 7ec8fddb11a27d4bad297a39396a50a67c7f3ada0bf2591fa34c523d60b2df48 |
File details
Details for the file segmentationmetrics-1.1.1-py3-none-any.whl
.
File metadata
- Download URL: segmentationmetrics-1.1.1-py3-none-any.whl
- Upload date:
- Size: 22.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 855ab816ba378c9371c56e4999a9979a7a2155752f03975f847ee1d34bbd119b |
|
MD5 | eda5659d913e9e28de83197d96ef4fc4 |
|
BLAKE2b-256 | 0232afef6e4003bd5fc451a61a14d48f06d9599bcf2fff49e762d3df047f0b0f |