Una guía para principiantes sobre el procesamiento de imágenes usando NumPy

Estás leyendo la publicación: Una guía para principiantes sobre el procesamiento de imágenes usando NumPy

Principalmente encontramos los usos de NumPy en los problemas en los que debemos realizar operaciones matemáticas y lógicas en diferentes tamaños de matrices. Dado que las imágenes también se pueden considerar compuestas de matrices, podemos usar NumPy para realizar diferentes tareas de procesamiento de imágenes desde cero. En este artículo, aprenderemos sobre las tareas de procesamiento de imágenes que solo se pueden realizar con NumPy. Esto será útil para que los principiantes entiendan el procesamiento de imágenes desde sus conceptos básicos. Las principales operaciones que se realizarán con NumPy se enumeran a continuación, que cubriremos en este artículo.

Tabla de contenido

  1. Cargando imagen
  2. Recortar imagen
  3. separación de colores
  4. Transformación
  5. Conversión de escala de grises
  6. Segmentación de imagen

Comencemos con la importación de bibliotecas y la carga de una imagen aleatoria.

Cargando imagen

import numpy as np import matplotlib.pylab as plt %matplotlib inline image = plt.imread(“/content/drive/MyDrive/Yugesh/procesamiento de imágenes usando numpy/images.jfif”) print(image)

Producción:

Aquí podemos ver la forma cruda de la imagen. Dado que matemáticamente las imágenes se componen de valores de píxeles en la salida anterior, podemos ver que tenemos algunos números que definen los colores en la imagen y la imagen es básicamente una matriz o matriz NumPy. También podemos trazar la imagen usando la biblioteca matplotlib.

imgplot = plt.imshow(imagen)

Producción:

Recortar imagen

Después de cargar la imagen, estamos listos para realizar acciones en la imagen. Como en muy básico, podemos realizar operaciones básicas de recorte en nuestra imagen. Para NumPy, la operación de recorte se puede realizar cortando la matriz.

🔥 Recomendado:  Una guía para la minería de reglas de asociación interpretable usando PyCaret

crop_img = imagen[20:199,:200,:]
imgplot = plt.imshow(crop_img)

Producción:

Aquí podemos ver que hemos recortado nuestra imagen. Ahora podemos pasar a nuestro próximo paso de procesamiento de imágenes.

Separación de colores

Ya que sabemos que cada imagen está hecha de valores de píxeles y estos valores de píxeles representan tres números enteros que se conocen como el valor RGB de su color. Para separar la imagen en estos colores, debemos extraer la porción correcta de la matriz de imágenes.

fig, axs = plt.subplots(nrows=1, ncols=3, figsize=(20,8)) for c, ax in zip(range(3), axs): rgb_img = np.zeros(image.shape, dtype =”uint8″) rgb_img[:,:,c] = imagen[:,:,c]
ax.imshow(rgb_img) ax.set_axis_off()

Producción:

Aquí, en la salida, podemos ver que hemos separado el RGB de la imagen para esto, mapeamos los valores en el rango de 0 a 1 y los convertimos al tipo uint8. Avancemos hacia nuestro próximo paso de procesamiento de imágenes.

Transformaciones

En este paso, realizaremos la transformación de color. Para este propósito, podemos tratar el píxel de la imagen como un punto en el espacio. Tratar de esta manera los píxeles de la imagen nos permite realizar una transformación al punto de color. Rotar el punto de color puede ser un ejemplo de la declaración anterior. Aquí estamos aplicando la función de notación de Einstein de Numpy, que es un método para aplicar una matriz de rotación, en píxeles, a la imagen.

def do_normalise(imagen): return -np.log(1/((1 + imagen)/257) – 1) def undo_normalise(imagen): return (1 + 1/(np.exp(-imagen) + 1) * 257).astype(“uint8”) def rotación_matrix(theta): devuelve np.c_[
[1,0,0],
[0,np.cos(theta),-np.sin(theta)],
[0,np.sin(theta),np.cos(theta)]
]img_norm = hacer_normalizar(imagen) img_rot = np.einsum(“ijk,lk->ijl”, img_norm, rotación_matrix(np.pi)) img = deshacer_normalizar(img_rot) imgplot = plt.imshow(img)

Producción:

Aquí, en la salida, podemos ver que el sigmoide aplicado al espacio de color funcionó y estamos aplicando la rotación del color de los píxeles de forma continua. Ahora, en el siguiente paso, veremos cómo podemos convertir una imagen en una imagen en escala de grises.

🔥 Recomendado:  El futuro del marketing de IA: lo que necesita saber

Conversión de escala de grises

También podemos usar NumPy para transformar la imagen en una imagen en escala de grises. Al tomar la media ponderada del valor RGB de la imagen, podemos realizar esto.

rgb_pesos = [0.2989, 0.5870, 0.1140]
grayscale_image = np.dot(imagen[…,:3]rgb_weights) imgplot = plt.imshow(imagen_en escala de grises)

Producción:

Aquí está la imagen de la salida de nuestro proceso de conversión en escala de grises. Pasemos a nuestro próximo paso de procesamiento de imágenes.

Segmentación de imagen

Este es uno de los pasos de procesamiento de imágenes más utilizados donde segmentamos diferentes regiones de imágenes. Hay varias formas de hacerlo, como primer plano y fondo. Por ejemplo, en este artículo vamos a ver cómo podemos realizar la segmentación convirtiendo la imagen a escala de grises y encontrando un umbral. Los píxeles de la imagen que están por encima del umbral están en una región y otros están en otra región.

def simple_threshold(imagen, umbral=128): return ((imagen > umbral) * 255).astype(“uint8”) umbrales = [100,120,128,138,150]

fig, axs = plt.subplots(nrows=1, ncols=len(umbrales), figsize=(20,5)); gray_im = to_grayscale(imagen) para t, hacha en zip(umbrales, ejes): ax.imshow(simple_threshold(gray_im, t), cmap=’Grises’); ax.set_title(“Umbral: {}”.format

Producción:

Aquí, en el resultado anterior, podemos ver que hemos segmentado la imagen en dos regiones usando diferentes valores de umbral.

Ultimas palabras

En este artículo, hemos discutido diferentes tareas de procesamiento de imágenes que hemos realizado utilizando la biblioteca NumPy. Además, hemos utilizado la biblioteca matplotlib para la visualización de imágenes después del procesamiento. Al observar los puntos anteriores, podemos decir que también podemos realizar otras tareas simplemente usando alguna otra lógica.

Referencias

Tabla de Contenido