Combine the hole and its parent boundary extracted from bwboundaries

10 views (last 30 days)
I have a binary image and I used the bwboundaries to extracted several boundaries from the image.
However, bwboundaries not only gave me hole boundaries, but also their parents.
For example, the output from this code:
B = bwboundaries(mask, 'holes');
returns multiple cells and each cell correspond to a collection of boundary points for an object.
Cell 1 may be a parent object and Cell 2 may be a hole object reside within the parent object. What I want is to combine these two cells so that the output become a new object and is equivalent to the parent object substracted by the hole.
Right now, if I output the boundary and visualize using R, the result be like:
You can see the holes will be overlapped by their parent polygons.
Of course I can do it manually but I have hundreds of images to process and it is very time consuming to manually process them all.
Is there any computational way for batch processing? Thank you.

Accepted Answer

Uday Pradhan
Uday Pradhan on 24 May 2021
Edited: Uday Pradhan on 24 May 2021
Hello,
It is my understanding that you would like to remove the child-hole objects from the output of "bwboundaries". For this, you can utilise the below mentioned script which I adapted from the documentation page of this function (link):
[B,L,N,A] = bwboundaries(BW);
figure; imshow(BW); hold on;
% Loop through object boundaries
for k = 1:N
% Boundary k is the parent of a hole if the k-th column
% of the adjacency matrix A contains a non-zero element
if (nnz(A(:,k)) > 0)
% Loop through the children of boundary k and remove them
for l = find(A(:,k))'
B{l} = {};
end
end
end
Boundaries before removal of holes:
After removal of child-holes:
NOTE: Using bwboundaries with 'noholes' option also gives the same result as above. You might try that as well. I hope this helps!
  3 Comments
Uday Pradhan
Uday Pradhan on 24 May 2021
Hello, if I understand correctly, you can take the parent cell array and find its children through the same technique given in the code above and then combine the cell arrays. See: https://www.mathworks.com/help/matlab/matlab_prog/combine-cell-arrays.html

Sign in to comment.

More Answers (0)

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!