图像分割(四)图像分割评价标准及代码 |
您所在的位置:网站首页 › risc医学 › 图像分割(四)图像分割评价标准及代码 |
强烈建议参考如下两篇文章 Performance measure characterization for evaluating neuroimage segmentation algorithms Metrics for evaluating 3D medical imagesegmentation: analysis, selection, and tool main function (输入图像SEG 和 GT 分别为算法分割结果图像、分割金标准图像。对于多类分割的图像,需要先取出SEG和GT中对应的各类,然后使用下述函数单独计算该类。): % test all segmentation metric functions SEG = imread('0.png'); GT = imread('1.png'); % binarize SEG = im2bw(SEG, 0.1); GT = im2bw(GT, 0.1); dr = Dice_Ratio(SEG, GT) hd = Hausdorff_Dist(SEG, GT) jaccard = Jaccard_Index(SEG, GT) apd = Avg_PerpenDist(SEG, GT) confm_index = ConformityCoefficient(SEG, GT) precision = Precision(SEG, GT) recall = Recall(SEG, GT) Dice_Ratio: function dr = Dice_Ratio(SEG, GT) % SEG, GT are the binary segmentation and ground truth areas, respectively. % dice ratio dr = 2*double(sum(uint8(SEG(:) & GT(:)))) / double(sum(uint8(SEG(:))) + sum(uint8(GT(:)))); endHausdorff_Dist (得到hd 之后,还需要乘以像素的物理距离,才是真正的 Hausdorff 距离)(update: 对于三维体数据中该距离的计算,ITK方面给出的计算流程是:先将体数据匹配到同一物理空间,然后进行计算,这就要求两个体数据必须具备相同的物理参数。所以本代码不适用于三维体数据的计算。): function hd = Hausdorff_Dist(SEG, GT) % SEG, GT are the binary segmentation and ground truth areas, respectively. % erode element 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]); % generate boundary Boundary_SEG = logical(SEG) & ~imerode(logical(SEG), s); Boundary_GT = logical(GT) & ~imerode(logical(GT), s); % distance to nearest boundary point Dist_SEG = bwdist(Boundary_SEG, 'euclidean'); Dist_GT = bwdist(Boundary_GT, 'euclidean'); % distance to another boundary min_S2G = sort(Dist_GT( Boundary_SEG(:) ), 'ascend'); min_G2S = sort(Dist_SEG( Boundary_GT(:) ), 'ascend'); % hausdorff distance hd = max(min_S2G(end), min_G2S(end)); end Jaccard_Index: function jaccard = Jaccard_Index(SEG, GT) % SEG, GT are the binary segmentation and ground truth areas, respectively. % jaccard index jaccard = double(sum(uint8(SEG(:) & GT(:)))) / double(sum(uint8(SEG(:) | GT(:)))); end Avg_PerpenDist (得到 apd 之后,还需要乘以像素的物理距离,才是真正的 apd 值): function apd = Avg_PerpenDist(SEG, GT) % SEG, GT are the binary segmentation and ground truth areas, respectively. % erode element 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]); % generate boundary Boundary_SEG = logical(SEG) & ~imerode(logical(SEG), s); Boundary_GT = logical(GT) & ~imerode(logical(GT), s); % distance to nearest boundary point Dist_GT = bwdist(Boundary_GT, 'euclidean'); % distance to another boundary min_S2G = Dist_GT( Boundary_SEG(:) ); % average perpendicular distance from SEG to GT apd = sum(min_S2G(:)) / length(min_S2G(:)); end ConformityCoefficient: function confm_index = ConformityCoefficient(SEG, GT) % SEG, GT are the binary segmentation and ground truth areas, respectively. % dice ratio dr = 2*double(sum(uint8(SEG(:) & GT(:)))) / double(sum(uint8(SEG(:))) + sum(uint8(GT(:)))); % conformity coefficient confm_index = (3*dr - 2) / dr; end Precision: function precision = Precision(SEG, GT) % SEG, GT are the binary segmentation and ground truth areas, respectively. % precision precision = double(sum(uint8(SEG(:) & GT(:)))) / double(sum(uint8(SEG(:)))); end Recall: function recall = Recall(SEG, GT) % SEG, GT are the binary segmentation and ground truth areas, respectively. % recall recall = double(sum(uint8(SEG(:) & GT(:)))) / double(sum(uint8(GT(:)))); end关于precision 和 recall 的wikipedia补图: |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |