¿Se puede calcular automáticamente la transparencia de la imagen a partir de múltiples muestras no transparentes?

Me pregunto si hay una forma de calcular automáticamente la imagen transparente a partir de un conjunto de imágenes no transparentes. Sin trabajo manual con píxeles individuales o configuración manual de opacidades.

Muchas veces necesito exportar imágenes de "editores de imágenes" que no admiten fondos transparentes (ejemplo: PowerPoint). Todavía puedo darle a la imagen cualquier fondo. Por ejemplo, puedo exportar dos muestras con fondos mutuamente inversos (como se ve en las 2 muestras a continuación). O puedo crear de 3 a 5 imágenes con fondos, por ejemplo: rojo, verde, azul, blanco, negro.

Ejemplo:
2 muestras con fondos mutuamente inversos que conducen al resultado esperado (estoy buscando una técnica/complemento para obtener ese resultado):
ingrese la descripción de la imagen aquí

Con un conjunto de este tipo, basado en las diferencias entre las muestras, debería quedar completamente claro qué píxel tiene qué valor alfa.

¿Existe un método/complemento para convertir el conjunto de muestras descrito anteriormente en una sola imagen con transparencia derivada correctamente?

Prefiero GIMP.

EDITAR:
Una muestra más para ilustrar la idea. Se utilizan brillos semitransparentes:

ingrese la descripción de la imagen aquí
ingrese la descripción de la imagen aquí

Podrías hacer algo como esto usando ImageMagick, pero la semitransparencia de la sombra sería un problema.
@JohnB: creo que podemos estar de acuerdo matemáticamente en que no debería ser un problema también para los píxeles semitransparentes si las imágenes de origen tienen colores de fondo especialmente elegidos. Me pregunto si hay una técnica/complemento para hacer los cálculos :)
Muy bien, creo que lo entiendo ahora. ¿Sería esta una reformulación correcta de la pregunta? --- ¿Hay algún complemento o método para aislar las partes idénticas de un conjunto de imágenes y cambiar el resto para que sea transparente?
No sé qué tipo de solución está buscando, pero GIMP puede hacer esto con "Color a alfa", y Photoshop puede hacerlo con "Seleccionar -> Rango de color...", no sé cómo lo automatizarías con GIMP, pero podría convertirse fácilmente en una acción de Photoshop.
@miroxlav sí, de acuerdo. Simplemente no estoy seguro de que ese tipo de cálculo se pueda hacer con IM. ¡Quizás alguien más informado que yo lo sepa!
@OGHaza: ¿cómo se puede hacer esto usando Color to Alpha si la cantidad de colores de borde o colores semitransparentes no está restringida? Me puedo imaginar solo repitiendo Color a Alpha para cada color. Pero si tiene una idea, publique una respuesta.
La sombra va a ser un problema ya que va a estar contaminada de color. Sería mejor si tuvieras una tercera imagen que fuera negra.
@joojaa: ¿te refieres a imágenes con fondo negro además de muestras con fondos azules y naranjas? Esto no es problema. Entiendo obtener el color de sombra correcto (u otros colores semitransparentes en la imagen) así: sabemos cómo se ve la imagen afectada por el fondo naranja. Entonces sabemos cómo se ve afectado por el fondo azul. Según cómo interactúan las semitransparencias con estos fondos, deberíamos poder calcular el color original. (Tal vez 3 muestras RGB sirvan mejor que naranja+azul de la muestra).
@miroxlav Vea mi respuesta, esto es tan bueno como se obtiene con el procesamiento de Photoshop.
@miroxlav, ahora que tengo Photoshop frente a mí, puedo confirmar que estaba diciendo tonterías absolutas...

Respuestas (2)

Esto se puede hacer 'perfectamente'. Debe alinear las dos imágenes como dice Horatio. Sin embargo, voy a atacar esto matemáticamente.

Así que tienes 4 canales para arreglar. El canal alfa es el más fácil. Coloca las capas una encima de la otra y resta la capa naranja por la azul (esto da mejor contraste). Luego abra el cuadro de canales y duplique la capa con la mayor diferencia de color.

ingrese la descripción de la imagen aquí

Imagen 1: duplica el canal con más diferencia de color.

Ejecute niveles en la capa copiada para que el color más brillante sea blanco usando el selector de puntos. No ajuste gamma o punto negro. Este es ahora su canal alfa perfecto (aunque con una resolución de color ligeramente desafiada). Invierta el canal copiado .

