|
a |
|
b/Metrics.py |
|
|
1 |
# -*- coding: utf-8 -*- |
|
|
2 |
""" |
|
|
3 |
Created on Thu Nov 24 22:50:27 2016 |
|
|
4 |
|
|
|
5 |
@author: Shreyas_V |
|
|
6 |
""" |
|
|
7 |
|
|
|
8 |
import numpy as np |
|
|
9 |
|
|
|
10 |
def accuracy(pred, orig_label, msk): |
|
|
11 |
''' calculates complete accuracy |
|
|
12 |
INPUT: predicted labels, original labels, each 2D numpy arrays |
|
|
13 |
OUTPUT: float |
|
|
14 |
''' |
|
|
15 |
acc = len(pred[(pred == orig_label) & msk])/float(len(msk[msk])) |
|
|
16 |
return acc |
|
|
17 |
|
|
|
18 |
def DSC_en(pred, orig_label): |
|
|
19 |
TP = len(pred[(pred == 4) & (pred == orig_label)]) |
|
|
20 |
denom = len(pred[(pred == 4) & msk]) + len (orig_label[(orig_label == 4)]) |
|
|
21 |
if denom == 0: |
|
|
22 |
return 1. |
|
|
23 |
return 2.*TP/float(denom) |
|
|
24 |
|
|
|
25 |
def DSC(pred, orig_label): |
|
|
26 |
''' Calculates Dice Score Coefficient |
|
|
27 |
INPUT: predicted, original labels |
|
|
28 |
OUTPUT: float |
|
|
29 |
''' |
|
|
30 |
TP = len(pred[(pred != 0) & (orig_label != 0)]) |
|
|
31 |
denom = len(pred[pred!=0]) + len(orig_label[orig_label != 0]) |
|
|
32 |
if denom == 0: |
|
|
33 |
return 1 |
|
|
34 |
return 2.*TP/float(denom) |
|
|
35 |
|
|
|
36 |
def DSC_core_tumor(pred, orig_label): |
|
|
37 |
''' Calculates DSC for core tumor (1, 3 and 4) |
|
|
38 |
INPUT: predicted, original labels |
|
|
39 |
OUTPUT: float |
|
|
40 |
''' |
|
|
41 |
TP = len(pred[((pred!=0) & (pred!=2)) & ((orig_label !=0) & (orig_label !=2))]) |
|
|
42 |
denom = len(pred[pred[((pred!=0) & (pred!=2))]) + len(orig_label[(orig_label !=0) & (orig_label !=2)]) |
|
|
43 |
if denom == 0: |
|
|
44 |
return 1 |
|
|
45 |
return 2.*TP/float(denom) |
|
|
46 |
|
|
|
47 |
def PPV(pred, orig_label): |
|
|
48 |
TP = len(pred[((pred!=0) & (pred!=2)) & ((orig_label !=0) & (orig_label !=2))]) |
|
|
49 |
FP = len(pred[((pred!=0) & (pred!=2)) & ((orig_label ==0) | (orig_label ==2))]) |
|
|
50 |
if TP == 0: |
|
|
51 |
return 0. |
|
|
52 |
return TP/float(TP+FP) |