Subtraindo cores e extraindo valores de transparência

Subtraindo cores e extraindo valores de transparência

Digamos que uma imagem foi feita semitransparente e adicionada em uma cor de fundo plana. A imagem original, a cor de fundo e o resultado (mistura) são conhecidos. Porém, essa transparência adicionada (valor alfa) é desconhecida e varia ao longo da imagem. Existe uma maneira automatizada de calcular esse valor adicionado de transparência para cada pixel da imagem? Podemos copiar esses valores e aplicar a outra imagem?

[Imagem + Transparência (desconhecida e varia)] + FlatBackground = Mix (opaco)

= [Imagem semitransparente] + FlatBackground = Mix (opaco)

Um exemplo de cópia de cada valor de transparência adicionado correspondente aos pixels da imagem:

for pixel(0,0) added 127
for pixel(1,0) added 124
for pixel(0,1) added 124
for pixel(1,1) added 120

Mas é claro que não quero imprimir esses valores. Eu só quero usá-lo como máscara (?). Assim, posso aplicar esses valores a outra imagem para criar o mesmo efeito.

Responder1

A transparência é multiplicada, e não adicionada, ao pixel original para obter o pixel misto. Veja a discussão noEspecificação PNG.

Supondo amostras de cores de 8 bits que variam de 0 a 255 e normalizando para o intervalo de 0 a 1.0, faça isso para cada pixel da imagem:

m = Mix/255
p = Picture/255
a = alpha = Transparency/255

m = (p * a) + (b * (1.0 - a))

Resolva para "a"

a = (m - b) / (p - b)

Converta de volta ao intervalo original, por exemplo, 0..255:

Transparency = a * 255

Infelizmente, isso significa que você não pode extrair transparência (alfa) de todos os pixels. Em particular, quando Picture == Background (p - b == 0) , então Transparency pode ser qualquer coisa no intervalo 0..255 (a == qualquer coisa entre 0,0 e 1,0); se você usar essa fórmula em um código, precisará se proteger contra divisão por zero.

Quando Picture-Background é diferente de zero, você pode obter Transparência, mas não é muito preciso quando a diferença (p - b) é pequena.

informação relacionada