2017-02-08 3 views
2

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

mu.jpg

+0

«я обрабатывал свой входной файл, то я нашел, что это» Вы нашли ваш изображение после его обработки? Он где-то спрятан? И как вам удалось обработать его, если вы не знали, где это было? –

+0

Я имел в виду, что после обработки входного изображения я нашел изображение mu.jpg. И я хочу удалить шум, окружающий текст, из изображения mu.jpg. –

+0

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

ответ

3

Простая эрозия с небольшим структурным элементом, как 3 х 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); 

Мы получаем теперь этот образ:

enter image description here

Есть некоторые изолированные черные дыры рядом 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); 

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

enter image description here

+1

Спасибо большое! Это действительно хорошо! –