There are many methods, such as IOU
It is useful for detecting objecting, but is not quite suitable for my case.
Because I just want to know the overlap lenght, so I change the caculation function.
see.
%% test the accuracy of the detection
function [overlapRatio]= CalBoundingboxAcuuracy(Mbbox,bboxes)
%Mbbox--ground truth bounding box
%bboxes--detected bounding box
%method compare the detected width /width of the groundtruth
%wd--detected groundtruth in ground truth dataset
%wt-ground truth total width
%% designed by Jun Zhang May 10, 2019 in CU ICAR
if ~isempty(Mbbox)
wt=sum(Mbbox(:,3));
wd=0;
if ~isempty(bboxes)
for i=1:size(Mbbox,1)
%ground truth dataset
% Mbbox(i,:);
for j=1:size(bboxes) %the bouding box must be merged
%detected bbox
%rectint(Mbbox(4,:),bboxes(j,:)); %get the area of overlap area
%% method 1
% overlapRatio = bboxOverlapRatio(Mbbox(i,:),bboxes(j,:),'Min');
% wd=overlapRatio*Mbbox(i,3)+wd;
% if only use the overlapRatio, the result is the overlap
% ratio,we can't caculate how much the ground truth is included
%% method 2
% so we use rectint to get the overlap area
% wd=wd+rectint(Mbbox(i,:),bboxes(j,:))/Mbbox(i,4);
% there is still problem, because the result of rectint is their
% overlap area,so the we can't the the overlength correctly,
% because the boxes are not always the same.
%% we just caculate the overlap length
% we judge whether they are overlaped together, then caculate
% the length
if bboxOverlapRatio(Mbbox(i,:),bboxes(j,:),'Min')>0
wd=wd+min(Mbbox(i,1)+Mbbox(i,3),bboxes(j,1)+bboxes(j,3))-max(Mbbox(i,1),bboxes(j,1));
end
end
end
end
overlapRatio= wd/wt;% include no detection ,zero
else
overlapRatio=1;
end