如何区分真阳性和真阴性?

时间:2016-04-18 15:06:30

标签: algorithm matlab image-processing computer-vision

基本上我有一个表示基本事实的二进制图像,我有一个二进制图像,它取自算法的结果 - 现在的任务是找到重叠区域来评估算法的性能,即找到真阳性(TPs),真阴性(TNs),假阳性(FPs)和假阴性(FNs)。

我已经正确地找到了FP和FN的值,但是我无法理解如何将TN和TP分开。

我计算重叠的方法是首先计算地面实况图像和算法图像之间的差异:

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

然后,由于减法,我可以将0s,1s和-1s的所有像素相加,以获得TP_TN,FN和FP。

TP_TN = sum(sum(ImageComparison==0))/rows/columns;
FN = sum(sum(ImageComparison==-1))/rows/columns;
FP = sum(sum(ImageComparison==1))/rows/columns;

以下是imagesc()变量ImageComparison的结果:

results of imagesc

现在我只需找到一种方法将TP与TN分开,因为它们在ImageComparison矩阵中都显示为0。

1 个答案:

答案 0 :(得分:4)

你这样做的方法无法区分真阳性和真阴性,因为(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);