这可能是一种方法 -
img = im2bw(imread('http://i.imgur.com/Bl7zhcn.jpg'));
img = img(5:end-4,5:end-4);
im1 = bwmorph(img,'thin',Inf);
[x,y] = find(bwmorph(im1,'endpoints'));
for iter = 1:numel(x)-1
two_pts = [y(iter) x(iter) y(iter+1) x(iter+1)];
shapeInserter = vision.ShapeInserter('Shape', 'Lines', 'BorderColor', 'White');
rectangle = int32(two_pts);
im1 = step(shapeInserter, im1, rectangle);
end
figure,imshow(im1),title('Thinned endpoints connected image')
se = strel('diamond', 1);
im2 = imdilate(im1,se);
figure,imshow(im2),title('Dilated Thinned endpoints connected image')
im3 = bwconvhull(im2,'objects',4);
figure,imshow(im3),title('Convex blob corresponding to previous output')
im4 = bwboundaries(im3);
idx = im4{:};
im5 = false(size(im3));
im5(sub2ind(size(im5),idx(:,1),idx(:,2))) = 1;
img_out = img;
img_out(im5==1 & img==0)=1;
figure,imshow(img_out),title('Final output')
调试图片 -
![输入图像描述](https://istack.dev59.com/ftU05.webp)
![输入图像描述](https://istack.dev59.com/RaTqG.webp)
![输入图像描述](https://istack.dev59.com/iEoqB.webp)
![输入图像描述](https://istack.dev59.com/W8Y5x.webp)