--- a +++ b/evaluation/eval_metrics-1.py @@ -0,0 +1,98 @@ + +import numpy as np +from scipy.spatial.distance import directed_hausdorff +import nibabel as nib +from skimage import io + +from nipype.algorithms.metrics import Distance + +import SimpleITK as sitk + +from hausdorff import hausdorff + + +def compute_hausdorff_distance(in1, in2, label = 'all'): + hausdorff_distance_filter = sitk.HausdorffDistanceImageFilter() + if label == 'all': + # Hausdorff distance + hausdorff_distance_filter.Execute(in1, in2) + else: + + in1_array = sitk.GetArrayFromImage(in1) + in1_array = (in1_array == label) *1 + in1_array = in1_array.astype('uint16') + img1 = sitk.GetImageFromArray(in1_array) + + in2_array = sitk.GetArrayFromImage(in2) + in2_array = (in2_array == label) *1 + in2_array = in2_array.astype('uint16') + img2 = sitk.GetImageFromArray(in2_array) + # Hausdorff distance + hausdorff_distance_filter.Execute(img1, img2) + return hausdorff_distance_filter.GetHausdorffDistance() + +def compute_dice_coefficient(in1, in2, label = 'all'): + + if label=='all': + return 2 * np.sum( (in1>0) & (in2>0) & (in1 == in2)) / (np.sum(in1 > 0) + np.sum(in2 > 0)) + else: + return 2 * np.sum((in1 == label) & (in2 == label)) / (np.sum(in1 == label) + np.sum(in2 == label)) + +def compute_volumentric_difference(in1, in2, label = 'all'): + if label == 'all': +# vol_dif = np.sum((in1 != in2) & (in1 !=0) & (in2 !=0)) + return np.sum((in1 != in2)) / ((np.sum(in1 > 0) + np.sum(in2 > 0))) + + else: + in1 = (in1 == label) * 1 + in2 = (in2 == label) * 1 + return np.sum((in1 != in2)) / ((np.sum(in1 > 0) + np.sum(in2 > 0))) + + + + +if __name__ == '__main__': + gt = '/home/yb/my-files/datasets/MISA_dataset_res/predict_header_data/IBSR_17_seg.nii.gz' + pred = '//home/yb/my-files/datasets/MISA_dataset_res/Validation_Set/IBSR_17/IBSR_17_seg.nii.gz' + +# gt_nii = nib.load(gt) +# gt_nii = gt_nii.get_data() +# I1 = gt_nii[:,:,100] +## io.imshow(np.squeeze(I1,axis=-1)) +# +# pred_nii = nib.load(pred) +# pred_nii = pred_nii.get_data() +## +## I2 = pred_nii[:,:,100] +### io.imshow(np.squeeze(I2, axis=-1)) +## +# dice = compute_dice_coefficient(gt_nii, pred_nii) +# +# print(dice) +## +# voil_dif = compute_volumentric_difference(gt_nii, pred_nii) +# print(voil_dif) + + im1 = sitk.ReadImage(gt, sitk.sitkUInt16) + im2 = sitk.ReadImage(pred, sitk.sitkUInt16) + + + # I1 = sitk.GetArrayFromImage(im2) + + # I2 = (I1 == 2) *1 + # I2 = I2.astype('uint16') + +# image = sitk.Image(256, 128, 256, sitk.sitkInt16) +# image.SetOrigin(im1.GetOrigin()) + + # img = sitk.GetImageFromArray(I2) + +# file_name = '17_2.nii.gz' +# sitk.WriteImage(img, file_name) + + haus = compute_hausdorff_distance(im1, im2, label = 3) + print(haus) + + + +