Jak binaryzujesz kolorowy obraz?

14

Mój przyjaciel ma kolorowy obraz z chińskim pismem ręcznym (w zasadzie fotografując lub skanując to, co napisał na białej kartce papieru) i chciałbym, abym przekonwertował go na czarno-biały obraz binarny. Czy w Ubuntu są aplikacje, które mogą to osiągnąć?

Oto przykładowy obraz:

wprowadź opis zdjęcia tutaj

Tim
źródło

Odpowiedzi:

27

To, czego chcesz, jest określane jako „próg” w przetwarzaniu obrazu. Zasadniczo pobiera obraz jako dane wejściowe i wysyła obraz, który ma wszystkie piksele o wartości poniżej danego progu ustawionego na czarny, a wszystkie piksele, których wartość jest powyżej progu ustawionego na biały. Powoduje to powstanie czarno-białego obrazu z dowolnego obrazu wejściowego.

Ogólnie rzecz biorąc, chcesz najpierw przekonwertować na skalę szarości, aby uzyskać bardziej przewidywalne wyniki, ale możliwe jest również progowanie obrazu w pełnym kolorze.

Możesz użyć narzędzia graficznego, takiego jak GIMP, aby zrobić to interaktywnie (znajdziesz to w menu głównym -> Kolory -> Próg), lub możesz użyć ImageMagick mniej więcej tak:

convert colored.png -threshold 75% thres_colored.png

Uruchomienie powyższego polecenia na przykładowym obrazie daje wynik pokazany poniżej.

Czarno-biała wersja obrazu OP

Ponieważ progowanie jest często procesem prób i błędów, aby uzyskać wynik, z którego jesteś zadowolony, szczególnie jeśli obraz źródłowy nie jest już bardzo zbliżony do czarno-białego, zalecam podejście GUI, jeśli to możliwe, ale jeśli nie jest to opcja z jakiegokolwiek powodu, możesz to zrobić również za pomocą wiersza poleceń. Aby uzyskać lepszą kontrolę nad wydrukiem, możesz najpierw użyć narzędzi, takich jak krzywe kolorów, poziomy i kontrast, aby lepiej wyodrębnić jasne i ciemne fragmenty obrazu przed progowaniem. (W rzeczywistości próg może być postrzegany jako skrajny przypadek użycia narzędzia Krzywe kolorów.)

CVn
źródło
2
Dzięki! Ponieważ kolorowy obraz ma trzy kanały RBG, do czego ogólnie stosuje się próg?
Tim
@Tim Prawdopodobnie zależy to od oprogramowania, ale oczekiwałbym, że próg (chyba że określisz dla kanału lub dla konkretnego kanału, patrz np. -channelOpcja konwersji ImageMagick ) zostanie zastosowany do pewnego rodzaju „wartości” piksela, który jest obliczany ze wszystkich kanałów. Dlatego powiedziałem, że możesz chcieć najpierw przejść na skalę szarości, aby uzyskać bardziej przewidywalne wyniki. (Zobacz także moją edycję.)
CVn
Dzięki! Czy istnieje dokumentacja dotycząca progu obowiązującego w poleceniu pokazanym w poście?
Tim
@ Tim Nie bardzo. Spodziewałem się, że konwersja przyjmie albo wartość procentową wartości maksymalnej (która powinna wynosić 256 na kanał), albo określoną wartość, ale mogłem uzyskać tylko użyteczny wynik przy określaniu wartości procentowej. Kiedy robisz to za pomocą narzędzia graficznego, w tym GIMP, zazwyczaj masz histogram pokazujący rozkład tonalny obrazu; będzie to bardzo pomocne w wyborze właściwej wartości. Używanie tylko wiersza poleceń, chyba że masz konkretny powód, jest prawdopodobnie większym problemem niż jest tego warte.
CVn
2
Na marginesie, istnieją inne metody progowania, które nie muszą opierać się na zakodowanym poziomie progowym. Na przykład ImageMagick obejmuje, -latktóry wykonuje lokalny próg adaptacyjny, biorąc pod uwagę otaczające piksele.
voithos
7

Możesz użyć Imagemagick:

convert test.png -colorspace Gray gray_colorspace.png

Od tutaj .

Oto, co otrzymałem po zastosowaniu do Twojego obrazu:

wprowadź opis zdjęcia tutaj

mkc
źródło
10
„Binary” pochodzi od „bi”, co oznacza „dwa”, więc zakładam, że OP chce przekonwertować obraz na czysto czarno-biały. Konwersja do skali szarości daje znacznie więcej niż dwa poziomy.
CVn
Zgoda! ma sens +1.
mkc
2

-monochrome z ImageMagick to opcja, która wykorzystuje pewne inteligentne dithering i sprawia, że ​​dane wyjściowe są znacznie bardziej widoczne niż w-thresholdprzypadku, gdy są przeznaczone do spożycia przez ludzi:

convert -monochrome signature.png out.png

wprowadź opis zdjęcia tutaj

Tak prosty obraz nie robi dużej różnicy, ale dla większych jest on uderzający.

Ciro Santilli
źródło
1

Możesz to również łatwo zrobić za pomocą netpbmzestawu narzędzi:

anytopnm inputfile | ppmtopgm | pgmtopbm > outputfile

ppmtopgmkonwertuje na obraz w skali szarości, pgmtopbmkonwertuje na obraz czarno-biały, a następnie przekierowujemy dane wyjściowe do pliku. Będzie w formacie PBM; jeśli chcesz czegoś bardziej powszechnego, musisz dodać konwerter wyjściowy (np. pnmtopnglub jakiś inny)

Wouter Verhelst
źródło