label two objects that share part of the same boundary separately
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have a matrix like this:
m = [0,1,1,1,0;1,0,0,0,1;0,1,1,1,0;0,1,0,1,0;0,0,1,0,0];
And I want to label the interior separately, which results in a matrix like this:
m1 = [0,1,1,1,0;1,2,2,2,1;0,1,1,1,0;0,1,3,1,0;0,0,1,0,0];
But I'm not sure how to do that. Any suggestion will be appreciated! Thank you!
0 commentaires
Réponse acceptée
Steve Eddins
le 3 Août 2022
m = [0,1,1,1,0;1,0,0,0,1;0,1,1,1,0;0,1,0,1,0;0,0,1,0,0]
Fill the holes. From your example, it looks like the background connectivity should be 4.
filled_holes = imfill(m,4,'holes')
The pixels that were added are the holes.
hole_pixels = filled_holes & ~m
Label the hole pixels.
L = bwlabel(hole_pixels,4)
Add the labels (incremented by one) to the original matrix.
m_out = m;
m_out(hole_pixels) = L(hole_pixels) + 1
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Axis Labels dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!