Segmentación de imágenes: en visión por computadora, la segmentación de imágenes es el proceso de dividir una imagen en múltiples segmentos. El objetivo de segmentar una imagen es cambiar la representación de una imagen en algo que sea más significativo y más fácil de analizar. Por lo general, se usa para ubicar objetos y crear límites.
No es una gran idea procesar una imagen completa porque muchas partes de una imagen pueden no contener información útil. Por lo tanto, al segmentar la imagen, podemos utilizar solo los segmentos importantes para el procesamiento.
Una imagen es básicamente un conjunto de píxeles dados. En la segmentación de imágenes, los píxeles que tienen atributos similares se agrupan. La segmentación de imágenes crea una máscara de píxeles para los objetos en una imagen que nos brinda una comprensión más completa y granular del objeto.
Usos:
- Utilizado en vehículos autónomos. La conducción autónoma no es posible sin la detección de objetos que implica la segmentación.
- Utilizado en la industria de la salud. Útil para segmentar células cancerosas y tumores con los que se puede medir su gravedad.
Hay muchos más usos de la segmentación de imágenes.
En este artículo, realizaremos la segmentación de una imagen de la mariposa monarca utilizando un método de agrupación denominado K Means Clustering.
K significa algoritmo de agrupamiento:
K Means es un algoritmo de agrupamiento. Los algoritmos de agrupamiento son algoritmos no supervisados, lo que significa que no hay datos etiquetados disponibles. Se utiliza para identificar diferentes clases o grupos en los datos dados en función de la similitud de los datos. Los puntos de datos del mismo grupo son más similares a otros puntos de datos del mismo grupo que a los de otros grupos.
El agrupamiento de K-medias es uno de los algoritmos de agrupamiento más utilizados. Aquí, k representa el número de grupos.
Veamos cómo funciona el agrupamiento de K-means:
- Elija el número de grupos que desea encontrar, que es k.
- Asigne aleatoriamente los puntos de datos a cualquiera de los k grupos.
- Luego calcule el centro de los grupos.
- Calcule la distancia de los puntos de datos desde los centros de cada uno de los grupos.
- Dependiendo de la distancia de cada punto de datos del grupo, reasigne los puntos de datos a los grupos más cercanos.
- Nuevamente calcule el nuevo centro del grupo.
- Repita los pasos 4,5 y 6 hasta que los puntos de datos no cambien los grupos, o hasta que alcancemos el número asignado de iteraciones.
Requisitos:
- Asegúrese de tener instalados Python, Numpy, Matplotlib y OpenCV.
Código: Lea la imagen y conviértala en una imagen RGB.
python3
import numpy as np import matplotlib.pyplot as plt import cv2 %matplotlib inline # Read in the image image = cv2.imread('images/monarch.jpg') # Change color to RGB (from BGR) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) plt.imshow(image)
Ahora tenemos que preparar los datos para K medias. La imagen es una forma tridimensional, pero para aplicarle el agrupamiento k-means, debemos remodelarla en una array bidimensional.
Código:
python3
# Reshaping the image into a 2D array of pixels and 3 color values (RGB) pixel_vals = image.reshape((-1,3)) # Convert to float type pixel_vals = np.float32(pixel_vals)
Ahora implementaremos el algoritmo de K medias para segmentar una imagen.
Código: Tomando k = 3, lo que significa que el algoritmo identificará 3 grupos en la imagen.
python3
#the below line of code defines the criteria for the algorithm to stop running, #which will happen is 100 iterations are run or the epsilon (which is the required accuracy) #becomes 85% criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.85) # then perform k-means clustering wit h number of clusters defined as 3 #also random centres are initially choosed for k-means clustering k = 3 retval, labels, centers = cv2.kmeans(pixel_vals, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS) # convert data into 8-bit values centers = np.uint8(centers) segmented_data = centers[labels.flatten()] # reshape data into the original image dimensions segmented_image = segmented_data.reshape((image.shape)) plt.imshow(segmented_image)
Producción:
Ahora, si cambiamos el valor de k a 6 , obtenemos el siguiente resultado:
Como puede ver, con un aumento en el valor de k , la imagen se vuelve más clara y distinta porque el algoritmo K-means puede clasificar más clases/grupos de colores. El agrupamiento de K-means funciona bien cuando tenemos un pequeño conjunto de datos. Puede segmentar objetos en imágenes y también dar mejores resultados. Pero cuando se aplica en grandes conjuntos de datos (más cantidad de imágenes), analiza todas las muestras en una sola iteración, lo que lleva a que se consuma mucho tiempo.
Publicación traducida automáticamente
Artículo escrito por AashalKamdar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA