Como você evita faixas de cores de destaque em gradientes?

13

Portanto, isso é mais visualização científica do que design gráfico, mas acho que a teoria é a mesma. Nos mapas de cores usados ​​para visualizar dados, geralmente existem faixas de cores que se destacam quando não deveriam. Eu acredito que eles são uma forma de bandas machistas ?

Por exemplo, usei esse mapa de cores bipolar e produz imagens como esta:

insira a descrição da imagem aqui

É quase como um anel de laranja neon em torno de 0,2 e um anel semelhante para azul em torno de -0,2. Aqui está um gráfico dos componentes RGB e um cálculo da luminância relativa em preto:

insira a descrição da imagem aqui

Eu o ajustei manualmente para tentar me livrar das bandas e consegui um pouco, mas realmente não entendo a teoria por trás disso:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

É melhor, mas ainda vejo bandas nele.

Por outro exemplo, para o mapa de cores quente, pensei que talvez tivesse que linearizar o gráfico de luminância para evitar faixas, mas não funcionou realmente:

insira a descrição da imagem aqui insira a descrição da imagem aqui

As faixas amarelas e laranja ainda estão lá, elas são apenas movidas e manchadas um pouco. Portanto, descontinuidades no gráfico de luminância não são a causa do problema.

Como faço a transição suave entre cores sem faixas? Existem regras para fazer curvas suaves no espaço de cores do Lab ou algo assim? ( Edit: Ooh, encontrei um exemplo para isso : "A escala de cores é calculada usando o espaço de cores L a b *. Ele segue uma rampa uniforme ao longo da direção L * e segue um caminho semicircular no a * -b * avião.")

Atualização: Aqui está um gráfico desse mapa de cores no cubo RGB, mostrando os ângulos agudos que user568458 está falando:

insira a descrição da imagem aqui

endólito
fonte
1
note, eu fiz um comentário sobre bandas perceptivas (abaixo), mas isso foi antes de eu realmente analisar a questão. Vejo que você está falando sobre como duas faixas de cores específicas se destacam.
horatio
1
Bom diagrama! Isso é exatamente o que quero dizer com cantos afiados, eu estava imaginando um cubo de cores como este ou assim . Adicionei uma ilustração grosseira, mas espero que útil, do tipo de coisa que quero dizer na minha resposta. (é claro que há também o segundo par de cantos afiados nos pontos onde o caminho vermelho acrescenta verde para alcançar branco, e onde o trajeto azul Acrescenta vermelho para alcançar branco)
user56reinstatemonica8

Respostas:

6

Não esqueça que, mesmo se você estiver trabalhando com valores de cores LAB, os valores RGB precisam ser exibidos para mostrá-los na tela. Em algum momento, ele precisa dizer aos pixels vermelho, verde e azul de uma tela o que fazer.

Veja isso em termos RGB, e a causa das bandas é realmente bastante simples.

Pegue um seletor de cores e observe os gradientes, e você notará que as faixas estão em torno dos pontos em que a natureza do gradiente muda:

  • No vermelho, é em torno de onde passa de aumentar suavemente o R no RGB para adicionar G para ficar amarelo - em torno de # FF0000 a # FF2500
  • No azul, é em torno de onde passa de aumentar suavemente o B no RGB para adicionar G para tornar-se ciano - entre # 0000FF e # 0025FF

E da mesma forma com as parcelas inferiores, adicionando amarelo ao branco: são essencialmente três gradientes unidos. Usando o gradiente vermelho como exemplo:

  • é # 000000 a # FF0000 (aumentando o brilho em termos de HSB, aumentando o canal vermelho em RGB)
  • depois # FF0000 para # FFFF00 (alterando a matiz em termos de HSB, aumentando o canal verde em RGB)
  • depois # FFFF00 para #FFFFFF (alterando a saturação em termos de HSB, aumentando o canal azul em RGB)

insira a descrição da imagem aqui

Portanto, sempre haverá uma junção visível, se é assim que é configurada. Como regra geral, onde a precisão e a linearidade são o objetivo principal, é melhor manter um gradiente simples, variando um recurso constantemente (a menos que você queira fazer faixas, por exemplo, em alguns tipos de varredura cerebral).


Dito isso , se você estiver determinado a percorrer um espectro mais amplo (parece bom), eu começaria a adicionar o segundo canal antes que o primeiro fosse concluído, formando uma seção de ponte entre os gradientes ou tendo um ligeira curva de forma S inversa à taxa na qual o segundo canal é adicionado (provavelmente ambos).

Então, em vez de:

  • 000000 a # FF0000, 100% preto a 100% vermelho

  • FF0000 a # FFFF00, 100% vermelho a 100% amarelo

  • FFFF00 a #FFFFFF, 100% amarelo a 100% branco

