从本质上讲,我有一个二值图像,它代表了基本事实,我有一个二值图像,它取自一个算法的结果-现在的任务是找到重叠区域来评估算法的性能,即找到真阳性(tps)、真阴性(tns)、假阳性(fps)和假阴性(fns)。
我已经正确地找到了fps和fns的值,但是我无法理解如何将tns和tps分开。
我计算重叠的方法是首先计算出地面真实图像和算法图像之间的差异:

% Gdilate=ground truth image, img=result of algorithm
ImageComparison = (Gdilate>0)-(img>0);

然后简单地由于减法,我可以把0,1和-1的所有像素相加,得到tp_tns,fns和fps。
TP_TN = sum(sum(ImageComparison==0))/rows/columns;
FN = sum(sum(ImageComparison==-1))/rows/columns;
FP = sum(sum(ImageComparison==1))/rows/columns;

以下是imagesc()变量ImageComparison的结果:
现在我只需要找到一种方法来分离tps和tns,因为它们在ImageComparison矩阵中都显示为0。

最佳答案

你做这件事的方式不能区分真阳性和真阴性,因为(0 - 01 - 1)都等于零相反,如果有两个二进制结果(ground_truthtest_data),则不需要减去这两个结果,只需使用逻辑比较就可以计算出所需的所有结果。

ground_truth = Gdilate > 0;
test_data = img > 0;

误报
基本事实是否定的,但测试是肯定的。
false_positives = ~ground_truth & test_data;
false_positive_rate = sum(false_positives(:)) / numel(false_positives);

漏报
基本真实数据为正,但测试结果为负
false_negatives = ground_truth & ~test_data;
false_negative_rate = sum(false_negatives(:)) / numel(false_negatives);

真正的积极因素
两者都是积极的
true_positives = ground_truth & test_data;
true_positive_rate = sum(true_positives(:)) / numel(true_positives);

真正的否定
两者都是阴性的
true_negatives = ~ground_truth & ~test_data;
true_negative_rate = sum(true_negatives(:)) / numel(true_negatives);

关于algorithm - 如何区分真实肯定和否定?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36697809/

10-12 17:26