Как связать край изображения с отсутствующими пикселями в Matlab? - PullRequest
0 голосов
/ 19 декабря 2018

Допустим, у меня есть изображение

enter image description here

Для первого изображения край нижнего объекта не может соединиться с объектом над ним.Я хочу, чтобы это выглядело так:

enter image description here

, где красные точки являются примером того, как вновь вставленные пиксели могут соединить край нижнего объекта собъект над ним

Как я могу использовать Matlab, чтобы он мог соединить недостающие пиксели с разбитым краем?

1 Ответ

0 голосов
/ 20 декабря 2018

Одно из возможных решений - сначала применить морфологическую операцию закрытия, используя 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

...