如何在Matlab中将图像边缘与缺少像素的像素连接起来?

时间:2018-12-19 20:22:18

标签: matlab image-processing edge-detection

假设我有一张图片

enter image description here

对于第一个图像,底部对象的边缘无法连接到其上方的对象。我希望它看起来像这样:

enter image description here

其中的红点是新插入的像素如何将底部对象的边缘连接到上方对象的示例

我如何使用Matlab,以便可以连接断边的缺失像素?

1 个答案:

答案 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;

这将为您提供以下图像:

enter image description here


这条线很细,所以如果您想要更粗的东西,可以先扩张骨架,然后再使用imdilate将其添加到原始骨架中:

bw = bw | imdilate(bwSkel, strel('disk', 5));

enter image description here