gpuguy
gpuguy

Reputation: 4585

Bounding box using MATLAB for the image

I am trying to draw a bounding box around the white blob in the image below:

enter image description here

I did like this:

bw = imread('box.jpg');
bw=im2bw(bw);
imshow(bw)
L = bwlabel(bw);
s = regionprops(L, 'Area', 'BoundingBox');
s(1);
area_values = [s.Area];
idx = find((100 <= area_values) & (area_values <= 1000)); % list of all the objects   

%whose area is between 100 and 1000

bw2 = ismember(L, idx); %construct a binary image containing all the objects whose 

%area is between 100 and 1000 by passing L and idx to ismember. 

imshow(bw2)

The output bw2, so far is: enter image description here

Can someone one tell me how to draw a bounding box around this blob(white)?

Update Wajih's answer actually accurately solved the issue.

Upvotes: 3

Views: 27989

Answers (4)

John
John

Reputation: 5913

As the 20,000th viewer of this question, I'll answer what I think the asker is actually asking.

To render a rectangle on the page, you just need to properly interpret the bounding box for the shape. You've already computed this in s(idx).BoundingBox

Thus, add these two lines to your script:

bb = s(idx).BoundingBox;
rectangle('Position',[bb(1) bb(2) bb(3) bb(4)],'EdgeColor','green');

and you'll get:

enter image description here

Upvotes: 3

TreeStar
TreeStar

Reputation: 36

I think you can try to use bwboundries

boundaries = bwboundaries(blob);

numberOfBoundaries = size(boundaries);

for k = 1 : numberOfBoundaries

    thisBoundary = boundaries{k};

    plot(thisBoundary(:,2), thisBoundary(:,1), 'g', 'LineWidth', 2);

end

Upvotes: 0

Dani bISHOP
Dani bISHOP

Reputation: 1289

Have you tried regionprops from Image Toolbox?

Upvotes: 2

user349026
user349026

Reputation:

Pseduo -

  • Pick largest y, largest x, smallest x, smallest y with in the blob. That is, points on the blob. These are your coordinates that you can use to build the bounding box.

assuming top left of image as (0,0)

(smallestX,smallestY)-----------------(largestX,smallestY)    
      |                                      |
      |                                      |          
      |                                      | 
      |                                      |
(smallestX,largestY)------------------(largestX,largestY)    

And for finding minimum/maximum values and indices.

[r,c]=find(img==min(min(img)))
[r,c]=find(img==max(max(img)))

r,c represent row and column in the img matrix.

  • I have marked the points on your image that you can use to create the bounding box.
  • Zoomed Image to get a better view. Makred Zoomed

Upvotes: 3

Related Questions