Divide any blob into half

I would like to find the equation of a line that passes through the centroid of a blob so that I can divide the blob into half. How can I achieve this after I get the centroid from regionprops() ?

5 Comments

Apart maybe for your ellipsoid, there's an infinity of line dividing the blobs into halves of equal area. Any line going through the centroid will do.
Why do you want to do this? Give us some context.
I want to divide the blob into half w.r.t its major axis. I found a way but not sure whether there's a better way to do this.
% Find the centroid of the blob and the direction of the major axis of its corresponding ellipse
s = regionprops(blob, 'centroid', 'orientation');
% Find the gradient of the line perpendicular to the major axis
m = tan( pi * (s(1,1).Orientation + 90 )/180 );
y = - m *( x - s(1,1).Centroid(1) ) + s(1,1).Centroid(2);
Like I asked before (and you didn't answer)...Why do you want to do this? Give us some context. Like Guillaume said, you could pick any angle.
I'm cropping an image and one of the criteria is to reduce the size of a "long" blob by removing half of it.

Sign in to comment.

 Accepted Answer

Image Analyst
Image Analyst on 8 Jun 2015
Hg says the real need is for "cropping an image and one of the criteria is to reduce the size of a "long" blob by removing half of it." You can do that with imerode. But I asked for the context and you still haven't provided that. Why would you want to reduce the size of your segmented blobs by half? What is the point in doing that?

7 Comments

About the context, I just want to remove half of the length of the arm from the image.
You don't even need to find the centroid for this purpose. Like Image analyst said, erode them until you get to half of the current area. Which makes it easy.
In my case, the other end of the arm is the hand, so I don't think I can erode them.
I know it sounds dumb, but one way to do it is to ask regionprops for the centroid and PixelList. Then, for each blob, run through the PixelList coordinates with a for loop, and if the x coordinate is more than the x coordinate of the centroid, set that pixel of the binary image to false. This will erase the right half of every blob. This will meet all your criteria that you have given to us so far.
@Image Analyst, thanks for the helpful trick! It's easier than finding the equation!
Guys, what's PixelList? Is it the perimeter of the blob?
PixelList is a list of the (x,y) coordinates of all the pixels in each blob. Perimeter is a separate measurement that you can ask for.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!