Jak uniknąć pasm o wyraźnym kolorze na gradientach?

13

Jest to więc bardziej naukowa wizualizacja niż projektowanie graficzne, ale myślę, że teoria jest taka sama. W mapach kolorów używanych do wizualizacji danych często występują pasy koloru, które wystają, gdy nie powinny. Uważam, że są formą zespołów Macha ?

Na przykład użyłem tej dwubiegunowej mapy kolorów i tworzy ona takie obrazy:

wprowadź opis zdjęcia tutaj

To prawie jak pierścień neonowej pomarańczy około 0,2, a podobny do niebieskiego około -0,2. Oto wykres składników RGB i obliczenie względnej luminancji w kolorze czarnym:

wprowadź opis zdjęcia tutaj

Poprawiłem go ręcznie, aby pozbyć się pasm i trochę mi się udało, ale tak naprawdę nie rozumiem teorii:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Jest lepiej, ale wciąż widzę w nim zespoły.

Dla innego przykładu, dla gorącej mapy kolorów, pomyślałem, że może muszę zlinearyzować wykres luminancji, aby zapobiec tworzeniu pasm, ale tak naprawdę to nie działało:

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Żółte i pomarańczowe pasy nadal tam są, po prostu się poruszyły i trochę rozmazały. Tak więc nieciągłości na wykresie luminancji nie są przyczyną problemu.

Jak płynnie przechodzić przez kolory bez pasków? Czy istnieją zasady tworzenia gładkich krzywych w przestrzeni kolorów Lab lub coś takiego? ( Edycja: Ooch, znalazłem przykład tego : „Skala kolorów jest obliczana przy użyciu przestrzeni kolorów L a b *. Podąża ona równomierną rampą wzdłuż kierunku L * i podąża półkolistą ścieżką w a * -b * samolot.")

Aktualizacja: Oto wykres tej mapy kolorów w kostce RGB, pokazujący ostre kąty, o których mówi użytkownik568458:

wprowadź opis zdjęcia tutaj

endolit
źródło
1
Zauważyłem, że skomentowałem zespoły percepcyjne (poniżej), ale to było zanim naprawdę spojrzałem na pytanie. Widzę, że mówisz o tym, jak wyróżniają się dwie konkretne serie kolorów.
horatio
1
Niezły schemat! Właśnie to mam na myśli przez ostre rogi, wyobrażałem sobie taką kostkę kolorów jak ta lub taka . Do mojej odpowiedzi dodałem prymitywną, ale miejmy nadzieję użyteczną ilustrację tego, co mam na myśli. (oczywiście jest też druga para ostrych narożników w punktach, w których czerwona ścieżka dodaje zielonego, aby osiągnąć biały, a gdzie niebieska ścieżka dodaje czerwonego, aby osiągnąć biały)
user56reinstatemonica8

Odpowiedzi:

6

Nie zapominaj, że nawet jeśli pracujesz z wartościami kolorów LAB, wartości RGB muszą być wyprowadzane, aby pokazać je na ekranie. W pewnym momencie musi powiedzieć czerwonym, zielonym i niebieskim pikselom ekranu, co ma robić.

Spójrz na to w kategoriach RGB, a przyczyna pasm jest właściwie dość prosta.

Chwyć próbnik kolorów i spójrz na gradienty, a zauważysz, że pasy znajdują się wokół punktów, w których zmienia się charakter gradientu:

  • Na czerwono jest wokół, gdzie zmienia się od płynnego zwiększania R w RGB do dodawania G, który staje się żółty - około # FF0000 do # FF2500
  • Na niebiesko jest tam, gdzie zmienia się od płynnego zwiększania B w RGB do dodawania G, aby stał się cyjanowy - około # 0000FF do # 0025FF

Podobnie jest z dolnymi wykresami, dodającymi kolor żółty do białego: są to zasadniczo trzy gradienty połączone. Na przykładzie czerwonego gradientu:

  • to # 000000 do # FF0000 (zwiększenie jasności w kategoriach HSB, zwiększenie kanału czerwonego w RGB)
  • następnie # FF0000 do # FFFF00 (zmiana odcienia w kategoriach HSB, zwiększenie zielonego kanału w RGB)
  • następnie # FFFF00 do #FFFFFF (zmiana nasycenia w kategoriach HSB, zwiększenie kanału niebieskiego w RGB)

wprowadź opis zdjęcia tutaj

Więc zawsze będzie widoczne połączenie, jeśli tak jest skonfigurowane. Zgodnie z ogólną zasadą, w której dokładność i liniowość są głównym celem, najlepiej jest utrzymywać prosty gradient, stale zmieniając jedną cechę (chyba że chcesz pasmowania, np. W przypadku niektórych rodzajów skanowania mózgu).


To powiedziawszy , jeśli jesteś zdeterminowany, aby przejść przez szersze spektrum (wygląda dobrze), przyjrzałbym się albo zacząć dodawać drugi kanał, zanim pierwszy zostanie ukończony, tworząc sekcję łączącą gradienty lub mając lekko odwróconą krzywą kształtu S do prędkości dodawania drugiego kanału (prawdopodobnie oba).

Więc zamiast:

  • 000000 do # FF0000, 100% czarnego do 100% czerwonego

  • FF0000 do # FFFF00, 100% czerwony do 100% żółty

  • FFFF00 do #FFFFFF, 100% żółty do 100% białego

... może być (tylko zgaduję, że trzeba będzie wyregulować):

  • 000000 do # E90000, 100% czarnego do jasnoczerwonego

  • E90000 do # FF2500, (KRÓTKI MOST) jasnoczerwony (ciemny) do jasnoczerwonego (lekko pomarańczowy)

  • FF2500 do # FFE900, jasnoczerwony (lekko pomarańczowy) do jasnożółtego (lekko pomarańczowy)

  • FFE900 do # FFFF25, (KRÓTKI MOST) jasnożółty (lekko pomarańczowy) do jasnożółty (jasny)

  • FFFF25 do #FFFFFF, jasnożółty (jasny) do 100% białego

... następnie dopasuj krzywe każdej sekcji do gustu :-)


