Controlling detected objects inside an image

Hi, I have a binary image that includes a black background and two white objects; a triangle and a circle.
I tried to control those objects separately by using their label number but I have know clue how to do that! I know how to allocate object and even count those objects but failed to get control over them.
I'm trying for example to save an object in an array and displays it. Another example is to find the no of pixels(size) of that object. One more example is to change the color of the object to black (make it back ground).
I don't want to use loop functions in the whole image instead I want to use/access the object itself as a separate matrix or as an object.
Is that possible in matlab? Is there any direct command that can do that or I have to do some script coding? How to control an object as a separated matrix? Is there an alternative solution?
Best Regards

 Accepted Answer

Do you mean something like this:
% Test array containing a square and a triangel
image0 = zeros(10, 10);
image0(2:4, 2:4) = 1;
image0(7, 7) = 1;
image0(8, 6:8) = 1;
disp(image0);
% label the image
labelled = bwlabel(image0);
% for recent versions you can use
% labelled = labelmatrix(bwconncomp(image0));
% separate the objects into individual arrays
image1 = labelled == 1; % has square only
image2 = labelled == 2; % has triangle only
disp(image1);
disp(image2);
Once you have the objects in separated arrays, you can do whatever you need with them.
If all you need is to find the number of pixels, or other simple statistics, you can use regionprops without generating the separate arrays.

1 Comment

Thank you for the reply. That is really close to what I want. However, the object is stored in a matrix that is the same size as the image! What I want is only a matrix with a size of the object.

Sign in to comment.

More Answers (1)

The functions provided by the Image Processing Toolbox are not object-oriented.
regionprops() applied to a labeled image returns statistics (including number of pixels). You can use the Bounding Box information to extract the height and width of the containing rectangle for the object: once you have that, you can easily copy out that sub-rectangle in to a receiving rectangle of the same size. If there might be other objects overlapping the bounding box, you can nullify them with something like
IsolatedObject(IsolatedObject ~= ThisLabel) = 0;
You can erase an object out of the original matrix by
IMG(IMG == ThisLabel) = 0;
If you recorded the regionprops PixelIdxList and PixelValue before-hand, you can restore the object by setting
IMG(recordedPixelIdxList) = recordedPixelValue;

3 Comments

Thank you very much for the reply. Your hint is good. I noticed also that using regionprops()with property 'centroid' can find the centre of the object which I was planned to have in further steps. I tested the function and it exactly located the centre of the object. Now, can I locate the centre of object using another function like for example; using bwmorph function and its properties?
Can you please specifically tell how to find out height and width of a particular connected component??
Try the "BoundingBox" measurement given by regionprops().

Sign in to comment.

Tags

No tags entered yet.

Community Treasure Hunt

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

Start Hunting!