Si tuviera que aplicar el alfa ahora en la imagen, se quedaría con el tono de color premultiplicado. Esto sería fácil en After Effects, pero en Photoshop tienes que hacer el trabajo pesado tú mismo. Defringe puede funcionar para algunos casos simples, pero hay una mejor manera que garantiza que sea lo mejor posible.

Para quitar el mate haz una nueva capa. Rellena toda la capa con el color de fondo. Luego cargue el alfa y rellénelo con negro, esta es su pantalla de color mate. Asegúrese de que NO se corte de la imagen con variación de color o manche el proceso (a menos que planee eliminar el fondo en lugar del mate, pero esa es otra secuencia matemática) .

pantalla color mate

Imagen 2: Pantalla a color mate.

Reste la pantalla de color mate de su capa de color. Esto le da el canal de color.

Canal de color

Imagen 3: Canal de color.

Ahora aún necesita fusionar el alfa y el canal de color juntos. Así que combine las capas del canal de color. Luego cargue el canal copiado como una máscara de capa.

Así que ahora solo tenemos un problema, Photoshop usa Straight matte. Sí, así es, los píxeles tienen el color completamente saturado independientemente del alfa. Así que aplica la máscara a la capa. Luego ejecute Layer -> Matting -> Remove Black Matte

Resultado final

Imagen 4: Resultado final.

Y esto es casi tan bueno como parece. Calculé que habría obtenido un nivel alfa más si hubiera hecho un complemento. Principalmente porque podría hacer rodar la eliminación de halos en la pila de operaciones.

Para automatizar:

Puede hacer una acción a partir de esto y su selector de color siempre está lejos de forma automática. Esto podría estar escrito, pero tengo otras cosas que hacer. De todos modos, describí todas las matemáticas que intervienen en esto.

PD: pedí el fondo negro ya que lo habría hecho un paso más corto.

¡Esto luce bien! Gracias por más enfoque matemático. ¿Funcionará esto con áreas semitransparentes coloreadas que agregué recientemente a la pregunta? (Estábamos trabajando en paralelo :)
@miroxlav . El único inconveniente es que los colores bg que usa no son 100% ideales en términos de contraste, pero aparte de esa ligera pérdida de posible resolución alfa, no hay problemas. Usar blanco o negro mate sería una buena idea.
– Los colores bg estaban destinados solo a permitir la detección de transparencia. Uno de los resultados de salida aún podría ser una transparencia bg permanente, por ejemplo, como se usa con el diseño de íconos de escritorio.
Déjame probar esto por mi cuenta...
¿No podría simplemente hacer el alfa cambiando todo por blanco y negro en la aplicación de origen? ¿Quizás esto no funcionaría para tus brillos? De todos modos, estoy bastante seguro de que uno podría leer el canal alfa de PowerPoint.
– He ampliado la pregunta con muestras en b/n. ¿Quiso decir esto? (por cierto, estábamos trabajando en paralelo nuevamente :) Con respecto al canal alfa de PowerPoint: estaba tratando de jugar más con esto y finalmente descubrí que tenía razón: descubrí que PowerPoint-> GIMP mantiene la transparencia . La fuente de mi confusión fue que todos los demás editores de destino que probé no mostraban transparencia sino un fondo blanco sólido. El enfoque matemático que proporcionó en la respuesta sigue siendo extremadamente útil cuando el portapapeles no funciona fuera de la aplicación (por ejemplo, la herramienta de dibujo de circuitos eléctricos), ya que solo contiene datos que no son imágenes.
@miroxlav Verifique que haya un canal alfa que no esté en uso. Es posible que deba cargarlo por separado, entonces es solo el último paso. De todos modos, hay algo sospechoso con el soporte PNG de Photoshop, admite algunos archivos PNG, no otros.

Tome "imagen IZQUIERDA", colóquela en la capa sobre "imagen CENTRO" para que estén perfectamente alineados. Use el modo de fusión de capa "restar". Todo lo que sea igual será negro.

Aplane la imagen, copie todo, deshaga el aplanamiento y luego péguelo en una nueva capa. Seleccione a través del color en el negro con la configuración de "borrosidad" más amplia. Oculte la capa y aplique la selección negra como una máscara de capa a la imagen IZQUIERDA o CENTRAL.