Sta*_*Lam 2 algorithm matlab image-processing computer-vision
本质上,我有一个代表真实情况的二值图像,并且有一个取自算法结果的二值图像 - 现在的任务是找到重叠区域来评估算法的性能,即找到真正的阳性( TP)、真阴性(TN)、假阳性(FP)和假阴性(FN)。
我已经正确找到了 FP 和 FN 的值,但是我无法理解如何分离 TN 和 TP。
我计算重叠的方法是首先计算出地面真实图像和算法图像之间的差异:
% Gdilate=ground truth image, img=result of algorithm
ImageComparison = (Gdilate>0)-(img>0);
Run Code Online (Sandbox Code Playgroud)
然后,通过减法,我可以将所有 0、1 和 -1 的像素相加,以获得 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;
Run Code Online (Sandbox Code Playgroud)
imagesc()以下是变量的结果ImageComparison:

现在我只需要找到一种方法将 TP 与 TN 分开,因为它们在矩阵中都显示为 0 ImageComparison。
您这样做的方式无法区分真阳性和真阴性,因为 (0 - 0和1 - 1)都等于零。相反,如果您有两个二进制结果(ground_truth和test_data),则无需将两者相减,您可以仅使用逻辑比较来计算所需的所有内容。
ground_truth = Gdilate > 0;
test_data = img > 0;
Run Code Online (Sandbox Code Playgroud)
基本事实为阴性,但测试为阳性。
false_positives = ~ground_truth & test_data;
false_positive_rate = sum(false_positives(:)) / numel(false_positives);
Run Code Online (Sandbox Code Playgroud)
真实数据为阳性,但测试为阴性
false_negatives = ground_truth & ~test_data;
false_negative_rate = sum(false_negatives(:)) / numel(false_negatives);
Run Code Online (Sandbox Code Playgroud)
两者都积极
true_positives = ground_truth & test_data;
true_positive_rate = sum(true_positives(:)) / numel(true_positives);
Run Code Online (Sandbox Code Playgroud)
两者均为负数
true_negatives = ~ground_truth & ~test_data;
true_negative_rate = sum(true_negatives(:)) / numel(true_negatives);
Run Code Online (Sandbox Code Playgroud)