Sie sind auf Seite 1von 7

Ing. Carlos Julio Pardo H. Curso Introd.

a la Visión Artificial con Python NIVEL I

ACTIVIDAD_2 FUSIÓN ALFA

DESCRIPCIÓN: La fusión alfa es el proceso de superposición de una imagen de


primer plano con transparencia sobre una imagen de fondo. La imagen
transparente es generalmente una imagen PNG. Consta de cuatro canales
(RGBA). El cuarto canal es el canal alfa que tiene la magnitud de transparencia.

OBJETIVO: Superponer una imagen PNG transparente sobre imagen de video.

Funciones a utilizar:
cv2.imread() - cv2.merge() - cv2.resize() - cv2.VideoCapture()
cv2.multiply() – cv2.add() - cv2.imshow() - cv2.waitKey()
cv2.destroyAllWindows()

PASO 1

Inicialmente realizaremos el proceso de superposición de una imagen de primer


plano con transparencia sobre una imagen de fondo utilizando las imágenes
anexas a la guía: fondo.jpg, canal_alfa.png y primer_plano.png .
1|Página
Ing. Carlos Julio Pardo H. Curso Introd. a la Visión Artificial con Python NIVEL I

Figura 1. Imagen de fondo (background) fondo.jpg

Figura 2. Imagen de primer plano (foreground) primer_plano.png

2|Página
Ing. Carlos Julio Pardo H. Curso Introd. a la Visión Artificial con Python NIVEL I

Figura 3. Imagen de mascara alfa (alpha matte) canal_alfa.png

La matemática detrás de la fusión alfa es la siguiente: En cada píxel de la imagen,


combinamos el color de la imagen de primer plano F (Foreground) y el color de
fondo B (Background) , considerando los valores asociados a los pixeles en la
máscara alfa (𝜶).

Para nuestra máscara de imagen, el rango de intensidad de píxel es (0,255),


donde una intensidad de píxel de 0 significa color negro y la intensidad de píxel de
255 significa color blanco.

En el borde de la máscara, la intensidad del píxel se encuentra en el rango de 0 a


255. Esto crea una mezcla suave en los bordes. Normalizamos el rango de
intensidad de la imagen dividiendo cada píxel por 255.0 para reducir el rango a (0
a 1).

La mezcla se hace usando la siguiente ecuación.

𝐼 = 𝛼𝐹 + (1 − 𝛼)𝐵

3|Página
Ing. Carlos Julio Pardo H. Curso Introd. a la Visión Artificial con Python NIVEL I

1. Cuando 𝛼 = 0 , el color del píxel de salida es el fondo.


2. Cuando 𝛼 = 1, el color del píxel de salida es simplemente el primer plano.
3. Cuando 0 < 𝛼 < 1 el color del píxel de salida es una mezcla del fondo y el
primer plano. Para una mezcla realista, el límite de la máscara alfa
generalmente tiene píxeles que están entre 0 y 1.

El resultado de la fusión para las imágenes utilizadas en esta parte inicial de la


guía será el siguiente:

Figura 4. Imagen resultado de la fusión.

PROCEDIMENTO
Para la superposición tendremos el canal alfa de la imagen de primer plano por
separado

▪ Lectura de imágenes
▪ Convertir imágenes en imágenes de punto flotante
▪ Normalizar mascara Alfa para mantener intensidad entre 0 and 1
▪ Multiplicación canal_alfa y primer_plano
▪ Multiplicación fondo con ( 1 - canal_alfa )
▪ Adición de primer_plano y fondo

4|Página
Ing. Carlos Julio Pardo H. Curso Introd. a la Visión Artificial con Python NIVEL I

▪ Guardar imagen resultado

NOTA: Si la forma de las tres imágenes es diferente, debemos cambiar el tamaño


de todas las imágenes a las mismas dimensiones para que podamos realizar una
operación matricial.

Note que en esta parte inicial de la guía estamos realizando la lectura de 3


imágenes porque ha sido proporcionada la imagen correspondiente al canal alfa
de nuestro primer plano primer_plano.png. Estas imágenes fueron obtenidas aquí.

Las siguientes líneas de código realizan la fusión de 2 imágenes:

import numpy as np
import cv2

# Lectura de imagenes
primer_plano = cv2.imread('primer_plano.png')
fondo = cv2.imread('fondo.jpg')
canal_alfa = cv2.imread('canal_alfa.png')

#Imprimir forma de estas imagenes


print('Forma Primer Plano: ',primer_plano.shape)
print('Forma Fondo: ',fondo.shape)
print('Forma Mascara', canal_alfa.shape)

fondo = cv2.resize(fondo,(600,400))
canal_alfa = cv2.resize(canal_alfa, (600,400))
primer_plano = cv2.resize(primer_plano,(600,400))

# Convertir imagenes en imagenes de punto flotante


primer_plano = primer_plano.astype(float)
fondo = fondo.astype(float)

# Normalizar mascara Alfa para mantener intensidad entre 0 and 1


canal_alfa = canal_alfa.astype(float)/255.0

# Multiplicacion canal_alfa y primer_plano


primer_plano = cv2.multiply(canal_alfa, primer_plano)

# Multiplicacion fondo con ( 1 - canal_alfa )


fondo = cv2.multiply(1.0 - canal_alfa, fondo)

# Adicion de primer_plano y fondo


resultado = cv2.add(primer_plano, fondo)

5|Página
Ing. Carlos Julio Pardo H. Curso Introd. a la Visión Artificial con Python NIVEL I

cv2.imshow("Fusion", resultado/255)

# Guardar imagen resultado


cv2.imwrite('resultado.png',resultado)

cv2.waitKey(0)
cv2.destroyAllWindows()

PASO 2

Una vez realizada la superposición de las imágenes, el siguiente paso será


adicionar una imagen logo en la parte inferior derecha de un video.

▪ Selecciona una imagen (PNG) que funcionara como nuestro primer plano.
▪ Verifica a través de la función img.shape que la imagen tiene 4 canales.
▪ Extrae la máscara correspondiente a transparencia (canal 4) de imagen
primer_plano. Para acceder a este plano (canal alfa) utilizaremos la
indexación Numpy:

canal_alfa = primer_plano[:,:,3]

▪ Igualmente será necesario contar con una versión de 3 canales de nuestro


primer plano. A través de la indexación Numpy,

primer_plano_3_canales = primer_plano[:,:,0:3]

▪ Recuerda que para realizar la fusión alfa las imágenes del primer plano,
fondo y mascara deben ser del mismo tipo (dimensión, número de canales),
por lo que será necesario generar una nueva imagen para el canal alfa de 3
canales a través de la función cv2.merge
▪ Define la parte inferior derecha de fotograma de video como la región de
interés ROI , considerando las dimensiones de la imagen correspondiente
al primer_plano.
▪ Aplicar proceso de fusión (paso 1)
▪ Asignar resultado de fusión a fotograma.

El proceso y los resultados de la aplicación de una superposición transparente


pueden verse a continuación:

6|Página
Ing. Carlos Julio Pardo H. Curso Introd. a la Visión Artificial con Python NIVEL I

Figura 5. Proceso de fusión para ubicar logo en fotogramas de video.

7|Página

Das könnte Ihnen auch gefallen