基本上我有一个表示基本事实的二进制图像,我有一个二进制图像,它取自算法的结果 - 现在的任务是找到重叠区域来评估算法的性能,即找到真阳性(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
的结果:
现在我只需找到一种方法将TP与TN分开,因为它们在ImageComparison
矩阵中都显示为0。
答案 0 :(得分:4)
你这样做的方法无法区分真阳性和真阴性,因为(0 - 0
和1 - 1
)都等于零。相反,如果您有两个二进制结果(ground_truth
和test_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);