Reputation: 71
I checked the accuracy of a segmentation method using the 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. Samples of database images and
. I get 0s as output when trying to calculate the accuracy. What shall I do to get real results for my segmented algorithm?
The Code is below:
%% 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)
Upvotes: 2
Views: 145
Reputation: 35525
It's because of the detection ratio treshold
.
The third input to the function (default 0.5) specifies the minimum overlap between 2 boxes to consider them "matching". Your boxes are so different in size that the method assumes they are simply not matching, i.e. not looking at the same thing. You can change this value to vary the output.
For example:
[precision,recall] = bboxPrecisionRecall(bb1,groundTruthBoxes,0)
precision =
1
recall =
1
or
[precision,recall] = bboxPrecisionRecall(bb1,groundTruthBoxes,0.1)
precision =
0.6667
recall =
0.6667
Upvotes: 2