Edycja: Oto przykład sugestii „skracania narożników”. To nie jest idealne - jest dość nierafinowane, po prostu coś, co zestawiłem wzrokowo w ciągu kilku minut za pomocą narzędzia do mieszania programu Illustrator (niezmieszane obiekty na dole, aby pokazać punkty kolorów). Każdy segment gradientu między punktami koloru jest w 100% liniowy, podczas gdy prawdopodobnie chcesz czegoś bardziej zaokrąglonego - w rezultacie, jeśli przyjrzysz się uważnie, możesz dostrzec pasma.

Naturalnie wyniki różnią się między monitorami: na moim „dobrym” monitorze jest płynnie; na „złym” monitorze, którego używam do sprawdzania odporności obrazów internetowych (gdzie oryginalne paski nie pokazują się bardzo wyraźnie), pomarańcze zawsze wydają się stonowane, dzięki czemu czerwone i żółte ary wydają się jaśniejsze niż łączące się pomarańcze, nadmiernie podkreślając czerwony i żółte obszary - ale nadal widać, że „krawędź” oryginalnych pasm w dużej mierze zniknęła.

Tak czy inaczej, w porównaniu z oryginalnymi gradientami, wyraźnie widać różnicę. (jeśli chodzi o matematykę stojącą za tym - nie mam pojęcia, nie jestem matematykiem, ale mam nadzieję, że to pomoże zidentyfikować problem i rozwiązanie)

wprowadź opis zdjęcia tutaj

Inną zaletą jest to, że możesz swobodnie korzystać z wyraźniejszego przejścia w czarny> jeden kanał.


Lub ten sam pomysł na kostce kolorów RGB (wybacz grubiaństwo, ma on być demonstracyjny, niedokładny ...):

wprowadź opis zdjęcia tutaj

Pokazuje to prawdopodobnie wyraźniej, co miałem na myśli, gdy powiedziałem, że przykładowy gradient można poprawić, czyniąc przejścia z segmentów głównych do segmentów do cięcia pod kątem gładkimi, a nie kątowymi.

user56reinstatemonica8
źródło
więc tldr; unikać wartości 255 dla kanałów R, G, B (?)
horatio
2
@horatio nie bardzo nie, bardziej jak tldr; unikaj ostrych narożników między sekcjami gradientu
user56reinstatemonica8
Wszystko zależy od przestrzeni kolorów użytej do wydruku - zobaczyłbyś te same pasy w druku, gdybyś miał gradient, który przechodziłby na przykład od czystej bieli do czystej magenty do czystej fioletu (100% magenty i cyjanu) do czystej czerni ( wykonane w 100% C, m, k)
user56reinstatemonica8
Bardziej jak „unikać ostrych zakrętów podczas poruszania się po przestrzeni HSB”? Ale jeśli spróbuję wykonać interpolację sześcienną lub coś w tym stylu, ostatecznie wyjdę poza przestrzeń HSB, która następnie przycina wartości i powoduje złe rzeczy. W moim drugim przykładzie robię coś, co zalecasz, dodając sekcje mostkowe, ale to nie działa idealnie. Nadal wygląda jak kropla żółta wewnątrz kropli czerwonawo-pomarańczowej z otoczką wokół aureoli, zamiast płynnie zmieniającej się zmiany koloru.
endolith
1
Oto próba za pomocą krzywych Beziera zamiast: flic.kr/p/e1bcFf flic.kr/p/e15wik
endolit
1

Może to może ci pomóc, to działa dla mnie, ale nie znam ręcznego sposobu, aby to osiągnąć.

http://nomorebanding.com/

Raul Varela
źródło
To nie jest ten sam rodzaj łączenia, a dithering nie jest w tym kontekście możliwy. Wydaje mi się, że mówię więcej o pasmach percepcyjnych w tym, co powinno być gładkim gradientem, podczas gdy twój link dotyczy pasmowania z powodu kwantyzacji kolorów?
endolith
1
pasma percepcyjne pochodzą z kwantyzacji kolorów. Jest to problem z reprezentacją 8 bitów na piksel. Nie wiem nic na temat wtyczki, ale użycie 16bpp RGB podczas tworzenia gradientów, a następnie próbkowanie w dół do 8bpp przyniesie znacznie lepsze wyniki przy znacznie mniejszym pasmowaniu niż budowanie ich w 8bpp.
horatio
@horatio: Nie, pasy są od krzywej, która ma ostre rogi, gdy porusza się przez percepcyjną przestrzeń kolorów. W szczególności w moim przykładzie to barwa, która osiąga szczyt w tych rogach.
endolith