假设我有一张图片
对于第一个图像,底部对象的边缘无法连接到其上方的对象。我希望它看起来像这样:
其中的红点是新插入的像素如何将底部对象的边缘连接到上方对象的示例
我如何使用Matlab,以便可以连接断边的缺失像素?
答案 0 :(得分:1)
一个可能的解决方案是首先使用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));