Restando colores y extrayendo valores de transparencia

Restando colores y extrayendo valores de transparencia

Digamos que una imagen se hizo semitransparente y se agregó sobre un color de fondo plano. Se conoce la imagen original, el color de fondo y el resultado (mezcla). Pero esa transparencia adicional (valor alfa) se desconoce y varía a lo largo de la imagen. ¿Existe una forma automatizada de calcular este valor de transparencia agregado para cada píxel de la imagen? ¿Podemos copiar estos valores y aplicarlos a otra imagen?

[Imagen + Transparencia (desconocida y varía)] + Fondo plano = Mezcla (opaco)

= [ Imagen semitransparente ] + Fondo plano = Mezclar (opaco)

Un ejemplo de cómo copiar cada valor de transparencia agregado correspondiente a los píxeles de la imagen:

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

Pero, por supuesto, no quiero imprimir estos valores. Sólo quiero usarlo como máscara (?). Entonces puedo aplicar estos valores a otra imagen para crear el mismo efecto.

Respuesta1

La transparencia se multiplica, no se suma, por el píxel original para obtener el píxel mezclado. Vea la discusión en elEspecificación PNG.

Suponiendo muestras de color de 8 bits que oscilan entre 0..255 y normalizándose al rango 0..1.0, haga esto para cada píxel de la imagen:

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

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

Resuelve para "a"

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

Convierta nuevamente al rango original, por ejemplo, 0..255:

Transparency = a * 255

Lamentablemente, esto significa que no se puede extraer la transparencia (alfa) de todos los píxeles. En particular, cuando Imagen == Fondo (p - b == 0), entonces Transparencia podría ser cualquier valor en el rango 0..255 (a == cualquier valor entre 0,0 y 1,0); Si usa esta fórmula en un código, deberá protegerse contra la división por cero.

Cuando Imagen-Fondo es distinto de cero, entonces puede obtener Transparencia, pero no es muy preciso cuando la diferencia (p - b) es pequeña.

información relacionada