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 comentarios

Guillaume
Guillaume el 3 de Jun. de 2015
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.
Image Analyst
Image Analyst el 3 de Jun. de 2015
Why do you want to do this? Give us some context.
Hg
Hg el 5 de Jun. de 2015
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);
Image Analyst
Image Analyst el 5 de Jun. de 2015
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.
Hg
Hg el 7 de Jun. de 2015
I'm cropping an image and one of the criteria is to reduce the size of a "long" blob by removing half of it.

Iniciar sesión para comentar.

 Respuesta aceptada

Image Analyst
Image Analyst el 8 de Jun. de 2015

0 votos

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 comentarios

Hg
Hg el 8 de Jun. de 2015
About the context, I just want to remove half of the length of the arm from the image.
Salaheddin Hosseinzadeh
Salaheddin Hosseinzadeh el 8 de Jun. de 2015
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.
Hg
Hg el 8 de Jun. de 2015
In my case, the other end of the arm is the hand, so I don't think I can erode them.
Image Analyst
Image Analyst el 8 de Jun. de 2015
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.
Hg
Hg el 9 de Jun. de 2015
@Image Analyst, thanks for the helpful trick! It's easier than finding the equation!
Salaheddin Hosseinzadeh
Salaheddin Hosseinzadeh el 9 de Jun. de 2015
Guys, what's PixelList? Is it the perimeter of the blob?
Image Analyst
Image Analyst el 9 de Jun. de 2015
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.

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Preguntada:

Hg
el 3 de Jun. de 2015

Comentada:

el 9 de Jun. de 2015

Community Treasure Hunt

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

Start Hunting!

Translated by