--- a +++ b/ants/label/label_overlap_measures.py @@ -0,0 +1,46 @@ +__all__ = ["label_overlap_measures"] + +import pandas as pd + + +from ants.internal import get_lib_fn +from ants.decorators import image_method + +@image_method +def label_overlap_measures(source_image, target_image): + """ + Get overlap measures from two label images (e.g., Dice) + + ANTsR function: `labelOverlapMeasures` + + Arguments + --------- + source image : ANTsImage + Source image + + target_image : ANTsImage + Target image + + Returns + ------- + data frame with measures for each label and all labels combined + + Example + ------- + >>> import ants + >>> r16 = ants.image_read( ants.get_ants_data('r16') ) + >>> r64 = ants.image_read( ants.get_ants_data('r64') ) + >>> s16 = ants.kmeans_segmentation( r16, 3 )['segmentation'] + >>> s64 = ants.kmeans_segmentation( r64, 3 )['segmentation'] + >>> stats = ants.label_overlap_measures(s16, s64) + """ + source_image_int = source_image.clone("unsigned int") + target_image_int = target_image.clone("unsigned int") + + libfn = get_lib_fn("labelOverlapMeasures%iD" % source_image_int.dimension) + df = libfn(source_image_int.pointer, target_image_int.pointer) + df = pd.DataFrame(df) + # Set Label column to object type as it can contain strings + df['Label'] = df['Label'].astype(object) + df.loc[0, 'Label'] = 'All' + return df