为什么当我尝试计算图像分割结果的准确度时输出为 0?

Why I get 0s as output when I tried to calculate accuracy for image segmented result?

我使用 bboxPrecisionRecall function in Matlab version '9.4.0.857798 (R2018a) Update 2' and test result of an algorithm using IESK-ArDB dataset. The database is freely available here 检查了分割方法的准确性。数据库图像样本 。尝试计算准确度时,输出为 0。我应该怎么做才能获得分段算法的真实结果?

代码如下:

%% clean Workspace
clear;
clc;
%% my segmented bounding box cell
propied = {[48.5,84.5,102,59];[169.5,71.5,96,77];[251.5,114.5,47,51]}
%% Read Image
im = imread('t_A01_010.bmp');
imshow(im)
hold on
%% Ground truth standerd boxes.
%[GTruth,txt,raw] = xlsread('demo.xlsx');
groundTruthBoxes = [235 102 301 170;164 66 267 153 ;43 80 153 148]
%Convert bounding boxes from struct to cell.
boundingBoxes = propied;

% Convert cell to Matrix
bb = cell2mat(boundingBoxes(:));
% Move rows up down and fix matrix numbers
bb1 = fix(flipud(bb))
% Draw rectangle boxes for segmented Algorithm
for i=1:3
    rectangle('Position',bb1(i,:),'EdgeColor','y');
end
% Draw rectangle boxes for Standerd Ground Truth
for i=1:3
    rectangle('Position',groundTruthBoxes(i,:),'EdgeColor','g');
end    
%Evaluate the overlap accuracy against the ground truth data.
[precision,recall] = bboxPrecisionRecall(bb1,groundTruthBoxes)

因为检出率treshold

函数的第三个输入(默认值 0.5)指定要考虑的 2 个框之间的最小重叠 "matching"。您的盒子大小如此不同,以至于该方法假定它们根本不匹配,即看的不是同一件事。您可以更改此值以改变输出。

例如:

[precision,recall] = bboxPrecisionRecall(bb1,groundTruthBoxes,0)
precision =

     1


recall =

     1

[precision,recall] = bboxPrecisionRecall(bb1,groundTruthBoxes,0.1)
precision =

    0.6667


recall =

    0.6667