Usuwanie pikseli z obrazka

0

7 minut temu
ryszard
Dzień dobry! Proszę o pomoc. Napisałem sobie programik który usuwa mi z zeskanowanych obrazków "śmieci" w postaci pojedynczych pikseli i pikseli które stykają się jednym bokiem z innymi. Chciałbym znaleźć i usunąć plamki wielo-pikselowe. Chodzi mi o algorytm wyszukiwania. Zaczyna od 3 pikseli, wyszukuje, usuwa. Jeśli nie znajdzie 3, szuka większej ilości itd. Nie wiem jak się do tego zabrać.
pozdrawiam

0

Dziękuję za tyle i proszę o więcej. Nie mam prawie żadnego doświadczenia w programowaniu a liczba w moim loginie to mój rok urodzenia.

0

To może poszukaj gotowych aplikacji zamiast samemu to kodować?

https://www.pcworld.pl/news/Odplamkuj-sie-ode-mnie-GIMP-2-0,89138.html

0

Niestety nie da się. Skanuję dokumentację techniczną szerokość 10 15 20 a nawet 30 kilo pikseli wysokość 5 10 15 kilo pikseli. Często dokumentacja ma inną jasność w różnych miejscach. Program dołączony do skanera nie daję rady jest tylko jedna wartość w progowania. Zmuszony jestem do napisania programu po przetworzeniu aby rysunki jakoś wyglądały. Każdy rysunek inny więc muszę ustawić kilka wartości przetwarzania. Bardziej czytelny rysunek więcej śmieci. Muszę je jakoś usunąć. skanów mam dziennie kilka kilkanaście kilkadziesiąt. I właśnie potrzebuję programu algorytmu który będzie usuwał te śmieci. Szybkość nie jest szczególnie ważna. Mogę skanować następny będzie poprawiał poprzedni. Piszę sobie to wszystko BlitzMax NG. Jestem prawie u mety. Kończę kodować algorytm progowania No i zostanie mi właśnie to usuwanie śmieci. Na razie usuwam pojedyncze piksele i piksele które jednym bokiem przylegają do rysunku. Co dalej na razie nie mam pomysłu ale myślę że coś znajdę.

1
Ryszard1960 napisał(a):

te śmieci. Szybkość nie jest szczególnie ważna. Mogę skanować następny będzie poprawiał poprzedni. Piszę sobie to wszystko BlitzMax NG. Jestem prawie u mety. Kończę kodować algorytm progowania No i zostanie mi właśnie to usuwanie śmieci.

Co to w ogóle jest BlitzMax NG? I dlaczego w tym piszesz?

Proponowałbym jakieś bardziej standardowe narzędzie do przetwarzania obrazów, typu Python + OpenCV lub SciPy, albo Octave. W każdym z nich to czego potrzebujesz powinieneś być w stanie napisać w kilku linijkach, nawet bez kodowania algorytmów, bo funkcje do filtrowania obrazu są dane.
Sprawdź np.:
https://scipy-lectures.org/advanced/image_processing/index.html#mathematical-morphology

poniżej jak to zrobić z opencv
https://stackoverflow.com/questions/49318622/denoising-binary-image-in-python

0

Próbowałem używać programu ImageJ. Nie potrafił poradzić sobie z niektórymi rysunkami. Myślałem o open CV. Kupiłem nawet ebooka na ten temat poczytałem o opcjach który by mnie interesowały wydawało mi się że biblioteka nie ogarnia moich rysunków. Tym bardziej że musiałbym się od podstaw tego uczyć. Kodując w Blitz Basic Max NG którego już trochę znam wydaje mi się że będę miał większe panowanie nad kodem program zrobi to co ja chcę. Nie mam za dużo czasu na zabawę spieszy mi się trochę z tym. I tak na razie nic nie kumam na temat erozji o której kolega kilka postów wcześniej napisał. Jestem absolutnie początkującym programistą jeśli można nazwać mnie programistą. Nie mam żadnych podstaw. Zaistniała potrzeba próbuję jej sprostać dziękuję za uwagę

