Existe um algoritmo para mistura de cores que funciona como misturar cores reais?

A mistura comum de cores RGB é muito diferente da mistura de cores para pinturas, é mistura de luz em vez de mistura de pigmentos.

Por exemplo:

Blue (0,0,255) + Yellow (255,255,0) = Grey (128,128,128)

(Deve ser azul + amarelo = verde)

Existe algum algoritmo conhecido para mistura de cores que funciona como misturar cores reais?

Minha abordagem

Eu já tentei seguir:

Convertendo as duas cores em HSV e matizes de mixagem (multiplicados pelo coeficiente calculado a partir da saturação) e uma média simples para os canais de saturação e valor. Então, calculei a luminância média de ambas as cores e ajustei a cor resultante para corresponder a essa luminância. Isso funcionou muito bem, mas a mistura de tonalidade às vezes estava errada, e. g .:

Red (Hue 0°) + Blue (Hue 240°) = Green (Hue 120°)

Eu descobri que às vezes eu preciso mudar o valor do matiz em 360 ° (quando a diferença entre matizes é maior que 180 °).

Red (Hue 360°) + Blue (Hue 240°) = Magenta/fuchsia (Hue 300°)

Mas essa mudança também não foi muito boa, por exemplo:

Cyan (Hue 179°) + Red (Hue 0°) = Hue 89.5°
Cyan (Hue 181°) + Red (Hue 0°) --> shifting is performed (the difference is greater than 180°)
Cyan (Hue 181°) + Red (Hue 360°) = Hue 270.5°

(Matiz 179 + Vermelho) e (Matiz 181 + Vermelho) resultam em duas cores completamente diferentes.

EntãoEu tentei o espaço de cor do CIE Lab (como no Photoshop), que é projetado para estar mais perto de como os humanos percebem as cores.

Eu usei apenas uma média simples para cada dois canais correspondentes, mas os resultados não foram satisfatórios, por exemplo, eu fiquei rosa (64, 26, -9.5) de azul (98, -16, 93) e amarelo (30, 68, -112). Esses coeficientes foram retirados do Photoshop.

Talvez se eu usasse alguma operação diferente da média, poderia funcionar, mas não sei o quê.

CMYK também não funcionou, os resultados são como em RGB ou LAB.

Parece quenem o aditivo trivial nem subtrativo mistura de cores em qualquer um desses espaços de cores produz resultados naturais.

Implementações de trabalhoKrita - Misturador Painterly

O editor de gráficos raster, Krita, teve uma implementação funcional de uma mistura de cores mais realista em algum momento:http://commit-digest.org/issues/2007-08-12/ (Plug-in do mixer do Painterly)

Eles dizem que é o primeiro aplicativo público que implementa tecnologia especial usando as equações de Kubelka e Munk que descrevem o comportamento dos pigmentos.

Aqui está um vídeo da mistura de cores Krita:https://www.youtube.com/watch?v=lyLPZDVdQiQ

Artigo de FiftyThree

Há tambémartigo sobre mistura de cores no aplicativo Paper para iOS Desenvolvido porCinquenta e três. Eles descrevem como eles inovam e experimentam na área e também oferecem amostras de mistura de azul e amarelo que resultam em verde. No entanto, o processo ou algoritmo real não é realmente descrito lá.

Citando:

"Na busca por um bom algoritmo de mistura, inicialmente tentamos interpolar em vários espaços de cores: RGB, HSV e HSL, depois CieLAB e CieLUV. Os resultados foram decepcionantes", diz Chen. "Sabemos que vermelho e amarelo devem produzir laranja, ou que vermelho e azul devem ficar roxos - mas não há como chegar a essas cores, não importa o espaço de cor que você usa. Há um axioma de engenharia: faça a coisa mais simples que poderia ter funcionado. Bem, nós já havíamos tentado as abordagens mais fáceis possíveis e elas não se sentiam nem remotamente certas ”.

Parece que o mesmo que Krita, Paper implementa o modelo Kubelka-Munk:

[...] o modelo Kubelka-Munk tinha pelo menos seis valores para cada cor, incluindo valores de reflexão e absorção para cada uma das cores RGB. "Embora a aparência de uma cor em uma tela possa ser descrita em três dimensões, a mistura de cores está realmente acontecendo em um espaço de seis dimensões", explica Georg Petschnigg, co-fundador e CEO da FiftyThree. O artigo de Kubelka-Munk permitiu que a equipe traduzisse um problema estético em uma estrutura matemática. [...]

De toda essa informação, parece queimplementação baseada no modelo Kubelka-Munk pode ser o caminho a seguir e oferecer resultados muito mais próximos da realidade.

Mesmo que pareça um processo complicado, ainda não vi muita informação boa sobre como implementar algo assim.

Perguntas relacionadas

Estas questões foram postadas depois de todas relacionadas à mesma coisa.

Nenhum deles realmente tem a resposta.

Cálculo de uma cor mista em RGBAlgoritmo para encontrar a cor entre os outros dois - no espaço de cor das cores pintadasImplementando Kubelka-Munk como Krita para misturar cores como tintaOutros links e recursos relacionadosKubelka-Munk busca no TwitterTintas de mistura (!! Con 2016) por Diana LiaoslidesvídeoPintar mistura de cores inspiradas e composição para visualização (N. Gossett, B. Chen)

questionAnswers(7)

yourAnswerToTheQuestion