|
46 | 46 | ppm212_1 = PM(pred212, ref212) |
47 | 47 | ppm212_2 = PM(pred212,ref212,dict_args={'boundary_dist':2}) |
48 | 48 |
|
| 49 | +#Data for figure 5c (Hausdoff with annotation error p14 Pitfalls) |
| 50 | +ref5c = np.zeros([14, 14]) |
| 51 | +ref5c[1, 1] = 1 |
| 52 | +ref5c[9:12, 9:12] = 1 |
| 53 | +pred5c = np.zeros([14, 14]) |
| 54 | +pred5c [9:12, 9:12] = 1 |
| 55 | +bpm5c = PM(pred5c, ref5c, dict_args={'hd_perc':95}) |
| 56 | + |
49 | 57 | ### Small size of structures relative to pixel/voxel size (DSC) |
50 | 58 | ## Larger structure |
51 | 59 | p_large_ref = np.zeros((11, 11)) |
|
77 | 85 | f27_ref2 = f27_pred1 |
78 | 86 | f27_pred2 = f27_ref1 |
79 | 87 |
|
80 | | -# Figure ClDice p 53 S2.14 |
| 88 | +# Figure ClDice p 53 S2.14 pitfalls paper |
81 | 89 | ref214 = np.zeros([24,24]) |
82 | 90 | ref214[1:10,7:12]=1 |
83 | 91 | ref214[10:12,3:19]=1 |
|
116 | 124 |
|
117 | 125 |
|
118 | 126 |
|
119 | | -# panoptic quality |
120 | | -pq_pred1 = np.zeros([21, 21]) |
121 | | -pq_pred1[5:7, 2:5] = 1 |
122 | | -pq_pred2 = np.zeros([21, 21]) |
123 | | -pq_pred2[14:18, 4:6] = 1 |
124 | | -pq_pred2[16, 3] = 1 |
125 | | -pq_pred3 = np.zeros([21, 21]) |
126 | | -pq_pred3[14:18, 7:12] = 1 |
127 | | -pq_pred4 = np.zeros([21, 21]) |
128 | | -pq_pred4[2:8, 13:16] = 1 |
129 | | -pq_pred4[2:4, 12] = 1 |
130 | | - |
131 | | -pq_ref1 = np.zeros([21, 21]) |
132 | | -pq_ref1[8:11, 3] = 1 |
133 | | -pq_ref1[9, 2:5] = 1 |
134 | | -pq_ref2 = np.zeros([21, 21]) |
135 | | -pq_ref2[14:19, 7:13] = 1 |
136 | | -pq_ref3 = np.zeros([21, 21]) |
137 | | -pq_ref3[2:7, 14:17] = 1 |
138 | | -pq_ref3[2:4, 12:14] = 1 |
| 127 | +# panoptic quality Figure 3.51 p96 |
| 128 | +pq_pred1 = np.zeros([18, 18]) |
| 129 | +pq_pred1[ 3:7,1:3] = 1 |
| 130 | +pq_pred1[3:6,3:7]=1 |
| 131 | +pq_pred2 = np.zeros([18, 18]) |
| 132 | +pq_pred2[13:16,4:6] = 1 |
| 133 | +pq_pred3 = np.zeros([18, 18]) |
| 134 | +pq_pred3[7:12,13:17] = 1 |
| 135 | +pq_pred4 = np.zeros([18, 18]) |
| 136 | +pq_pred4[13:15,13:17] = 1 |
| 137 | +pq_pred4[15,15] = 1 |
| 138 | + |
| 139 | +pq_ref1 = np.zeros([18, 18]) |
| 140 | +pq_ref1[2:7, 1:3] = 1 |
| 141 | +pq_ref1[2:5,3:6] = 1 |
| 142 | +pq_ref2 = np.zeros([18, 18]) |
| 143 | +pq_ref2[6:12,12:17] = 1 |
| 144 | +pq_ref3 = np.zeros([18, 18]) |
| 145 | +pq_ref3[14:15:,7:10] = 1 |
| 146 | +pq_ref3[13:16,8:9] = 1 |
139 | 147 |
|
140 | 148 | f27_pred = np.concatenate([np.ones([81]), np.zeros([9]), np.ones([2]), np.zeros([8])]) |
141 | 149 | f27_ref = np.concatenate([np.ones([90]), np.zeros([10])]) |
@@ -324,16 +332,6 @@ def test_fn_map(): |
324 | 332 | fn2 = ppm210_2.fn() |
325 | 333 | expected_fn1 = 12 |
326 | 334 | expected_fn2 = 0 |
327 | | - # fn_map_1 = ppm210_1.__fn_map() |
328 | | - # expected_fn_map1 = np.zeros([14,14]) |
329 | | - # expected_fn_map1[5:6,5:9] = 1 |
330 | | - # expected_fn_map1[8:9,5:9] = 1 |
331 | | - # expected_fn_map1[5:9,5:6] = 1 |
332 | | - # expected_fn_map1[5:9,8:9] = 1 |
333 | | - # fn_map_2 = ppm210_2.__fn_map() |
334 | | - # expected_fn_map2 = np.zeros([14,14]) |
335 | | - # assert_array_equal(fn_map_1, expected_fn_map1) |
336 | | - # assert_array_equal(fn_map_2, expected_fn_map2) |
337 | 335 | assert fn1 == 12 |
338 | 336 | assert fn2 == 0 |
339 | 337 |
|
@@ -553,8 +551,8 @@ def test_negative_predictive_value(): |
553 | 551 | """ |
554 | 552 | Taking figure SN 2.9 as inspiration p49 Pitfalls |
555 | 553 | """ |
556 | | - value_test1 = ppm29_1.negative_predictive_values() |
557 | | - value_test2 = ppm29_2.negative_predictive_values() |
| 554 | + value_test1 = ppm29_1.negative_predictive_value() |
| 555 | + value_test2 = ppm29_2.negative_predictive_value() |
558 | 556 | expected_npv1 = 0.889 |
559 | 557 | expected_npv2 = 0.47 |
560 | 558 | assert_allclose(value_test1, expected_npv1, atol=0.001) |
@@ -699,23 +697,27 @@ def test_nsd2(): |
699 | 697 | assert_allclose(value_test, expected_nsd2, atol=0.01) |
700 | 698 |
|
701 | 699 |
|
702 | | -def test_iou(): |
| 700 | +def test_intersection_over_union(): |
703 | 701 | bpm = PM(p_pred, p_ref) |
704 | 702 | value_test = bpm.intersection_over_union() |
705 | 703 | print("IoU ", value_test) |
706 | 704 | expected_iou = 0.76 |
707 | 705 | assert_allclose(value_test, expected_iou, atol=0.01) |
708 | 706 |
|
709 | 707 |
|
710 | | -def test_fbeta(): |
711 | | - pm = PM(p_large_pred1, p_large_ref) |
712 | | - pm2 = PM(p_large_pred1, p_large_ref, dict_args={"beta": 1}) |
713 | | - value_test = pm.fbeta() |
714 | | - value_test2 = pm2.fbeta() |
715 | | - print(value_test) |
716 | | - expected_fbeta = 0.986 |
717 | | - assert_allclose(value_test, expected_fbeta, atol=0.001) |
718 | | - assert_allclose(value_test2, expected_fbeta, atol=0.001) |
| 708 | +def test_fbeta_beta_value(): |
| 709 | + """ |
| 710 | + Taking inspiration from SN 2.9 - p49 Pitfalls |
| 711 | + """ |
| 712 | + expected_f11 = 0.86 |
| 713 | + expected_f12 = 0.94 |
| 714 | + ppm29_1.dict_args={'beta':1} |
| 715 | + ppm29_2.dict_args={'beta':1} |
| 716 | + value_test1 = ppm29_1.fbeta() |
| 717 | + value_test2 = ppm29_2.fbeta() |
| 718 | + assert_allclose(value_test1, expected_f11, atol=0.01) |
| 719 | + assert_allclose(value_test2, expected_f12, atol=0.01) |
| 720 | + |
719 | 721 |
|
720 | 722 | def test_sensitivity(): |
721 | 723 | """ |
@@ -749,13 +751,13 @@ def test_sens(): |
749 | 751 | assert_allclose(value_test, expected_sens, atol=0.01) |
750 | 752 |
|
751 | 753 |
|
752 | | -def test_ppv(): |
| 754 | +def test_positive_predictive_value(): |
753 | 755 | """ |
754 | 756 | Taking as inspiration figure SN2.9 p49 Pitfalls |
755 | 757 | """ |
756 | 758 |
|
757 | | - value_test1 = ppm29_1.positive_predictive_values() |
758 | | - value_test2 = ppm29_2.positive_predictive_values() |
| 759 | + value_test1 = ppm29_1.positive_predictive_value() |
| 760 | + value_test2 = ppm29_2.positive_predictive_value() |
759 | 761 | expected_ppv1 = 0.82 |
760 | 762 | expected_ppv2 = 0.98 |
761 | 763 | assert_allclose(value_test1, expected_ppv1, atol=0.01) |
@@ -817,15 +819,12 @@ def test_nsd_s210(): |
817 | 819 | assert_allclose(nsd_1,expected_nsd1,atol=0.01) |
818 | 820 | assert_allclose(nsd_2,expected_nsd2,atol=0.01) |
819 | 821 |
|
820 | | -def test_hd(): |
821 | | - f20_ref = np.zeros([14, 14]) |
822 | | - f20_ref[1, 1] = 1 |
823 | | - f20_ref[9:12, 9:12] = 1 |
824 | | - f20_pred = np.zeros([14, 14]) |
825 | | - f20_pred[9:12, 9:12] = 1 |
826 | | - bpm = PM(f20_pred, f20_ref, dict_args={"hd_perc": 95}) |
827 | | - hausdorff_distance = bpm.measured_hausdorff_distance() |
828 | | - hausdorff_distance_perc = bpm.measured_hausdorff_distance_perc() |
| 822 | +def test_hausdorff_distance_5c(): |
| 823 | + """ |
| 824 | + Using figure 5c p14 as illustration for calculation of HD and HD95 |
| 825 | + """ |
| 826 | + hausdorff_distance = bpm5c.measured_hausdorff_distance() |
| 827 | + hausdorff_distance_perc = bpm5c.measured_hausdorff_distance_perc() |
829 | 828 | print(hausdorff_distance_perc) |
830 | 829 | expected_hausdorff_distance = 11.31 |
831 | 830 | expected_hausdorff_distance_perc = 6.79 |
|
0 commit comments