Drawing a boundary box around an image?

I want to draw a boundary box around an image. I tried the code below, but it is throwing me an error. Any suggestions would be appreciated.
m=imread('bb.png')
props = regionprops(m, 'BoundingBox');
bbx = rectangle('Position',props.BoundingBox,'EdgeColor','b','LineWidth',3);
I am getting the following error message.
Error using rectangle
Input arguments must be parameter-value pairs. Each parameter name must be followed by a corresponding value.

1 Comment

props is a structire....you cannot use that like you have used. What exactly you want to do?

Sign in to comment.

 Accepted Answer

My goal is to create a bounding box around the non-zero pixel value region of my image.
filename = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/1140570/box.png';
I = imread(filename);
BW = imbinarize(I);
hmask = any(BW,1);
vmask = any(BW,2);
firstrow = find(hmask, 1); lastrow = find(hmask, 1, 'last');
firstcol = find(vmask, 1); lastcol = find(vmask, 1, 'last');
imshow(I);
rectangle('Position', [firstrow, firstcol, lastrow-firstrow, lastcol-firstcol], 'EdgeColor', 'r');
What happened? Well... it turns out that your image has a white border around it. White borders are non-zero so the entire image needs to be enclosed in the border according to your stated requirements.
BW = any(I < 240, 3) & any(I > 10,3);
hmask = any(BW,1);
vmask = any(BW,2);
firstrow = find(hmask, 1); lastrow = find(hmask, 1, 'last');
firstcol = find(vmask, 1); lastcol = find(vmask, 1, 'last');
imshow(I);
rectangle('Position', [firstrow, firstcol, lastrow-firstrow, lastcol-firstcol], 'EdgeColor', 'r');

More Answers (2)

I = imread('https://in.mathworks.com/matlabcentral/answers/uploaded_files/1139790/bb.png');
props = regionprops(rgb2gray(I), 'BoundingBox');
imshow(I)
hold on
for i = 1:length(props)
rectangle('Position',props(i).BoundingBox,'EdgeColor','b','LineWidth',3);
end

4 Comments

Hi @KSSV,
I wanted to draw a bounding box around the non-black part part of the image.
I = imread('https://in.mathworks.com/matlabcentral/answers/uploaded_files/1139790/bb.png');
I = imcrop(I) ; % crop the image and select only black part
I1 = rgb2gray(I) ;
[y,x] = find(I) ;
% Bounding box
P = [min(x) min(y) ;
max(x) min(y) ;
max(x) max(y) ;
min(x) max(y) ;
min(x) min(y)] ;
imshow(I)
hold on
plot(P(:,1),P(:,2),'r')
Hi @KSSV,
Thank you for your response. I don't get any error message. However, after using imcrop, the size of my image reduces which may not be the ideal case. I am using images of the same size which I would multiply later. If the above image size decreases, then the later operations would give me an error message. My goal is to create a bounding box around the non-zero pixel value region of my image.I would perform some algorithm later on which I would like to restrict within the bounding box. I was wondering if it is possible to create a bounding box without reducing the size of the image.
Hi @KSSV,
I tried to implement your code above.
I = imread('https://in.mathworks.com/matlabcentral/answers/uploaded_files/1139790/bb.png');
props = regionprops(rgb2gray(I), 'BoundingBox');
imshow(I)
hold on
for i = 1:length(props)
rectangle('Position',props(i).BoundingBox,'EdgeColor','b','LineWidth',3);
end
The region inside the box is filled with Blue color. I just want the boundary to be Blue and the inside region remain visible to me. I would implement some algorithms later which would be limited inside the box.

Sign in to comment.

You can use imclearborder to get rid of the white frame, then use regionprops on the blue channel.
rgbImage = imread('box.png');
subplot(2, 1, 1);
imshow(rgbImage);
impixelinfo;
title('Original Image')
% Get blue box. Use imclear border to get rid of the white outside
% padding/frame.
mask = imclearborder(rgbImage(:, :, 3) > 0);
mask = bwareafilt(mask, 1);
subplot(2, 1, 2);
imshow(mask);
title('Mask Image')
% Get the bounding box amd dos[;au ot pver the original image in red.
props = regionprops(mask, 'BoundingBox');
subplot(2, 1, 1);
hold on;
rectangle('Position', props.BoundingBox, 'EdgeColor', 'r', 'LineWidth', 2)

Products

Release

R2021a

Community Treasure Hunt

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

Start Hunting!