图像分割评价标准 代码 (Image segmentation evaluation metrics code)1

图像分割评价标准 代码 (Image segmentation evaluation metrics code)

分享图像分割中用到的多种评价标准的代码,方便使用。若有问题还望各位提醒指正。

强烈建议参考如下两篇文章

Performance measure characterization for evaluating neuroimage segmentation algorithms

Metrics for evaluating 3D medical imagesegmentation: analysis, selection, and tool

main function (输入图像SEG 和 GT 分别为算法分割结果图像、分割金标准图像。对于多类分割的图像,需要先取出SEG和GT中对应的各类,然后使用下述函数单独计算该类。):


 
 
  1. % test all segmentation metric functions
  2. SEG = imread( '0.png');
  3. GT = imread( '1.png');
  4. % binarize
  5. SEG = im2bw(SEG, 0.1);
  6. GT = im2bw(GT, 0.1);
  7. dr = Dice_Ratio(SEG, GT)
  8. hd = Hausdorff_Dist(SEG, GT)
  9. jaccard = Jaccard_Index(SEG, GT)
  10. apd = Avg_PerpenDist(SEG, GT)
  11. confm_index = ConformityCoefficient(SEG, GT)
  12. precision = Precision(SEG, GT)
  13. recall = Recall(SEG, GT)

Dice_Ratio:


 
 
  1. function dr = Dice_Ratio(SEG, GT)
  2. % SEG , GT are the binary segmentation and ground truth areas , respectively .
  3. % dice ratio
  4. dr = 2* double (sum(uint8(SEG(:) & GT (:) ))) / double (sum(uint8(SEG(:) )) + sum (uint8(GT(:) )));
  5. end

Hausdorff_Dist (得到hd 之后,还需要乘以像素的物理距离,才是真正的 Hausdorff 距离)(update: 对于三维体数据中该距离的计算,ITK方面给出的计算流程是:先将体数据匹配到同一物理空间,然后进行计算,这就要求两个体数据必须具备相同的物理参数。所以本代码不适用于三维体数据的计算。):


 
 
  1. function hd = Hausdorff_Dist(SEG, GT)
  2. % SEG , GT are the binary segmentation and ground truth areas , respectively .
  3. % erode element
  4. s = cat (3, [0 0 0 ; 0 1 0 ; 0 0 0], [0 1 0 ; 1 1 1 ; 0 1 0], [0 0 0 ; 0 1 0 ; 0 0 0]) ;
  5. % generate boundary
  6. Boundary_SEG = logical(SEG) & ~imerode(logical(SEG), s);
  7. Boundary_GT = logical(GT) & ~imerode(logical(GT), s);
  8. % distance to nearest boundary point
  9. Dist_SEG = bwdist(Boundary_SEG, 'euclidean');
  10. Dist_GT = bwdist(Boundary_GT, 'euclidean');
  11. % distance to another boundary
  12. min_S2G = sort(Dist_GT( Boundary_SEG(:) ), 'ascend');
  13. min_G2S = sort(Dist_SEG( Boundary_GT(:) ), 'ascend');
  14. % hausdorff distance
  15. hd = max(min_S2G( end), min_G2S( end));
  16. end

Jaccard_Index:


 
 
  1. function jaccard = Jaccard_Index(SEG, GT)
  2. % SEG , GT are the binary segmentation and ground truth areas , respectively .
  3. % jaccard index
  4. jaccard = double (sum(uint8(SEG(:) & GT (:) ))) / double (sum(uint8(SEG(:) | GT (:) )));
  5. end

Avg_PerpenDist (得到 apd 之后,还需要乘以像素的物理距离,才是真正的 apd 值):


 
 
  1. function apd = Avg_PerpenDist(SEG, GT)
  2. % SEG , GT are the binary segmentation and ground truth areas , respectively .
  3. % erode element
  4. s = cat (3, [0 0 0 ; 0 1 0 ; 0 0 0], [0 1 0 ; 1 1 1 ; 0 1 0], [0 0 0 ; 0 1 0 ; 0 0 0]) ;
  5. % generate boundary
  6. Boundary_SEG = logical(SEG) & ~imerode(logical(SEG), s);
  7. Boundary_GT = logical(GT) & ~imerode(logical(GT), s);
  8. % distance to nearest boundary point
  9. Dist_GT = bwdist(Boundary_GT, 'euclidean');
  10. % distance to another boundary
  11. min_S2G = Dist_GT( Boundary_SEG(:) );
  12. % average perpendicular distance from SEG to GT
  13. apd = sum(min_S2G(:)) / length(min_S2G(:));
  14. end

ConformityCoefficient:


 
 
  1. function confm_index = ConformityCoefficient(SEG, GT)
  2. % SEG , GT are the binary segmentation and ground truth areas , respectively .
  3. % dice ratio
  4. dr = 2* double (sum(uint8(SEG(:) & GT (:) ))) / double (sum(uint8(SEG(:) )) + sum (uint8(GT(:) )));
  5. % conformity coefficient
  6. confm_index = ( 3*dr - 2) / dr;
  7. end

Precision:


 
 
  1. function precision = Precision(SEG, GT)
  2. % SEG , GT are the binary segmentation and ground truth areas , respectively .
  3. % precision
  4. precision = double (sum(uint8(SEG(:) & GT (:) ))) / double (sum(uint8(SEG(:) )));
  5. end

Recall:


 
 
  1. function recall = Recall(SEG, GT)
  2. % SEG , GT are the binary segmentation and ground truth areas , respectively .
  3. % recall
  4. recall = double (sum(uint8(SEG(:) & GT (:) ))) / double (sum(uint8(GT(:) )));
  5. end

关于precision 和 recall 的wikipedia补图:




  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值