Rectangle around the object, Bounding box,
    9 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
Hello, I used this code to make rectangle around the object at binary image:
st = regionprops(BW, 'BoundingBox' );
figure, imshow('MY_IMAGE.jpg')
 rectangle('Position',[st.BoundingBox(1),st.BoundingBox(2),st.BoundingBox(3),st.BoundingBox(4)],...
'EdgeColor','r','LineWidth',2 )
but if I have more than one object, this code doesn't working How can I draw N rectangles for N objects on image? Thank you
4 commentaires
  Kimo Kalip
 le 2 Juil 2018
				The image segmentation strategy included in that tutorial works great for well defined, solid images on a relatively consistent background. However, what do you do when you're trying to work with objects that aren't perfectly defined or shaped? Like what if you had something with various holes like a slinky or spring?
  Image Analyst
      
      
 le 2 Juil 2018
				Well that's where the art of designing an image analysis algorithm comes in. You're right - it's not so straightforward and easy. That's what keeps people like me employed.
Réponse acceptée
  Image Analyst
      
      
 le 18 Sep 2013
        Put it in a loop (untested)
for k = 1 : length(st)
  thisBB = st(k).BoundingBox;
  rectangle('Position', [thisBB(1),thisBB(2),thisBB(3),thisBB(4)],...
  'EdgeColor','r','LineWidth',2 )
end
9 commentaires
Plus de réponses (5)
  Tiago Almeida
 le 11 Oct 2017
        
      Modifié(e) : Image Analyst
      
      
 le 11 Oct 2017
  
      How can i draw the rectangles with the same size using this code?
labeledImage = bwlabel(A);
measurements = regionprops(labeledImage, 'BoundingBox', 'Area');
for k = 1 : length(measurements)
  thisBB = measurements(k).BoundingBox;
  rectangle('Position', [thisBB(1),thisBB(2),thisBB(3),thisBB(4)],...
  'EdgeColor','r','LineWidth',2 )
end
4 commentaires
  Image Analyst
      
      
 le 4 Mai 2018
				Try this:
allBB = zeros(length(measurements), 4);
for k = 1 : length(measurements)
    thisBB = measurements(k).BoundingBox;
    rectangle('Position',  [thisBB(1),thisBB(2),thisBB(3),thisBB(4)],...
    'EdgeColor', 'r', 'LineWidth', 2)
    allBB(k, :) = thisBB;
end
  Hafsa Asad
 le 28 Jan 2017
        
      Modifié(e) : Hafsa Asad
 le 28 Jan 2017
  
      Here is an even simpler way to do it if you have the binary image with white blobs
    st = regionprops(my_binary_image, 'BoundingBox', 'Area' );
    for ii= 1 : length(st)
        Areai(ii)= st(ii).Area;
    end
    largest_blob_id= find(Areai==max(Areai)); 
imshow(my_binary_image) 
rectangle('Position'[st(largest_blob_id).BoundingBox(1),st(largest_blob_id).BoundingBox(2),st(largest_blob_id).BoundingBox(3),st(largest_blob_id).BoundingBox(4)], 'EdgeColor','r','LineWidth',2 )
2 commentaires
  Image Analyst
      
      
 le 28 Jan 2017
				That would be good if he wanted to draw the box around only the largest blob instead of drawing "N rectangles for N objects". An even shorter way would be to get rid of the for loop like this:
st = regionprops(my_binary_image, 'BoundingBox', 'Area' );
[maxArea, indexOfMax] = max([st.Area]);
rectangle('Position'[st(indexOfMax).BoundingBox(1),st(indexOfMax).BoundingBox(2),st(indexOfMax).BoundingBox(3),st(indexOfMax).BoundingBox(4)], 'EdgeColor','r','LineWidth',2 )
  sidraa Aleem
 le 4 Avr 2018
        @Image Analyst I am trying to use the following code to do exactly what Felix wanted,but I am having error.
for k = 1 : length(st)
    thisBB = st(k).BoundingBox;
    rectangle('Position', [thisBB(1),thisBB(2),thisBB(3),thisBB(4)],...
    'EdgeColor','r','LineWidth',2 )
  end
Error using rectangle Value not a numeric scalar Please help me to resolve it.
0 commentaires
  Masar Uthaib
 le 1 Déc 2019
        
      Modifié(e) : Image Analyst
      
      
 le 3 Avr 2022
  
      Hello 
rectangle('Position',[st.BoundingBox(1),st.BoundingBox(2),st.BoundingBox(3),st.BoundingBox(4)],...
    'EdgeColor','r','LineWidth',2 )
does not operate with me.  Can anyone clarify to me what is wrong?
1 commentaire
  Image Analyst
      
      
 le 3 Avr 2022
				No one, except you, did that.  This should work if you have a single blob:
rectangle('Position', st.BoundingBox, 'EdgeColor','r','LineWidth',2 )
If you have multiple blobs, try this:
measurements = regionprops(mask, 'BoundingBox');
allBB = vertcat(props.BoundingBox);
hold on;
for k = 1 : length(measurements)
    thisBB = measurements(k).BoundingBox; % Or allBB(k, :)
    rectangle('Position',  thisBB, 'EdgeColor', 'r', 'LineWidth', 2);
end
hold off;
  Muhammad Zulkifli
 le 14 Mai 2023
        
How can i get bounding box ?
1 commentaire
  Image Analyst
      
      
 le 14 Mai 2023
				It has been explained about how to use regionprops to get the bounding box of blobs in your binary image.  In short:
props = regionprops(binaryImage, 'BoundingBox');
allBoundingBoxes = vertcat(props.BoundingBox)
Voir également
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

