... pode ser (apenas palpites em cima da minha cabeça, vai precisar de ajustes):

  • 000000 a # E90000, 100% preto a vermelho brilhante

  • E90000 a # FF2500, (PONTE CURTA) vermelho brilhante (escuro) a vermelho brilhante (ligeiramente laranja)

  • FF2500 a # FFE900, vermelho brilhante (ligeiramente laranja) a amarelo brilhante (ligeiramente laranja)

  • FFE900 a # FFFF25, (PONTE CURTA) amarelo brilhante (ligeiramente laranja) a amarelo brilhante (claro)

  • FFFF25 a #FFFFFF, amarelo brilhante (claro) a 100% branco

... depois ajuste as curvas de cada seção de acordo com o gosto :-)


Edit: Aqui está uma demonstração da sugestão de "cortar os cantos". Não é perfeito - é bastante não refinado, apenas algo que reuni a olho em alguns minutos usando a ferramenta de mistura do Illustrator (objetos não misturados na parte inferior para mostrar os pontos de cor). Cada segmento do gradiente entre cada ponto de cor é 100% linear, enquanto você provavelmente desejaria algo mais arredondado - e, como resultado, se você olhar com cuidado, poderá identificar faixas.

Os resultados variam naturalmente entre os monitores: no meu monitor 'bom', é suave; no monitor 'ruim' que eu uso para verificar a resiliência das imagens da web (onde as bandas originais não aparecem muito claramente), as laranjas sempre aparecem moderadas, fazendo com que os ares vermelho e amarelo pareçam mais brilhantes que a laranja que se junta, enfatizando demais o vermelho e áreas amarelas - mas você ainda pode ver que a 'borda' das bandas originais desapareceu em grande parte.

De qualquer forma, em comparação com os gradientes originais, você pode ver claramente a diferença. (quanto à matemática por trás disso - não faço ideia, não sou matemático, mas espero que isso ajude a identificar o problema e a solução)

insira a descrição da imagem aqui

A outra vantagem é que você é livre para usar mais a transição preta> mais clara de canal.


Ou a mesma idéia em um cubo de cores RGB (perdoe a grosseria, ele pretende ser demonstrativo e não preciso ...):

insira a descrição da imagem aqui

Isso mostra provavelmente mais claramente o que eu quis dizer quando disse que o gradiente de exemplo pode ser aprimorado, tornando as transições dos segmentos principais para os segmentos de corte de canto mais suaves do que angulares.

user56reinstatemonica8
fonte
so tldr; Evitar valores de 255 por R, G, B canais (?)
horatio
2
@horatio não é realmente não, mais como tldr; evitar cantos agudos entre as secções de um gradiente
user56reinstatemonica8
Tudo depende do espaço de cores usado para a saída - você veria as mesmas faixas no design de impressão se tivesse um gradiente, por exemplo, de branco puro a magenta puro a violeta puro (100% magenta e ciano) a preto puro ( feita de 100% de C, m, k)
user56reinstatemonica8
Mais como "evitar cantos afiados enquanto se move pelo espaço HSB"? Mas se eu tentar fazer interpolação cúbica ou algo assim, eu acabar indo fora do espaço HSB, que, em seguida, clips os valores e faz com que coisas ruins de qualquer maneira. No meu segundo exemplo, estou fazendo o que você recomenda sobre adicionar seções de ponte, mas não está funcionando perfeitamente. Ainda parece uma mancha amarela dentro de uma mancha laranja-avermelhada com uma auréola ao redor, em vez de uma mudança de cor que varia suavemente.
endolith 27/02
1
Aqui está uma tentativa usando uma curva de bezier vez: flic.kr/p/e1bcFf flic.kr/p/e15wik
endolith
1

Talvez isso possa ajudá-lo, funciona para mim, mas não conheço uma maneira manual de fazer isso.

http://nomorebanding.com/

Raul Varela
fonte
Esse não é o mesmo tipo de bandas, e o pontilhamento não é possível nesse contexto, de qualquer maneira. Acho que estou falando mais sobre bandas perceptivas no que deve ser um gradiente suave, enquanto o seu link é sobre bandas devido à quantização das cores?
endolith 26/02
1
as bandas perceptivas são da quantização de cores. É um problema com a representação de 8 bits por pixel. Não sei nada sobre o plug-in, mas o uso de 16bpp RGB na produção de gradientes e a amostragem para 8bpp produzirão resultados muito melhores com muito menos faixas do que construí-los em 8bpp.
horatio
@horatio: Não, as bandas são da curva, tendo cantos afiados enquanto se movem pelo espaço de cores perceptivo. Especificamente, no meu exemplo, é o croma que está atingindo um pico nesses cantos.
endolith 23/10