How to cluster a binary image?

I have the following image. Now I want to separate the black and white pixel from the image so that I can fit an ellipse to each black pixel area and find the length of the major axis of each ellipse. How can I separate black pixel from the white pixel and fit an ellipse?

 采纳的回答

Basically, here are the steps.
% Invert your image so the black things are white.
binaryImage = grayImage < 128;
% Call bwlabel
[labeledImage, numberOfRegions] = bwlabel(binaryImage);
% Call regionprops
props = regionprops(labeledImage, 'MajorAxisLength', 'Orientation');
It's all shown in Steve's blog:

5 个评论

Thank you Image Analyst.
@Image Analyst In the image you attached from @Steve Eddins, two white regions in the middle are merged under one ellipse, because there is a one pixel touching. Is there a way to merge them if there was 2 or 3 pixel between them? I want to be able to control some white regions to be merged based on the closest distance between them.
https://www.mathworks.com/help/images/ref/imclose.html
imclose() with a structuring element as large as the distance you want to merge.
I think, I found what I was looking for! It is almost-connected-compenent labeling Thank you Steve! https://blogs.mathworks.com/steve/2010/09/07/almost-connected-component-labeling/
Sometimes you can reduce this effect by using 4-connected labeling instead of the default 8-connected labeling.

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Image Processing Toolbox 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by