Удаление шума из символов на изображении

Я обработал входное изображение, и результат ниже. Мне просто нужны персонажи. Я пытался, но не могу убрать шум вокруг персонажей.

mu.jpg


person Eifa Tasnim    schedule 08.02.2017    source источник
comment
Я обработал входное изображение, а затем нашел его. Вы нашли свое изображение после его обработки? Его где-то спрятали? И как вам удалось его обработать, если вы не знали, где он находится?   -  person Sembei Norimaki    schedule 08.02.2017
comment
Я имел в виду, что после обработки входного изображения я нашел изображение mu.jpg. И я хочу удалить шум вокруг текста из изображения mu.jpg.   -  person Eifa Tasnim    schedule 08.02.2017
comment
Я бы предложил бинаризировать изображение, а затем применить морфологию для удаления изолированных пикселей и заполнения пробелов.   -  person Sembei Norimaki    schedule 08.02.2017


Ответы (1)


Простая эрозия с небольшим структурирующим элементом, таким как квадрат 3 x 3, может работать там, где вы устраните небольшой профиль белого шума и, таким образом, сделаете символы темнее. Вы также можете воспользоваться тем фактом, что черные области, не являющиеся символами, связаны с границами изображения. Вы можете удалить их с изображения, удалив области, связанные с границами.

Поэтому сначала выполните эрозию, используя imerode, затем вам нужно будет удалите границы, используя imclearborder, но для этого требуется, чтобы пиксели касались границы белые. Поэтому используйте инверсию вывода из imerode в функцию, а затем снова инвертируйте ее.

Что-то вроде этого будет работать, и я прочитаю ваше изображение напрямую из переполнения стека:

% Read the image and threshold in case
im = imread('https://i.stack.imgur.com/Hl6Y9.jpg');
im = im > 200;

% Erode
out = imerode(im, strel('square', 3));

% Remove the border and find inverse
out = ~imclearborder(~out);

Теперь мы получаем это изображение:

введите здесь описание изображения

Рядом с B есть несколько изолированных черных дыр, которые вам могут не понравиться. Вы можете выполнить дополнительную постобработку, используя bwareaopen для удаления островов. находящиеся ниже определенной области. Я выбрал это как 50 пикселей из эксперимента. Вам нужно будет сделать это на обратном выходе из imclearborder:

% Read the image and threshold in case
im = imread('https://i.stack.imgur.com/Hl6Y9.jpg');
im = im > 200;

% Erode
out = imerode(im, strel('square', 3));

% Remove the border
bor = imclearborder(~out);

% Remove small areas and inverse
out = ~bwareaopen(bor, 50);

Теперь мы получаем это:

введите здесь описание изображения

person rayryeng    schedule 08.02.2017