我正试图评估在3D MRI卷(大脑)中分割区域的算法的准确性。我一直在使用Dice,Jaccard,FPR,TNR,Precision ...等,但我只是按像素进行的(I.E. FNs =假负像素数)。是否有一个python软件包(或伪代码)在病变级别执行此操作?例如,计算TP作为我的算法检测到的病变数(grd trth中的3d断开连接的对象)?通过这种方式,病变的大小对准确度指标的影响不大。MRI数据中断开连接的对象的评估指标
-1
A
回答
1
0
这里是我最终写的代码来完成这项任务。请让我知道是否有人看到任何错误。
def distance(p1, p2,dim):
if dim==2: return math.sqrt((p2[0] - p1[0])**2 + (p2[1] - p1[1])**2)
elif dim==3: return math.sqrt((p2[0] - p1[0])**2 + (p2[1] - p1[1])**2+ (p2[2] - p1[2])**2)
else: print 'error'
def closest(true_cntrd,pred_pts,dim):
dist_list=[]
for pred_pt in pred_pts:
dist_list.append(distance(true_cntrd, pred_pt,dim))
min_idx = np.argmin(dist_list)
return pred_pts[min_idx],min_idx
def eval_disconnected(y_true,y_pred,dim):
y_pred=y_pred>0.5
label_pred, numobj_pred = label(y_pred)
label_true, numobj_true = label(y_true)
true_labels,pred_labels=np.arange(numobj_true+1)[1:],np.arange(numobj_pred+1)[1:]
true_centroids=center_of_mass(y_true,label_true,true_labels)
pred_centroids=center_of_mass(y_pred,label_pred,pred_labels)
if len(pred_labels)==0:
TP,FN,FP=0,len(true_centroids),0
return TP,FN,FP
true_lbl_hit_list=[]
pred_lbl_hit_list=[]
for (cntr_true,lbl_t) in zip(true_centroids,np.arange(numobj_true+1)[1:]):
closest_pred_cntr,idx = closest(cntr_true,pred_centroids,dim)
closest_pred_cntr=tuple(int(coor) for coor in closest_pred_cntr)
if label_true[closest_pred_cntr]==lbl_t:
true_lbl_hit_list.append(lbl_t)
pred_lbl_hit_list.append(pred_labels[idx] )
pred_lbl_miss_list = [pred_lbl for pred_lbl in pred_labels if not(pred_lbl in pred_lbl_hit_list)]
true_lbl_miss_list = [true_lbl for true_lbl in true_labels if not(true_lbl in true_lbl_hit_list)]
TP=len(true_lbl_hit_list) # all the grd truth labels that were predicted
FN=len(true_lbl_miss_list) # all the grd trth labels that were missed
FP=len(pred_lbl_miss_list) # all of the predicted labels that didn't hit
return TP,FN,FP
相关问题
- 1. 更新断开连接的对象图
- 2. 模型OCL评估与对象评估
- 3. R包函数中的标准评估与非标准评估
- 4. 断开连接的数据集
- 5. 使用断开连接的数据
- 6. 断开与数据库的连接
- 7. VBA评估指标匹配
- 8. 评估VHDL中的指数函数
- 9. 评估/诊断时间连接在建立之前在SYN_RECV中
- 10. 评估在指令中传递的对象
- 11. 断开pycurl中的连接
- 12. Nhibernate - 在断开连接的会话中引用瞬态对象
- 13. 在没有对象的情况下评估(评估itemText.style)
- 14. 如何从连接池中删除断开的连接对象?使用c3p0
- 15. 在Keras中预测和评估指标
- 16. 评估对象为布尔
- 17. AngularJS评估递延对象
- 18. 什么数据结构用于对象的评估顺序?
- 19. 数据集如何断开连接?
- 20. OOP数据库连接/断开类
- 21. 如何在评估中检索评估者的数据?
- 22. 数组指针评估
- 23. 评估数据集中的数字
- 24. 开关评估
- 25. Keil MCB1700评估板的软件中断
- 26. php mysql断开连接是否真的断开连接?
- 27. 如何在ng-Class指令中评估范围对象?
- 28. 什么是Marketo的评估对象?
- 29. 评估字符串对象(JavaScript)的
- 30. jQuery的评估对象与VAL()