MATLAB: How to connect non-continuous boundary and fill the object in binary image

boundary objectimage processingImage Processing Toolbox

I have a binary image that contains the boundary of the object. The plots of boundary are not continuous, how can I connect those points? Moreover, how can I fill value in this object?
m.png

Best Answer

An vague attempt....it can be further refined or a more legant solution would be possible.
I = imread('m.png') ;
I1 = rgb2gray(I) ;
I1 = imcrop(I1) ;
[y,x] = find(I1) ;
imshow(I1) ;
hold on
% plot(x,y,'.r')
[nx,ny] = size(I1) ;
P1 = [x(x<=nx/2) y(x<=nx/2)] ;
P2 = [x(x>nx/2) y(x>nx/2)] ;
P = P1'; % coordinates / points

c = mean(P,2); % mean/ central point

d = P-c ; % vectors connecting the central point and the given points

th = atan2(d(2,:),d(1,:)); % angle above x axis

[th, idx] = sort(th); % sorting the angles

P = P(:,idx); % sorting the given points

P = [P P(:,1)]; % add the first at the end to close the polygon

plot( P(1,:), P(2,:), 'r');
P = P2'; % coordinates / points
c = mean(P,2); % mean/ central point
d = P-c ; % vectors connecting the central point and the given points
th = atan2(d(2,:),d(1,:)); % angle above x axis
[th, idx] = sort(th); % sorting the angles
P = P(:,idx); % sorting the given points
P = [P P(:,1)]; % add the first at the end to close the polygon
plot( P(1,:), P(2,:), 'b');