faceDetector = vision.CascadeObjectDetector();
lframe=vida(curr-9).cdata;
bbox = step(faceDetector, lframe);
%some extra coding that reset lframe
lframelabel = regionprops(lframe,'BoundingBox');
boxes = cat(1, lframelabel.BoundingBox);
[m,~]=size(boxes);
for idx=1:m
if (bboxOverlapRatio(boxes(idx,:),bbox) > 0)
play(player);
end
end
I have visually verified that the 2 bounding boxes overlaps. Yet the test condition does not trigger therefore my player does not play. Can anyone help?

 Réponse acceptée

Image Analyst
Image Analyst le 3 Août 2015

1 vote

You're not passing in a bounding box. boxes(idx,:) is a bounding box for idx = 1, 5, 9, etc. (every 4) but not for 2,3,4,6,7,8, etc. Just look at what boxes is. It's [x1,y1,w1,h1,x2,y2,w2,h2,x3,y3,w3,h3,.....] So when idx = 3, say, boxes(idx,:) = w1. Since boxes is a 1-D array, the ,: does nothing - it's just looking at the idx value. You'd have to skip by 4 and take just 3 of them:
for idx = 1 : 4 : m
thisBoundingBox = boxes(idx:idx+3);
if (bboxOverlapRatio(thisBoundingBox, bbox) > 0)
or better yet , don't concatenate the boxes and loop over them at all , but just loop over the regions:
for r = 1 : length(lframelabel)
thisBoundingBox = lframelabel(r).BoundingBox;
if (bboxOverlapRatio(thisBoundingBox, bbox) > 0)

3 commentaires

Daniel N
Daniel N le 4 Août 2015
Thanks for the correction but the test condition is still not working. I have posted a new and more detailed question post.
I don't have that toolbox. I suggest you hard code in 1-by-4 arrays for the boxes and pass that in to bboxOverlapRatio() and see if it's working for known coordinates. For your current case put these lines in before that call:
thisBoundingBox
bbox
trueOrFalse = bboxOverlapRatio(thisBoundingBox, bbox)
figure
rectangle('Position', thisBoundingBox);
hold on;
rectangle('Position', bbox);
Then you can see, both in numbers in the command window, and in a new figure, whether they overlap or not. Don't put semicolons at the end of the lines to make sure they printout to the command window.
Daniel N
Daniel N le 4 Août 2015
Ahh... Found the problem. The bbox was same as the boundingbox that I cat it before - it has more than 1 row. Managed to solve the problem by removing the semi-colon and double checking the matrices only to realise that. Thanks.

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by