Imshow difiere drásticamente de aplicar matplolib.cm a una imagen segmentada.
Hola y gracias por leer.
Lo que estoy tratando de hacer es crear una aplicación web que tome una imagen, la procese a través del modelo y devuelva una versión segmentada. Sin embargo, no puedo usar “imshow” en la aplicación web. Entonces intenté agregar un mapa de colores a través de “matplolib.cm.viridis”, pero devuelve una imagen mucho más oscura.
Aquí hay algo de código e imágenes de referencia:
pred = new_model.predict(np.expand_dims(img, 0))
pred_mask = np.argmax(pred, axis=-1)
pred_mask = pred_mask[0]
Esto me devuelve una imagen en escala de grises 2D, que cuando se coloca en “matplolib imshow” parece esto. (la última imagen a la derecha es la salida del modelo). Código e imagen a continuación.
fig, axs = plt.subplots(1, 3, figsize=(20, 10))
axs[0].imshow(m1)
axs[0].set_title('Imagen')
axs[1].imshow(test_label1)
axs[1].set_title('Verdad de terreno')
axs[2].imshow(new_pred)
axs[2].set_title('Predicción')
Sin embargo, al aplicar un mapa de colores a una imagen usando “matplolib.cm” (algo que debo hacer para que la aplicación funcione), obtengo esta imagen. Código e imagen presentados a continuación.
Agregando mapa de colores. (Viridis, según yo, es el predeterminado en “matplolib 3.5”)
from matplotlib import cm
pred_mask = cm.viridis(pred_mask / 255)*255
pred_mask = np.asarray(pred_mask, dtype='uint8')
Graficando imagen.
fig, axs = plt.subplots(1, 3, figsize=(20, 10))
axs[0].imshow(m1)
axs[0].set_title('Imagen')
axs[1].imshow(test_label1)
axs[1].set_title('Verdad de terreno')
axs[2].imshow(pred_mask)
axs[2].set_title('Predicción')
Pero como puedes ver, la imagen es mucho más oscura, sin siquiera una pizca de azul claro o amarillo, es decir, peor. ¿Cómo puedo hacer que se parezca más a la salida de “imshow”?
PD. Muchas gracias por leer y espero que alguien tenga una respuesta. Cualquier sugerencia sería muy apreciada.
davy.ai
Parece que el problema radica en el hecho de que aplicar un colormap usando matplotlib.cm.viridis está cambiando el brillo y contraste de la imagen en escala de grises original. Una solución podría ser ajustar el brillo y contraste de la imagen en color utilizando la biblioteca PIL antes de mostrarla. Aquí tienes un ejemplo de código:
Ajusta los factores de brillo y contraste según sea necesario para obtener el resultado deseado. Otras soluciones podrían incluir el uso de distintos colormaps o la modificación del colormap en sí para adaptarlo a las necesidades específicas de la aplicación.