Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Usuwanie "śmieci" z grafiki -

Rdr1 04 Cze 2013 21:08 1953 8
  • #1 04 Cze 2013 21:08
    Rdr1
    Poziom 11  

    Dzień dobry!

    Dnia 18-03-2013 na forum www.algorytm.org w dziale geometria-obliczeniowa-i-grafika-komputerowa zadałem takie pytanie:

    Proszę o pomoc. Jestem tzw "niedzielnym programistą". Określenie zapożyczone od kierowców. Napisałem sobie programik który usuwa mi z zeskanowanych tekstowych obrazków pojedyncze piksele i piksele które stykają się jednym bokiem z innymi. To działa i korzystam z tego często. Ale jeśli mam kartkę która jest kserowana, nieraz wielokrotnie, to na niej są setki kropeczek wielopikselowych. Nie wiem jak mam je usunąć. Normalna, kropka w tekscie na takim obrazku ma około 20 pikseli. Chciałbym znaleźć i usunąć wszelkie plamki wielopikselowe które mają mniej pikseli niż taka kropka. Nie wiem jak się do tego zabrać. Chodzi mi o algorytm wyszukiwania. Zaczynam od 4 pikseli, wyszukuje, usuwam. Jeśli nie znajdzie 4 szuka większej ilości itd. Może mnie ktoś podpowiedzieć jak mam się zabrać za to zadanie

    Licznik czytano doszedł do 1000 ale odpowiedzi ani jednej. Czy na forum Elektrody ktoś mógłby mnie oświecić.

    pozdrawiam Ryszard

    0 8
  • #2 04 Cze 2013 21:20
    marcinj12
    Poziom 40  

    A co to są "zeskanowane tekstowe obrazki"??
    20px to całkiem spora kropka - jeżeli na obrazku znajduje się tekst, ze śmieciami pousuwasz sobie wszystkie kropki a być może i kreski w takich literach jak i, j, ż, ś, ć, ó... Dobrze to przemyślałeś? :)

    0
  • #3 04 Cze 2013 21:23
    lekto
    Poziom 35  

    Spróbuj najpierw wyszukać litery i "zabezpieczyć" je przed dalszą obróbką. Potem wyszukuj czarne piksele, jeśli leży bezpośrednio obok przynajmniej jednego białego piksela to usuń. Po kilku takich rundach plamy powinny się zmniejszyć. Niektóre prawdopodobnie znikną ale to co zostało wskaże gdzie jest plama na oryginale, znasz już pozycje plam to można je usunąć z oryginału.
    Algorytm wymyślony teraz, nietestowany w warunkach bojowych.

    0
  • #4 04 Cze 2013 21:25
    Dżyszla
    Poziom 42  

    Znaczy się zwykły algorytm redukcji szumów :)
    Zaczniemy od interesującego opracowania: http://wbieniec.kis.p.lodz.pl/research/files/sis02_grabowski_bieniecki_mediana.pdf - jest tam też bogata bibliografia.

    Generalnie szukając możesz szukać na temat FFT, filtra medianowego...

    Jeśli zależy Ci na prostszym rozwiązaniu np. bazującym na Twoim, to jak najbardziej możesz go rozwinąć, czyli znajdując punkt, sprawdzasz czy wszystkie na prawe, lewo, w górę i w dół od niego w odległości 0 - x px są powyżej jakiejś wartości (czarne). Jeśli tak - wstawisz np w to miejsce biały kwadrat, lub rekursywnie wybielisz przylegające piksele z obszaru danego kwadratu.

    0
  • #5 04 Cze 2013 22:04
    damgad
    Poziom 9  

    Cytat:
    20px to całkiem spora kropka
    To już zależy od rozdzielczości tego skanu, jak kolega mówi, że normalna kropka ma ok. 20px to wszystko poniżej (z pewnym marginesem niedużym) można by już śmiało wywalić.

    Rozumiem, że chodzi o tekst drukowany, czerń-biel (bez odcieni szarości).
    Myślę, że filtr medianowy w takim wypadku się nie sprawdzi, namiesza przy krawędziach liter, a nie wywali kilkupikselowych plam. Nawet ta modyfikacja z opracowania mnie nie przekonuje.

    Może lepiej skanować tekst w poszukiwaniu obszarów czarnych o powierzchni mniejszej niż tak kropka:
    Znajdujesz czarny piksel - badasz sąsiadów czy też są czarni i tak dalej - sąsiadów czarnych sąsiadów (rekurencja?). Jak zbadasz cały obszar i wyjdzie mniejszy niż ta powiedzmy kropka to wybielasz.

    Wyeliminuje plamki, kropki. Ale nie wyeliminuje powiedzmy - podłużnych plam - włosów itp.

    0
  • #6 04 Cze 2013 23:22
    Rdr1
    Poziom 11  

    Witam ponownie.

    Napiszę jak to robię. Skanuję w rozdzielczości 300 lub 150 dpi. Kartka najczęściej A4, A5 lub pośrednia. Czasem zdarzy się A3. Najczęściej są to wydruki z Worda, Excela, jakieś schematy. Notatki, potwierdzenia zapoznania się. Wydruk, podpis i w pdf do archiwum. Zależy mi aby plik miał małą objętość i miał ładny wygląd. Bez plam wyglądających jak brud na kartce. Jak zaznaczyłem kartka może być wielokrotnie kserowana. Dostaje dokument: Skan, następnie w XnView-ie konwerterowanie wielu plików: ustawienie poziomu czerni i bieli, zmiana rozdzielczości i konwersja na 16 lub 32 kolory. Później niestety ręcznie zamiana najbardziej białego koloru na RGB(255,255,255). Chcę to w programie sobie automatycznie zrobić. Teraz ten program co dotychczas napisałem uruchamiam. Wyszukuje mi piksel dowolnego koloru byle nie RGB(255,255,255). Sprawdzam czy wokól niego są 4 pola z RGB(255,255,255). Jeśli tak zamieniam go na RGB(255,255,255). Następnie to samo co poprzedni ale sprawdzam czy 3 pola są RGB(255,255,255). Jeśli tak zmieniam na RGB(255,255,255). Zawsze pętla musi kilka razy obejść obrazek aby wszystkie nitki usunąć. Na razie tyle zrobiłem. Jeśli nie znajdę potrzebnego algorytmu albo nie będę umiał go przełożyć na kod na sztywno dodam do programu części które będą usuwać mi kropki 2x2, 3x2, 2x3, 3x3 i tak dalej. A z większymi to sobie ręcznie poradzę. Nie będzie ich tak dużo po obróbce.

    dziękuję za uwagę i proszę o jakieś propozycje

    pozdrawiam

    Ryszard

    0
  • #8 05 Cze 2013 22:49
    Rdr1
    Poziom 11  

    Proszę bardzo. Format A4 w 150 dpi.

    Usuwanie "śmieci" z grafiki -

    Usuwanie "śmieci" z grafiki -

    Usuwanie "śmieci" z grafiki -

    Usuwanie "śmieci" z grafiki -

    Pierwszy oryginał. Drugi z usuniętymi pojedynczymi pikselami. Trzeci z usuniętymi pikselami, które stykają się jednym bokiem z innym. A czwarty obrazek to podsumowanie.

    Jeszcze dużo pracy przede mną.

    pozdrawiam

    0
  • #9 06 Cze 2013 10:29
    Mr_Unk
    Poziom 17  

    Zakładając, że każdy obrazek ma tę samą rozdzielczość i chciałbyś tylko poszerzyć funkcjonalność swojej aplikacji, widzę to mniej więcej tak:

    1. Wydzielasz (jeśli nie masz wydzielonej) funkcję sprawdzającą, czy dany piksel spełnia kryteria usunięcia.
    2. Rozszerzasz w/w f-cję o sprawdzanie, czy jest fragmentem kropki o zadanym rozmiarze(tu musisz się zastanowić, czy opiszesz to w postaci matematycznej, czy po prostu drzewko if-ów - zapewne da się i tak i tak, przy czym f-cja byłaby o wiele wygodniejsza). To jest zadanie z algorytmiki i raczej nikt ci nie podpowie gotowego rozwiązania - myślę, że ludzie zajmujący się różnymi wariantami "game of life" byliby tu najbardziej pomocni.

    0