Удаление связи между двумя объектами в изображении - PullRequest
1 голос
/ 08 января 2020

Я пытался удалить связь между 2 и 0 на изображении ниже, используя эрозию, но все еще не могу это сделать. Есть ли другой возможный способ удалить эту связь между двумя числами?

The image in question

1 Ответ

3 голосов
/ 08 января 2020

Вы можете решить проблему, используя морфологические операции разрушают и расширяют .

Требуются некоторые предположения относительно соединения, которое вы хотите удалить.
Я сделал следующие предположения:

  • Область соединения - это самая большая непрерывная область на изображении.
  • Ширина подключенной области составляет около 11 пикселей.
  • Форма соединенной области высокая и тонкая.

Вот пример кода:

I = imread('202.png'); %Read image.
I = rgb2gray(I); %Convert from RGB to grayscale.
I = imbinarize(I); %Convert to binary image.   

%Erode using large kernel - only the largest area in I is kept white.
Mask = imerode(I, ones(11)); %Result is the only the connection between 2 and the 0

%Expand the mask in the vertical direction
Mask = imdilate(Mask, ones(25, 1));

%Erase the connection by placing zeros.
I(Mask) = 0;

figure;imshow(I)  

Код выше:

  • Создает маску, стирая все детали, сохраняя только соединение REJOIN.
  • Расширить маску по вертикали.
  • Удалить маскированные пиксели в исходном изображении.

Результат маски:
enter image description here

Окончательный результат:
enter image description here

...