模型评价的方法指标有很多,如:PR-curve,MAE,ROC等等;
问题1:在显著性检测方面,假设现有三种方法(DSR,GMA,MCA)检测标准数据库中的部分图像(还有原图与真值图),分别得到三种结果,如何求三种方法与真值图之间的MAE(平均绝对误差),并绘制PR-curve曲线图呢?
image
mask
resultsDSR
resultsGMA
resultsMCA
文件夹内容如下图,链接:https://pan.baidu.com/s/1Wg_necXBCYsCk7pf2s7gog 或PR-curve绘制,密码:lka7
输出结果为:
具体实现——matlab代码如下:
clear all;clc;close all; addpath('Functions\');%加载文件夹Functions中的函数 %% 三种方法得到的结果路径,以及真值图路径 result1 = 'resultsDSR\'; result2 = 'resultsMCA\'; result3 = 'resultsGMR\'; mask = 'mask\'; %% 创建文件夹evaluation index,目的是保存PR曲线图 newFolder = 'evaluation index'; if ~exist(newFolder) mkdir(newFolder); end %% Evaluation index 1: evaluating MAE resultSuffixDSR = '_DSR.png'; resultSuffixMCA = '_MCA.png'; resultSuffixGMR = '_stage1.png'; gtSuffix = '.png'; maeDSR = CalMeanMAE(result1, resultSuffixDSR, mask, gtSuffix); maeMCA = CalMeanMAE(result2, resultSuffixMCA, mask, gtSuffix); maeGMR = CalMeanMAE(result3, resultSuffixGMR, mask, gtSuffix); %% Evaluation index 2: ploting PR curve [rec1, prec1] = DrawPRCurve(result1, resultSuffixDSR, mask, gtSuffix, true, true, 'r'); hold on [rec2, prec2] = DrawPRCurve(result2, resultSuffixMCA, mask, gtSuffix, true, true, 'g'); hold on [rec3, prec3] = DrawPRCurve(result3, resultSuffixGMR, mask, gtSuffix, true, true, 'b'); hold off; grid on; box on; xlabel('Recall'); ylabel('Precision'); % title(strcat('PR-curve',' ( ',sprintf(' MAE = %1.6f ',maeDSR),' )')); title('PR-curve'); lg = legend({'DSR method','CA method','GMR method'}); set(lg, 'location', 'southwest'); k=1.2; set(gcf,'units',get(gcf,'paperunits')); set(gcf,'paperposition',get(gcf,'position')*k); saveas(gcf,strcat(newFolder,'\PR-curve','.bmp'));
二、问题2:医学图像分割领域中的模型评价指标总结
强烈建议参照以下两篇文章:
《Performance measure characterization for evaluating neuroimage segmentation algorithms》
《Metrics for evaluating 3D medical imagesegmentation: analysis, selection, and tool》
1、医学图像比赛(ISBI2017或者MICCAI2007)中常用到的几个度量指标:DICE,VOE,RVD,ASD,MSD等等;如何编程实现?(matlab代码与python代码)
符号定义:
: 代表 ground truth的分割结果
:代表预测的分割结果
(1)DICE(值域为[0,1]): 使用频率最高。数学定义如下,具体表示两个物体相交的面积占总面积的比值,完美分割该值为1。
(2)VOE(volumetric overlap error): 与DICE类似,数学定义如下,它将and操作换成了减法操作,以此来代表错误率。
(3)RVD(relative volume difference):表示两者体积之间的差异,数学定义如下。
(4)ASD(average symmetric surface distance): 先定义 代表的是预测的中的边界的像素,同样地可以得到的定义。然后对的定义,同理可得的定义。那么ASD的数学定义为:
(5)MSD(maximum symmetric surface distance):与ASD定义比较类似,只不过把计算平均的操作替换成了计算最大值的操作。其数学定义为:
参照博客:图像分割评价标准。具体代码见链接:https://pan.baidu.com/s/1nULVFwTktRJ0gnSJDmavGA,密码是:hgx2
matlab 具体的代码实现如下:
主函数demo:
% test all segmentation metric functions SEG = imread('0009.png'); GT = imread('0009_CHS.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函数文件:
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(:)))); end
2、分割精度、过分割率、欠分割率的定义
(1)分割精度:分割准确的面积占GT图像中真实面积的百分比,数学定义如下:
其中表示专家手工勾画出的分割图像的参考面积,表示算法分割得到的图像的真实面积,表示错误分割的像素点个数。
(2)过分割率:即分割在GT图像参考面积之外的像素点的比率,数学定义如下:
其中表示本不应该包含在分割结果中的像素点个数,实际却在分割结果中的像素点个数。换句话讲,中的像素点出现在实际分割图像中,但不出现在理论分割图像中。
(3)欠分割率:即分割在GT图像参考面积之中欠缺的像素点的比率,数学定义如下:
其中表示本应该包含在分割结果中的像素点个数,实际却不在分割结果中的像素点个数。换句话讲,中的像素点出现在理论分割图像中,但不出现在实际分割图像中。
3、灵敏度与特异度的定义
假设实验图像为I,真实分割结果为G,实际分割结果为R。
(1)灵敏度:将实际是感兴趣区域的像素点正确地判断为感兴趣区域像素的比例,其衡量的是分割实验中能分割感兴趣区域的能力,其数学定义如下。
(1)特异度:将实际不是感兴趣区域的像素点正确地判断为不是感兴趣区域像素的比例,其衡量的是分割实验中能正确判断不是感兴趣区域像素点的能力,其数学定义如下。
matlab灵敏度函数:
function sen = getSensitivity(SEG, GT) % SEG, GT are the binary segmentation and ground truth areas, respectively. % sensitivity sen = double(sum(uint8(SEG(:) & GT(:)))) / double(sum(uint8(SEG(:)))); end
参考网址:
1、如何在CSDN博客插入公式:https://blog.csdn.net/johnnyfdu/article/details/10857743
2、图像分割结果评价:https://blog.csdn.net/zhuason/article/details/52989091
3、图像分割评价标准代码:https://blog.csdn.net/yangyangyang20092010/article/details/51637073