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

 Akzeptierte Antwort

David Young
David Young am 9 Sep. 2011

0 Stimmen

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 Kommentar

Nayef
Nayef am 10 Sep. 2011
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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 9 Sep. 2011

0 Stimmen

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 Kommentare

Nayef
Nayef am 10 Sep. 2011
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?
Sucheta
Sucheta am 27 Feb. 2012
Can you please specifically tell how to find out height and width of a particular connected component??
Image Analyst
Image Analyst am 27 Feb. 2012
Try the "BoundingBox" measurement given by regionprops().

Melden Sie sich an, um zu kommentieren.

Tags

Noch keine Tags eingegeben.

Community Treasure Hunt

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

Start Hunting!

Translated by