Jak obliczyć inne kolory z taką samą postrzeganą jasnością jak dla danej wartości szarości?

11

Jest to związane z pytaniem , które zadałem na tex.stackexchange , które ma aspekt kolorystyczny. Rezultatem tego pytania jest następujący obraz:
kontrast wartości i nasycenia

Narysowałem serię szarych kwadratów po lewej, z czerwoną gałęzią odchodzącą w prawo. Celem jest posiadanie różnych czerwonych kwadratów o innym nasyceniu, ale wszystkie o tej samej wartości szarości. W modelu kolorów hsv wszystkie mają takie same v, ale kiedy przekonwertuję obraz do skali szarości za pomocą Gimp, nie są one konwertowane na ten sam szary. Również wrażenie wizualne jest takie, że czerwone kwadraty po prawej stronie są ciemniejsze niż te po lewej.

Jak mogę, biorąc pod uwagę określoną szarość, obliczyć kolory o określonym odcieniu i tej samej wartości szarości (lub nawet lepiej, z takim samym wrażeniem szarości )? Kolory użyte na obrazie są obliczane, więc wolę rozwiązania, które zawierają również obliczenia.

Mogłem tu użyć niewłaściwych terminów - jestem inżynierem mechanikiem, więc popraw mnie, jeśli to konieczne, lub poproś o wyjaśnienia.


Sugestia użycia przestrzeni kolorów Lab doprowadziła mnie do kilku wniosków:

  • Mogę użyć wartości modelu Lab Ldo ustawienia pewnego rodzaju wartości szarości dla różnych kolorów. W modelu hsv jest to v. Nie jestem pewien, czy rzeczywiście mogę to porównać, ale zrobię to, dopóki ktoś nie narzeka.

  • W modelu hsv mogę również ustawić „kolor podstawowy” (odcień), którego nie mogę znaleźć w modelu Lab.

  • W modelu hsv mam 2 stałe (na obrazku powyżej: h= 0, v= 0,375) i jedną zmienną ( s).

  • Do tego momentu mam tylko jedną stałą w modelu Lab. To nie wystarczy, aby wygenerować coś podobnego do tego, co już zrobiłem z modelem hsv.

Chyba czas na eksperymenty.


Gotowe! Po uruchomieniu kodu konwersji było to łatwe. Pierwszym krokiem było zdefiniowanie „docelowego czerwonego” po prawej stronie. Obliczyłem RGB2Lab (255,0,0) i zmieniłem wartość L wyniku na pożądany L na rysunku (L = 62,5). Kolory są obliczane przy użyciu interpolacji liniowej w przestrzeni Lab od (L, 0,0) do (L, aTarget, bTarget). Wynik:

wprowadź opis zdjęcia tutaj

Dziękuję Ci!

Christoph
źródło
2
Istnieje mnóstwo rzeczy, które mogą być przydatne we wpisie na Wikipedii, ale znalazłem ( en.wikipedia.org/wiki/HSL_i_HSV#Wady ) potencjalnego wpływu na twój problem, w szczególności: „Ponieważ HSL i HSV są zdefiniowane wyłącznie za pomocą w odniesieniu do niektórych przestrzeni RGB nie są to absolutne przestrzenie kolorów: precyzyjne określenie koloru wymaga podania nie tylko wartości HSL lub HSV, ale także charakterystyki przestrzeni RGB, na której są oparte, w tym zastosowanej korekcji gamma. ”
horatio
Oczywistym pomysłem jest więc określenie przestrzeni kolorów gamma i RGB (jeśli to możliwe!) Podczas próby konwersji.
horatio
2
Jeszcze lepszym pomysłem jest RGB → L * a * b * → RGB; ponieważ Lab ma na celu przybliżenie ludzkiej wizji, a Lekkość jest jednym z jej wymiarów.
Jari Keinänen
@koiyu Lab to sposób, w jaki sugeruję znalezienie szarych dopasowań. (Pobiłeś mnie do tego! Kpiłam z poniższej odpowiedzi, kiedy to opublikowałeś.)
Nick
Unikałem problematycznej dyskusji na temat postrzegania kolorów :)
horatio

