首页 > 解决方案 > 当我尝试计算图像分割结果的准确性时,为什么输出为 0?

问题描述

bboxPrecisionRecall我使用Matlab 版本 '9.4.0.857798 (R2018a) Update 2' 中的函数和使用IESK-ArDB数据集的算法测试结果检查了分割方法的准确性。该数据库可在此处免费获得。数据库图像这里这里. 尝试计算准确性时,我得到 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)

分割图像 命令窗口上的结果

标签: matlabimage-processingocrimage-segmentation

解决方案


这是因为检测率treshold

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

例如:

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

     1


recall =

     1

或者

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

    0.6667


recall =

    0.6667

推荐阅读