Rectangle around the object, Bounding box,

37 ビュー (過去 30 日間)
Felix
Felix 2013 年 9 月 18 日
コメント済み: Image Analyst 2023 年 5 月 14 日
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 件のコメント
Kimo Kalip
Kimo Kalip 2018 年 7 月 2 日
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
Image Analyst 2018 年 7 月 2 日
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.

サインインしてコメントする。

採用された回答

Image Analyst
Image Analyst 2013 年 9 月 18 日
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 件のコメント
Torkan
Torkan 2019 年 10 月 16 日
Hi,
How can we define the length and width of these rectangles?
DANIEL SYAFIQ
DANIEL SYAFIQ 2023 年 1 月 4 日
THANK YOU SO MUCH IMAGE ANALYST.

サインインしてコメントする。

その他の回答 (5 件)

Tiago Almeida
Tiago Almeida 2017 年 10 月 11 日
編集済み: Image Analyst 2017 年 10 月 11 日
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 件のコメント
Image Analyst
Image Analyst 2018 年 5 月 4 日
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
Maham Khan
Maham Khan 2018 年 5 月 7 日
Thanks @Image Analyst

サインインしてコメントする。


Hafsa Asad
Hafsa Asad 2017 年 1 月 28 日
編集済み: Hafsa Asad 2017 年 1 月 28 日
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 件のコメント
Image Analyst
Image Analyst 2017 年 1 月 28 日
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 )
Hafsa Asad
Hafsa Asad 2018 年 9 月 21 日
Image Analyst, you are right. thanks.

サインインしてコメントする。


sidraa Aleem
sidraa Aleem 2018 年 4 月 4 日
@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.

Masar Uthaib
Masar Uthaib 2019 年 12 月 1 日
編集済み: Image Analyst 2022 年 4 月 3 日
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 件のコメント
Image Analyst
Image Analyst 2022 年 4 月 3 日
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
Muhammad Zulkifli 2023 年 5 月 14 日
How can i get bounding box ?
  1 件のコメント
Image Analyst
Image Analyst 2023 年 5 月 14 日
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)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeConvert Image Type についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by