Przetworzyłem obraz wejściowy, a wynik jest poniżej. Potrzebuję tylko bohaterów. Próbowałem, ale nie mogę usunąć hałasu otaczającego postacie.
Odpowiedzi:
4 dla odpowiedzi № 1Prosta erozja z małą strukturąelement, podobnie jak kwadrat 3 x 3, może działać tam, gdzie wyeliminowałbyś mały, biały profil szumu, a tym samym uczyniłby postacie ciemniejszym. Możesz także skorzystać z faktu, że czarne obszary, które nie są znakami, są połączone z granicami obrazu. Możesz usunąć je z obrazu, usuwając obszary połączone z granicami.
Dlatego najpierw wykonaj erozję imerode
, musisz usunąć granice za pomocą imclearborder
ale wymaga to, aby piksele dotykające granicy były białe. Dlatego użyj odwrotności wyjścia z imerode
do funkcji, a następnie odwróć ją ponownie.
Coś takiego będzie działało i będę czytać twój obraz bezpośrednio z Stack Overflow:
% Read the image and threshold in case
im = imread("image/remove-noise-from-characters-in-an-image.jpg");
im = im > 200;
% Erode
out = imerode(im, strel("square", 3));
% Remove the border and find inverse
out = ~imclearborder(~out);
Otrzymujemy ten obraz teraz:
Jest kilka izolowanych czarnych dziur w pobliżu B, których możesz nie chcieć. Możesz wykonać dodatkowe przetwarzanie końcowe za pomocą bwareaopen
aby usunąć wyspy, które znajdują się poniżej określonego obszaru. Wybrałem to jako 50 pikseli z eksperymentów. Będziesz musiał to zrobić na odwrotności wyjścia z imclearborder
:
% Read the image and threshold in case
im = imread("image/remove-noise-from-characters-in-an-image.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);
Otrzymujemy teraz: