38  Flujo de trabajo en NumPy con imagenes

¡Bienvenides a esta sección donde nos adentraremos en el análisis de imágenes de flujos de fluidos utilizando NumPy, PIL, Matplotlib y glob! En esta sesión, enfrentaremos un desafío fascinante: recopilar imágenes de velocidad de flujo en arreglos por canal para analizar la dinámica del flujo. Emplearemos glob para localizar las imágenes, PIL para cargarlas, NumPy para procesarlas y Matplotlib para visualizar los resultados.

Nos prepararemos para explorar cómo cada una de estas herramientas se integra para procesar y visualizar imágenes de manera efectiva. Esta habilidad es clave para desentrañar los misterios de la dinámica de fluidos y mejorar nuestra comprensión de este fenómeno.

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import glob as glob
vels = glob.glob("../data/obstacle/*.png")
vels.sort()
vels
['../data/obstacle/u_norm_173.png',
 '../data/obstacle/u_norm_174.png',
 '../data/obstacle/u_norm_175.png',
 '../data/obstacle/u_norm_176.png',
 '../data/obstacle/u_norm_177.png',
 '../data/obstacle/u_norm_178.png',
 '../data/obstacle/u_norm_179.png',
 '../data/obstacle/u_norm_180.png',
 '../data/obstacle/u_norm_181.png',
 '../data/obstacle/u_norm_182.png',
 '../data/obstacle/u_norm_183.png',
 '../data/obstacle/u_norm_184.png',
 '../data/obstacle/u_norm_185.png',
 '../data/obstacle/u_norm_186.png',
 '../data/obstacle/u_norm_187.png',
 '../data/obstacle/u_norm_188.png',
 '../data/obstacle/u_norm_189.png',
 '../data/obstacle/u_norm_190.png',
 '../data/obstacle/u_norm_191.png',
 '../data/obstacle/u_norm_192.png']
def transforma_imagen(imagen):
    img = Image.open(imagen)
    img = np.array(img)
    img = img[:,:,:3]
    return img
imagen = transforma_imagen(vels[10])
fig, ax = plt.subplots()
ax.imshow(imagen,cmap="hot")
imagen.shape

# imagen[:,:,3]  #0,1,2
imagen = transforma_imagen(vels[1])
fig, ax = plt.subplots(3)
ax[0].imshow(imagen[:,:,0],cmap="hot")
ax[1].imshow(imagen[:,:,1],cmap="hot")
ax[2].imshow(imagen[:,:,2],cmap="hot")

vels
['../data/obstacle/u_norm_173.png',
 '../data/obstacle/u_norm_174.png',
 '../data/obstacle/u_norm_175.png',
 '../data/obstacle/u_norm_176.png',
 '../data/obstacle/u_norm_177.png',
 '../data/obstacle/u_norm_178.png',
 '../data/obstacle/u_norm_179.png',
 '../data/obstacle/u_norm_180.png',
 '../data/obstacle/u_norm_181.png',
 '../data/obstacle/u_norm_182.png',
 '../data/obstacle/u_norm_183.png',
 '../data/obstacle/u_norm_184.png',
 '../data/obstacle/u_norm_185.png',
 '../data/obstacle/u_norm_186.png',
 '../data/obstacle/u_norm_187.png',
 '../data/obstacle/u_norm_188.png',
 '../data/obstacle/u_norm_189.png',
 '../data/obstacle/u_norm_190.png',
 '../data/obstacle/u_norm_191.png',
 '../data/obstacle/u_norm_192.png']
img0 = transforma_imagen(vels[0])
img1 = transforma_imagen(vels[1])


rojas  = np.dstack([img0[:,:,0],img1[:,:,0]])
verdes = np.dstack([img0[:,:,1],img1[:,:,1]])
azules = np.dstack([img0[:,:,2],img1[:,:,2]])
rojas.shape,verdes.shape,azules.shape
((894, 4800, 2), (894, 4800, 2), (894, 4800, 2))
lista = []
for vel in vels:
    lista.append(transforma_imagen(vel)[:,:,0])
rojas = np.dstack(lista)
rojas.shape
(894, 4800, 20)
rojas = np.dstack([transforma_imagen(vel)[:,:,0]for vel in vels])
rojas.shape
(894, 4800, 20)
##Que debo cambiar? 
verdes = np.dstack([transforma_imagen(vel)[:,:,0]for vel in vels])
azules = np.dstack([transforma_imagen(vel)[:,:,0]for vel in vels])