0

No to nie bądź Januszem programowania, tylko zatrudnij kogoś, kto Ci to zrobi ;)

1

Do filtrowania obrazów jest multum gotowych narzędzi w różnych edytorach.

Gdybyś się jednak chciał bawić w robienie własnych algorytmów to opisany problem przypomina mi trochę zabawy z grą w życie. Jej domyślny algorytm akurat ci się nie przyda, ale pamiętam, że bawiłam się przed laty w generowanie kontynentów w oparciu o kaszę losowych pikseli i odpowiednio dobierając reguły i liczbę operacji dawało się wydobyć z tego chaosu jakieś gładkie kształty.

0

Jak napisałem jestem prawie u mety więc po co mam kogoś zatrudniać. po drugie jaka to satysfakcja napisać sobie coś samemu. Przepraszam za niezbyt gramatyczny tekst ale nie chce mi się pisać więc dyktuję.

1
Ryszard1960 napisał(a):

Myślałem o open CV. Kupiłem nawet ebooka na ten temat poczytałem o opcjach który by mnie interesowały wydawało mi się że biblioteka nie ogarnia moich rysunków.

Co to znaczy "nie ogarnia moich rysunków"??? W jakim formacie masz te rysunki?

Tym bardziej że musiałbym się od podstaw tego uczyć. Kodując w Blitz Basic Max NG którego już trochę znam wydaje mi się że będę miał większe panowanie nad kodem program zrobi to co ja chcę.

Do takiego zadania wystarczą podstawy programowania, które opanuje w 10 minut.

Nie mam za dużo czasu na zabawę spieszy mi się trochę z tym. I tak na razie nic nie kumam na temat erozji o której kolega kilka postów wcześniej napisał.

Nie musisz kumać erozji. Wystarczy, że wiesz jak ją użyć. W tym wypadku lepsza będzie chyba operacja zamknięcia.
Poniżej masz efekt tej operacji na jakimś znalezionym w internecie skanie
screenshot-20190625224525.png
screenshot-20190625224538.png

coś takiego można osiągnąć w 4 linijkach w darmowym Octave:

im = imread('obrazek.jpg');
imlog = im > 128;
im2 = bwmorph(imlog,'close');
imwrite(im2,'closed.jpg');

Powyższy efekt może nie jest najlepszy, ale w prosty sposób można go poprawić, np. dobierając odpowiednie elementy strukturalne. Np. Zamiast powyższej linijki

im2 = bwmorph(imlog,'close');

można użyć:

se = strel("diamond",1);
im2 = imclose(imlog,se);

Dla powyższego obrazka efekt będzie trochę lepszy:
screenshot-20190625230137.png

0

Co to za skaner że skanuje tylko jednobitową czerń i biel? A może coś źle robisz?
Znacznie lepiej byłoby skanować w pełnym kolorze, wtedy jest więcej danych na których algorytmy mogą pracować. Przykładowo kilka dni temu skanowałem książkę. Wyglądała tak:
s1.jpg
kilka kliknięć i wygląda tak:
s2.jpg
gdyby skan był jednobitowy jak u ciebie, pewnie byłby tak samo zaśmiecony...

0

Witam!

Postaram się lepiej wytłumaczyć moją pracę. Mam rysunek techniczny, który jest na białym papierze ale częściej na różnych odcieniach podstawowych kolorów albo szary. Skaner wielkoformatowy Canon. Skaner mam ustawiony czarno-biały. Jeśli obrazek po skanowaniu wygląda tak jak plik "file2" lub lepiej jest OK. Niestety często tak nie wygląda. To jest skan obrazu file1 w odcieniach szarości. Tylko, że sklejony z dwóch połówek obrazów file100-file165 - Skany.zip. Liczba wskazuje wielkość progu. Programem do skanera mogę ustawić tylko jeden próg. Jak wspomniałem próbowałem używać innych programów. Nie spełniały moich wymagań. Skanuję w odcieniach szarości i poddaje obróbce moim programem. Na razie mam tyle - pliki spakowane Program.zip. Program jeszcze nie skończony. Przydałoby się je trochę przeczyścić z pikseli i wybrać najlepszy rysunek.

