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:
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
L
do ustawienia pewnego rodzaju wartości szarości dla różnych kolorów. W modelu hsv jest tov
. 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:
Dziękuję Ci!