es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo paso de la segmentación de imágenes a realizar operaciones en mi región de interés después de realizar la segmentación de Felzenszwalb en scikit?

En Python, estoy utilizando una herramienta de eliminación de fondo y el algoritmo de Felzenszwalb de scikit para segmentar mi imagen.

from rembg.bg import remove
import numpy as np
import io
from PIL import Image
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

input_path = 'in.jpg'
output_path = 'out.png'

f = np.fromfile(input_path)
result = remove(f)
img = Image.open(io.BytesIO(result)).convert("RGBA")

Importando las bibliotecas necesarias:

import skimage.segmentation
from matplotlib import pyplot as plt

Realizando la segmentación:

res1 = skimage.segmentation.felzenszwalb(img, scale=500)

Descomente para imprimir los resultados si lo desea:

fig = plt.figure(figsize=(12, 5))
ax1 = fig.add_subplot(121)
ax1.imshow(res1)
ax1.set_xlabel("k=500")
fig.suptitle("Segmentación de imágenes basada en gráficos")
plt.tight_layout()

Esto me proporciona un gráfico de la imagen segmentada en varios colores diferentes. La salida res1 es una matriz ndarray “máscara entera que indica las etiquetas de los segmentos” (según el sitio web de scikit). Ahora quiero realizar un análisis de color en cada una de estas regiones. ¿Cómo puedo usar res1 para acceder a cada máscara por turno (con un fondo homogéneo o transparente) y realizar mi análisis de color?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para acceder a cada máscara en res1, puedes utilizar la función np.unique() para obtener una lista de todos los valores de etiqueta únicos en el arreglo. Luego, puedes iterar a través de la lista de etiquetas únicas y utilizar la indexación booleana para crear una máscara para cada etiqueta individual.

    Aquí tienes un ejemplo de cómo puedes realizar un análisis de color para cada segmento:

    # convertir la imagen segmentada en un arreglo de numpy
    seg = np.array(res1)
    
    # obtener todas las etiquetas únicas en la imagen segmentada
    labels = np.unique(seg)
    
    # iterar a través de cada etiqueta y realizar un análisis de color
    for label in labels:
        # crear máscara para la etiqueta actual
        mask = seg == label
    
        # aplicar máscara a la imagen original
        masked_img = np.zeros_like(img)
        masked_img[mask] = img[mask]
    
        # realizar un análisis de color en la imagen enmascarada
        # (reemplaza este código con tu propio código de análisis de color)
        mean_color = np.mean(masked_img, axis=(0, 1))
        print(f"Etiqueta {label}: color promedio = {mean_color}")
    

    Este código crea una máscara para cada etiqueta al establecer todos los píxeles con ese valor de etiqueta en True y todos los demás píxeles en False. Luego, aplica la máscara a la imagen original para extraer la imagen enmascarada para esa etiqueta. Finalmente, realiza un análisis de color en la imagen enmascarada, representado aquí por el cálculo del color promedio de los píxeles en la imagen enmascarada.

    Ten en cuenta que es posible que necesites ajustar el código de análisis de color para adaptarlo a tus necesidades específicas.

Comments are closed.