Одно из возможных решений - сначала применить морфологическую операцию закрытия, используя imclose
, чтобы заполнить пробел.Так как это также заполнит углы и тому подобное, что вам может не понадобиться, вы можете затем использовать bwmorph
с опцией 'skel'
, чтобы уменьшить линии до скелета, а затем добавить это к исходному изображению:
% Load and binarize your sample image:
bw = imbinarize(rgb2gray(img));
% Adjust this based on the gap size you want to fill:
radius = 15;
% Pad the edges first to avoid edge effects:
bwPad = padarray(bw, [radius radius], 0, 'both');
% Apply the close and skeleton operations:
bwSkel = bwmorph(imclose(bwPad, strel('disk', radius)), 'skel', Inf);
% Remove the edge padding:
bwSkel = bwSkel((1+radius):(end-radius), (1+radius):(end-radius));
% Combine the original and skeleton images:
bw = bw | bwSkel;
Это дает вам следующее изображение:
Линия довольно тонкая, так что если вы хотеличто-то более толстое, вы можете сначала расширить скелет, прежде чем добавить его к оригиналу, используя imdilate
:
bw = bw | imdilate(bwSkel, strel('disk', 5));