Обнаружение пропусков в двоичном изображении с помощью MATLAB - PullRequest
4 голосов
/ 05 ноября 2011

У меня есть такое изображение:

image

В некоторых строках есть пробел. Как определить положение пробела на изображении?


Это результат. Кажется, закрытие создает новые пиксели.

after closing and subtracting

1 Ответ

6 голосов
/ 05 ноября 2011

Могу ли я предположить, что конечная цель близка к разрыву?Чем вы можете использовать морфологические операции.Чтобы закрыть пробел, вам просто нужно так называемое « закрытие ».Это делается путем применения « дилатация » и затем « эрозия ».

Итак, как найти позицию, где разрыв был закрыт?Вы можете просто сравнить изображение до и после и посмотреть на изменения.

РЕДАКТИРОВАТЬ: после вашего сообщения я решил обновить ответ.Итак, я попробовал небольшой фрагмент кода в Matlab.

originalBW = imread('Je3ud.jpg');
imshow(originalBW);

se = strel('line',8, 0); % a straight line of 8 pixels

closeBW = imclose(originalBW,se_disk);
figure, imshow(closeBW)

subtractedBW = closeBW - originalBW;

figure, imshow(subtractedBW)

он создает результирующее изображение:

enter image description here

Итак, в основном мы нашли правильную позицию,но, к сожалению, получил много ложных срабатываний.Я думаю, что вы можете получить желаемый результат, рассматривая каждого из них как кандидата в качестве кандидата и избавляясь от ложных срабатываний.Одна из важных частей ложных срабатываний, по-видимому, заключается в том, что если вы проверите их вертикальную окрестность (на исходном изображении), вы обнаружите, что есть белые пиксели, потому что белая линия на самом деле не была отсоединена там (и поэтому они не могут быть правильнымирешение).Таким образом, вы можете попытаться использовать это, чтобы отбросить ложные срабатывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...