drukowanie zdjęć kolorowych na czarno-białej drukarce

Mam w domu zwykłą laserową czarno-białą drukarkę. Zastanawiałem się ostatnio (jesienią 2020), jak dałoby się na niej drukować kolorowe zdjęcia.

Na przykład mógłbym rozłożyć zdjęcia na kanały H, S i V i każdy kanał wydrukować osobno. Wtedy gdyby ktoś po pewnym czasie chciał obejrzeć te zdjęcie w kolorze, mógłby przenieść je z powrotem na komputer i z powrotem połączyć kanały.

Zrobiłem próbę z tym zdjęciem:

Rozłożyłem je na kanały H, S i V tym poleceniem:
$ convert obrazek.jpg -colorspace HSV -separate kanal_%d.gif

Wyszło tak:

Wydrukowałem to na drukarce. Sfotografowałem telefonem, zrzuciłem na komputer, wyszło tak:

Wrzuciłem do Gimpa, poprawiłem poziomy, wyrównałem, żeby obrazki się pokryły. Zapisałem na dysku, po czym z powrotem połączyłem trzy kanały w jeden kolorowy obrazek poleceniem:
$ convert h.png s.png v.png -set colorspace HSB -combine -colorspace sRGB wynik.png

Oto co wyszło:

Przypomina mi kolorowe zdjęcia z czasopisma Szkiełko i Oko z lat osiemdziesiątych.


Trzy lata później, w grudniu 2023, zająłem się tym znowu. Tym razem spróbowałem zrobić porządniej: przed rozłożeniem zdjęcia na składowe i wydrukowaniem go umieściłem na zdjęciu pasery (żeby przy składaniu móc dobrze spasować warstwy) i próbki różnych kolorów (żeby po sfotografowaniu wydruku i wrzuceniu go na komputer móc dopasować poziomy w każdym z kanałów tak, żeby kolory zostały oddane w miarę wiernie).

Tak wyglądało zdjęcie z dodanymi paserami i próbkami kolorów:

Potem rozłożyłem to zdjęcie na składowe HSV. Zrobiłem to poleceniem:
$ convert 03-z_paserami.png -colorspace HSV -separate 04-kanal_%d.png

Efekt wyszedł taki:

Ponieważ kanały H i S wyszły bardziej ciemne niż jasne, to dla oszczędności tonera zrobiłem z nich negatywy poleceniami:
$ convert 04-kanal_0.png -negate 04-kanal_0_negatyw.png $ convert 04-kanal_1.png -negate 04-kanal_1_negatyw.png

Efekt wyszedł taki (pokazuję też, dla kompletności, kanał V, choć jego nie negowałem, więc pozostał bez zmian):

Potem wydrukowałem to na mojej domowej drukarcje laserowej, sfotografowałem telefonem, zrzuciłem na komputer, w gimpie spasowałem po paserach, dwa pierwsze kanały zanegowałem i podciągnąłem poziomy tak, żeby poziom szarości poszczególnych próbek kolorów w poszczególnych kanałach był mniej więcej taki jak przed wydrukowaniem. Oto efekt:

Następnie połączyłem te trzy obrazki z powrotem w jeden kolorowy. Zrobiłem to poleceniem:
$ convert 07-spasowane_kanal_0_hue.png 07-spasowane_kanal_1_saturation.png 07-spasowane_kanal_2_value.png -set colorspace HSB -combine -colorspace sRGB 08-result.png
Wynik wyszedł tak:

Całkiem fajnie wyszło. Oczywiście to zależy, co to znaczy fajnie: czy chcę, żeby wyszło jak najwierniej? Czy też właśnie chcę mieć jakieś ciekawe artefakty? Nie chce mi się nad tym zastanawiać, na razie zakładam, że jak patrzę, to wiem, czy jest fajnie. No w każdym razie wyszło fajnie, gdyby nie ta papryka. Nie dość, że jej kolor jest jakiś przekłamany, to jeszcze jest tak skokowo inny niż kolor pomidora! Dlaczego? - zastanawiałem się. Przecież na oryginalnym zdjęciu ich kolory są takie podobne.

Po dłuższym myśleniu i kilku eksperymentach zrozumiałem. Spójrzcie jeszcze raz na kanał H (czyli hue, czyli barwa):

Czy widzicie, że na tym kanale pomidor jest czarny a papryka biała? No jasne: barwa jest okręgiem (jak idziemy przez barwy tostartujemy, powiedzmy, z czerwonego, idziemy przez niebieski, zielony, żółty, i wtedy znowu dochodzimy do czerwonego. A skala szarości jest odcinkiem. Kiedy mapujemy okrąg na odcinek, to muszą być takie dwa punkty, które na okręgu są bardzo blisko, a na odcinku skrajnie daleko. I u mnie trafiło akurat na kolor czerwony - który może być reprezentowany zarówno jako biały jak i jako czarny. I teraz patrzcie, co się stanie, jeśli w kanale hue poziomy się przy wydruku i fotografowaniu przesuną (chodzi mi o to, że białe stanie się jasnoszare, lub że czarne stanie się ciemnoszare, lub że jasnoszare stanie się mniej jasne). Jeśli ta zmiana będzie dotyczyć jakichś takich pośrednich szarości, to efekt nie będzie mocno widoczny - ot, kolory będą trochę przekłamane. Ale jeśli będzie to dotyczyć czerni lub bieli, na przykład że biel się trochę zabrudzi, to stanie się tak, że jedna czerwień, ta reprezentowana przez czerń kanału hue, zostanie bez zmian, a inna, bardzo podobna na zdjęciu źródłowym, czerwień, reprezentowana przez biel kanału hue, przesunie się mocno. No i to stało się u mnie. Papryka jest reprezentowana przez biel, ta biel się zaszarzyła, więc kolor papryki się przesunął i oddalił od koloru pomidora.

Żeby to naprawić poprawiłem - nie pamiętam, chyba w gimpie - poziomy w obrazku reprezentującym kanał hue tak, żeby papryka stała się jaśniejsza. Niewiele, tak:

Potem złożyłem trzy kanały z powrotem i tym razem wyszło tak:

Teraz już mi się podoba.