Como calcular outras cores com a mesma claridade percebida de um determinado valor de cinza?

11

Isso está relacionado a uma pergunta que fiz no tex.stackexchange , que tem um aspecto de cor. O resultado dessa pergunta é a seguinte imagem:
valor e contraste de saturação

Eu desenhei uma série de quadrados cinza à esquerda, com um galho vermelho partindo para a direita. O objetivo é ter quadrados vermelhos diferentes com uma saturação diferente, mas todos com o mesmo valor de cinza. No modelo de cores hsv, todos têm o mesmo v, mas quando converto a imagem em escala de cinza usando o Gimp, eles não são convertidos no mesmo cinza. Além disso, a impressão visual é que os quadrados vermelhos à direita são mais escuros do que os da esquerda.

Como posso, dado um certo cinza, calcular cores com um certo tom e o mesmo valor de cinza (ou, melhor ainda, com a mesma impressão em cinza )? As cores usadas na imagem são todas calculadas, portanto prefiro soluções que incorporem cálculos.

Talvez eu tenha usado termos errados aqui - sou engenheiro mecânico, portanto, corrija-me onde for apropriado ou peça esclarecimentos.


A sugestão de usar o espaço de cores do laboratório me levou a algumas conclusões:

  • Posso usar o Lvalor do modelo de laboratório para definir algum tipo de valor de cinza para cores diferentes. No modelo hsv, isso é v. Não tenho certeza se tenho permissão para compará-las, mas farei isso até que alguém se queixe.

  • No modelo hsv, também posso definir algumas "cores base" (uma tonalidade), que não consigo encontrar no modelo de laboratório.

  • No modelo hsv, tenho 2 constantes (na imagem acima: h= 0, v= 0,375) e uma variável ( s).

  • Até esse ponto, eu tenho apenas uma constante no modelo de laboratório. Isso não é suficiente para gerar algo semelhante ao que eu já fiz com o modelo hsv.

Eu acho que é hora de experimentar.


Feito! Depois que o código de conversão foi executado, ficou fácil. O primeiro passo foi definir o "alvo vermelho" à direita. Calculei RGB2Lab (255,0,0) e alterei o valor L do resultado para o L desejado na figura (L = 62,5). As cores são calculadas usando uma interpolação linear no espaço Lab de (L, 0,0) a (L, aTarget, bTarget). O resultado:

insira a descrição da imagem aqui

Obrigado!

Christoph
fonte
2
Há várias coisas que você pode achar úteis na entrada da wikipedia, mas eu achei ( en.wikipedia.org/wiki/HSL_and_HSV#Disvantages ) uma possível relação com o seu problema, especificamente: "Como o HSL e o HSV são definidos exclusivamente com Como referência a algum espaço RGB, eles não são espaços de cores absolutos: para especificar uma cor, é necessário informar com precisão não apenas os valores HSL ou HSV, mas também as características do espaço RGB em que se baseiam, incluindo a correção de gama em uso ".
Horatio 24/05
Portanto, a idéia óbvia é especificar o espaço de cores gama e RGB (se possível!) Ao tentar uma conversão.
Horatio 24/05
2
Uma ideia ainda melhor é RGB → L * a * b * → RGB; o Lab foi projetado para aproximar a visão humana e a leveza é uma de suas dimensões.
Jari Keinänen
O @koiyu Lab é como sugiro que sejam encontradas correspondências em cinza também. (Você chegou antes de mim eu estava zombando-se a resposta abaixo quando você postou isso!.)
Nick
Eu estava evitando a discussão problemática da percepção da cor :)
horatio

Respostas:

10

Você pode usar o espaço de cores do laboratório para encontrar suas correspondências. As cores com o mesmo valor L que o cinza de destino parecerão quase idênticas quando convertidas em escala de cinza.

Por exemplo, um cinza de laboratório de (50, 0, 0) será muito semelhante aos vermelhos de laboratório (50, 30, 0), (50, 50, 30) e (50, 50, 50) quando convertido em escala de cinza. As amostras abaixo usam o Photoshop (Imagem> Modo> Escala de cinza) para converter do Lab para cinza: Cores originais do laboratório
Convertido em escala de cinza

usuario
fonte
Parece algo que eu quero! Obrigado. No entanto, como não posso usar o Lab diretamente com meu conjunto de ferramentas, preciso de algum tipo de algoritmo de conversão. Koiyu sugeriu converter RGB -> Lab -> RGB, e tentarei implementar isso.
Christoph
1
Encontrei o seguinte: http://www.brucelindbloom.com/index.html?Equations.html . Não sei se as conversões estão corretas e tenho a impressão de que ainda é necessária alguma mágica.
Christoph
Essas funções de conversão parecem úteis.
Nick
E eles realmente parecem um pouco mais diretos ...
Christoph
@ Nick Eu posso fazer todos os cálculos com uma calculadora, o que é bom. No entanto, tenho que implementar as conversões do modelo de cores no meu documento LaTeX, o que está me causando dor de cabeça aqui e ali. Quando terminar, postarei o resultado e aceito sua resposta.
Christoph
4

Portanto, o conselho acima de Nick funciona apenas para 50% de luminância. Se você aplicar qualquer outro valor L igual a cores diferentes, o resultado cinza será diferente.

Deve haver uma matemática para isso, mas você pode fazer isso na tela a olho nu.

Se você criar todas as cores desejadas e colocar um elemento cinza (ilustrador) ou camada (photoshop) com seu modo de transparência em "cor" (ou saturação ou matiz), isso criará todos os elementos abaixo para revelar sua luminosidade.

Você deve garantir que todas as cores abaixo desse elemento cinza tenham uma saturação de 100, ou você terá resultados cinza-ish, em vez de cores agradáveis.

Agora, o problema é: com todos os métodos acima, você tornará todos os elementos com a "mesma luminosidade dentro do perfil RGB usado", ou seja, o mesmo cinza para o "dispositivo" selecionado e a pior parte: o olho é um dispositivo , e há diferenças.

Você pode mostrar as mesmas cores para pessoas diferentes e elas não encontrarão a mesma "uniformidade" que as outras.

Adicione isso ao fato de que você está definindo essas cores como "mesma luminosidade" no dispositivo selecionado, e não apenas todas elas são "estimadas", assim que você a exibe em um dispositivo diferente, o efeito falhará, pois todos os dispositivos possui sua própria capacidade de iluminar os elementos vermelho verde ou azul com intensidades diferentes, para que você possa obter, por exemplo, elementos mais vermelhos.

Além disso, se você fizer uma mistura de cinza a uma cor, como sugerido acima, verifique se o elemento cinza tem pelo menos 1/255 no mínimo em cada canal (ou seja, não é mais cinza) ou o software considerará a origem cinza como Matiz 0, que fornece tons médios avermelhados (porque uma mistura entre matiz 0 e qualquer outra cor fica a meio caminho do vermelho)

Sou especialista em pré-impressão desde os anos 90 e meu conselho é: se você for fazer matemática, use a matemática para os olhos (recursos visuais), bem como as do dispositivo que você mostrará esses números.

Boa sorte.

sergio
fonte