Odpowiedzi:

10

Możesz użyć przestrzeni kolorów Lab, aby znaleźć swoje dopasowania. Kolory o tej samej wartości L co docelowa szarość będą wyglądać prawie identycznie po przekonwertowaniu na skalę szarości.

Na przykład szary Lab (50, 0, 0) będzie wyglądał bardzo podobnie do Labs red (50, 30, 0), (50, 50, 30) i (50, 50, 50) po konwersji na skala szarości. Poniższe próbki używają Photoshopa (Obraz> Tryb> Skala szarości) do konwersji z Lab na szary: Oryginalne kolory laboratoryjne
Przekształcony w skalę szarości

Nacięcie
źródło
To wygląda na coś, czego chcę! Dziękuję Ci. Nie mogę jednak używać Lab bezpośrednio z zestawem narzędzi, dlatego potrzebuję pewnego rodzaju algorytmu konwersji. Koiyu zasugerował konwersję RGB -> Lab -> RGB, a ja spróbuję to zaimplementować.
Christoph
1
Znalazłem następujące: http://www.brucelindbloom.com/index.html?Equations.html . Nie wiem, czy konwersje są prawidłowe i mam wrażenie, że wciąż potrzebna jest magia.
Christoph
Te funkcje konwersji wyglądają na przydatne.
Nick
I rzeczywiście wyglądają trochę bardziej prosto ...
Christoph
@Nick Mogę wykonać wszystkie obliczenia za pomocą kalkulatora, co jest dobre. Muszę jednak zaimplementować konwersje modelu kolorów w moim dokumencie LaTeX, co sprawia mi ból głowy tu i tam. Po zakończeniu opublikuję wynik i zaakceptuję odpowiedź.
Christoph
4

Tak więc powyższa rada od Nicka działa tylko dla 50% luminancji. Jeśli zastosujesz dowolną inną wartość L tak samo do różnych kolorów, szary wynik będzie inny.

Musi być do tego matematyka, ale możesz to zrobić na ekranie osobno.

Jeśli utworzysz wszystkie potrzebne kolory, a następnie położysz szary element (ilustrator) lub warstwę (photoshop) z jego trybem przezroczystości do „koloru” (lub nasycenia lub odcienia), spowoduje to, że wszystkie elementy poniżej ujawnią swoją jasność.

Powinieneś upewnić się, że wszystkie kolory poniżej tego szarego elementu mają nasycenie 100, w przeciwnym razie uzyskasz efekt szarości zamiast ładnych kolorów.

Problem polega na tym, że dzięki powyższym metodom sprawisz, że wszystkie elementy będą miały „tę samą jasność w używanym profilu RGB”, tj. Taką samą szarość dla wybranego „urządzenia”, a najgorsze: oko jest urządzeniem i są różnice.

Możesz pokazać te same kolory różnym osobom, a one nie znajdą takiej samej „równości” jak inni.

Dodaj to do faktu, że ustawiasz te kolory jako „tę samą jasność” w wybranym urządzeniu i nie tylko wszystkie one są „szacowane”, jak tylko pokażesz to w innym urządzeniu, efekt się nie powiedzie, ponieważ każde urządzenie ma własną zdolność do zapalania czerwonych zielonych lub niebieskich elementów o różnej intensywności, więc możesz dostać np. czerwone elementy.

Ponadto, jeśli zrobisz mieszankę z szarości na kolor, jak wyżej sugerowano, musisz upewnić się, że szary element ma co najmniej 1/255 minimum na każdym kanale (tj. Nie jest już szary), albo oprogramowanie uzna pochodzenie za szary za 0-odcień, który da ci czerwono-środkowe odcienie (ponieważ mieszanka między 0 odcieniem a dowolnym innym kolorem będzie w połowie w kierunku czerwonego)

Jestem ekspertem przed prasą od lat 90., a moja rada jest taka: jeśli zamierzasz iść z matematyką, powinieneś użyć matematyki dla oka (możliwości wizualne), a także dla urządzenia, które pokażesz te liczby włączone.

Powodzenia.

sergio
źródło