0
Ryszard1960 napisał(a):

Witam!

Postaram się lepiej wytłumaczyć moją pracę. Mam rysunek techniczny, który jest na białym papierze ale częściej na różnych odcieniach podstawowych kolorów albo szary. Skaner wielkoformatowy Canon. Skaner mam ustawiony czarno-biały. Jeśli obrazek po skanowaniu wygląda tak jak plik "file2" lub lepiej jest OK. Niestety często tak nie wygląda. To jest skan obrazu file1 w odcieniach szarości. Tylko, że sklejony z dwóch połówek obrazów file100-file165 - Skany.zip. Liczba wskazuje wielkość progu. Programem do skanera mogę ustawić tylko jeden próg. Jak wspomniałem próbowałem używać innych programów. Nie spełniały moich wymagań. Skanuję w odcieniach szarości i poddaje obróbce moim programem. Na razie mam tyle - pliki spakowane Program.zip. Program jeszcze nie skończony. Przydałoby się je trochę przeczyścić z pikseli i wybrać najlepszy rysunek.

Te skany nie wyglądają najlepiej i nie wiem czy jakimś prostym algorytmem dałoby się poprawić ich jakość. Problem dotyczy przede wszystkim nierównomiernego naświetlenia. Słusznie, że przetwarzasz osobno lewą i prawą połówkę obrazka, ale nawet to może nie wystarczyć, bo nawet w obrębie jednej połowy naświetlenie jest na tyle nierówne, że jakiekolwiek sprogowanie spowoduje albo usunięcie istotnych elementów, albo uwydatnienie szumu. Tu przydałaby się jakaś metoda działająca lokalnie, czy adaptacyjnie. Metody morfologiczne, które radziliśmy Ci wcześniej, raczej nie przyniosą skutku, a przynajmniej nie same.

Z tego co rozumiem, są to jakieś stare projekty które potrzeba zarchiwizować. Jeśli archiwizacja ma być tylko dla potrzeb ludzi, to może wystarczy jakość file1 + jakieś automatyczne wyrównanie histogramu, bez progowania. Jeśli z tych projektów mają powstać obrazy do dalszego komputerowego przetwarzania, powielania, etc. to trochę gorzej. W zależności od tego ile jest tych projektów, ile masz czasu i funduszy na to zadanie, możesz rozważyć następujące opcje:

  • poprawić technikę skanowania (wzorzec nie może być w skanerze pod kątem, a tak się często dzieje, gdy skanujesz książki)
  • znaleźć usługę skanowania z lepszym skanerem.
  • napisać prosty skrypt, który proguje i usuwa szum automatycznie. Przepuścić przez niego wszystkie projekty. Wybrać te o zadowalającej jakości. Resztę przetworzyć ręcznie w jakimś programie graficznym.
  • zlecić lub napisać idealny program do przetwarzania takich skanów. Wymagałoby to nie tylko nauczenia się programowania, ale jeszcze w większym stopniu zapoznania się z technikami przetwarzania obrazów, przeczytania paru książek i publikacji. Raczej nie polecam.
  • zlecić lub wykonać samodzielnie nowe rysunki techniczne w programach do tego służących na podstawie oryginałów. Uzyskasz wtedy najlepszą możliwą jakość. Te projekty nie wyglądają na wysoce skomplikowane, podejrzewam, że ktoś kto robi takie rzeczy rutynowo byłby w stanie taki rysunek zrobić w 15 minut.

1 użytkowników online, w tym zalogowanych: 0, gości: 1