/ / Usuń szumy ze znaków w obrazie - obraz, matlab, przetwarzanie obrazu, redukcja szumów

Usuń szumy ze znaków w obrazie - obraz, matlab, przetwarzanie obrazu, redukcja szumów

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.

mu.jpg

Odpowiedzi:

4 dla odpowiedzi № 1

Prosta 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:

wprowadź opis obrazu tutaj

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:

wprowadź opis obrazu tutaj