user3315340
user3315340

Reputation: 155

Fill in a region of a binary image which is not completely closed

In MatLab, I have a binary image and I am trying to fill a hole. The problem is that the area is mostly (but not entirely) closed. Is there any existing visual processing functions that can do this? Do I have to write my own algorithm?

Original / Desired

enter image description here enter image description here

Another separate problem is that I am having trouble detecting thin tail-like structures in a binary image. I need to remove these type of structures without removing the larger body it is attached to. Is there any existing visual processing functions that can do this? Do I have to write my own algorithm?

Original / Desired

Original Image Desired Image

Upvotes: 3

Views: 2767

Answers (1)

Suever
Suever

Reputation: 65430

In the first example, you can use imclose to perform a dilation followed by an erosion to close those edges. Then you can follow up with imfill to completely fill it in.

img = imread('https://i.sstatic.net/Pt3nl.png');
img = img(:,:,1) > 0;

% You can play with the structured element (2nd input) size
closed = imclose(img, strel('disk', 13));
filled = imfill(closed, 'holes');

enter image description here Similarly, with your second set of images, you can use imopen (erosion followed by dilation) to remove the tail.

img = imread('https://i.sstatic.net/yj32n.png');
img = img(:,:,1);

% You can play with the structured element (2nd input) size
% Increase this number if you want to remove the legs and more of the tail
opened = imopen(img, strel('disk', 7));

enter image description here

Update

If you want the centroid of the central opening of the "closed" image above, you can get a mask which is just this opening by subtracting closed from filled.

% Find pixels that were in the filled region but not the closed region
hole = filled - closed;

% Then compute the centroid of this
[r,c] = find(hole);
centroid = [mean(r), mean(c)];

enter image description here

Upvotes: 5

Related Questions