Skip to main content

Binary segmentation accuracy metrics

Project description

Segmentation Metrics

Python CI Documentation Status PyPI version Anaconda-Server Badge Downloads Anaconda-Server Badge License DOI

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

segmentationmetrics-1.1.2.tar.gz (21.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

segmentationmetrics-1.1.2-py3-none-any.whl (22.8 kB view details)

Uploaded Python 3

File details

Details for the file segmentationmetrics-1.1.2.tar.gz.

File metadata

  • Download URL: segmentationmetrics-1.1.2.tar.gz
  • Upload date:
  • Size: 21.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for segmentationmetrics-1.1.2.tar.gz
Algorithm Hash digest
SHA256 f9d25b09bca46b6b3ad3ca75b69f58a7187d1ff47de4824887d29402e44a86d0
MD5 a0b10eee7a6a5871d9797bead3e7e713
BLAKE2b-256 072f582047cacf97f385cc346afb7a0347ae240fc9cfda682d1e4841de45862b

See more details on using hashes here.

File details

Details for the file segmentationmetrics-1.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for segmentationmetrics-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d71266d40c094308f70e81962104d5372e3139a86d50fc2cd6e26686dca74e1a
MD5 910e86efda7203cbb502d6066c33f426
BLAKE2b-256 959e34ad02e622f5b54d7f7bbbc4a348960dc13c346da7bc9961b8372fcf1597

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page