Alguém pode explicar o algoritmo por trás da camada de ajuste "Preto e branco" no photoshop?
Eu tenho que reproduzi-lo usando C ++ para um aplicativo que enfatiza pixels não vermelhos / magenta (ish) de uma imagem (com uma tolerância configurável em porcentagem), e esse recurso mostrou o comportamento que eu esperava.
Ainda não consegui reproduzi-lo, mas encontrei uma pista:
Cada pixel é definido por até dois controles, um aditivo (RGB) e um subtrativo (CMY).
Respostas:
Eu repliquei o algoritmo perfeitamente no MATLAB (com base na resposta de Ivan Kuckir @ ):
Preste atenção que a conversão de
vPhotoshopValues
paravCoeffValues
deve ser feita comovCoeffValues = (vPhotoshopValues - 50) ./ 50
.Como os valores do Photoshop estão em [-200, 300] e devem ser mapeados linearmente em [-5, 5] com
50 -> 0
.Aqui está uma comparação com o Photoshop:
O erro máximo é menor que 1 no intervalo [0, 255].
O código completo está disponível no meu Repositório do GitHub do StackExchange Signal Processing Q688 .
fonte
Cada imagem (colorida) é composta por componentes RGB. quando você adiciona (ou reduz) um valor constante a todos os pixels apenas nos componentes RED, você verá o efeito equivalente a mover a guia RED para a direita e, da mesma forma, reduzir o componente RED por uma constante terá o efeito inverso.
Da mesma forma, você pode aumentar / diminuir cada componente por um valor fixo, conforme descrito. Se você aumentar / diminuir TODOS os componentes RGB com o mesmo valor, isso será equivalente à alteração no brilho (basicamente você está adicionando / removendo a cor BRANCA).
Ciano, Azul, Magenta - corresponde a essa transformação no espaço de cores CMYK. (Mas acho que o azul nesse espaço de cores corresponde à mistura de ciano e amarelo. Isso é um pouco complicado. A transformação é essencialmente a mesma para todos.
O último elemento Tint: {Hue and Saturation} corresponde às mesmas operações, mas aqui, as imagens são primeiro transformadas no modelo HSV e, em seguida, HUE e Saturation são adicionados / subtraídos independentemente.
Não sei as relações exatas dos marcadores do mostrador com os números correspondentes, mas você pode descobrir tentando valores práticos.
fonte
dotProduct(color, vec3(0.2989, 0.5870, 0.1140)
operação). 3. O azul "não corresponde a uma mistura de ciano e amarelo" em nenhum espaço de cor.