Я обработал входное изображение, и результат ниже. Мне просто нужны персонажи. Я пытался, но не могу убрать шум вокруг персонажей.
Удаление шума из символов на изображении
Ответы (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);
Теперь мы получаем это: