El tutorial definitivo de NumPy para principiantes en ciencia de datos

Contenidos

Imágenes y matrices NumPy

Las matrices NumPy encuentran un amplio uso en el almacenamiento y manipulación de datos de imágenes. Pero, ¿qué son verdaderamente los datos de imagen?

Las imágenes están formadas por píxeles que se almacenan en forma de matriz. Cada píxel tiene un valor que varía entre 0 y 255: 0 indica un píxel negro y 255 indica un píxel blanco. Una imagen en color consta de tres matrices 2-D, una para cada uno de los canales de color: rojo, verde y azul, colocadas una detrás de la otra formando así una matriz 3-D. Cada valor de la matriz constituye un valor de píxel. Entonces, el tamaño de la matriz depende de la cantidad de píxeles a lo largo de cada dimensión.

Eche un vistazo a la próxima imagen:

Ejemplo de imagen nudosa

Python puede leer la imagen como una matriz usando el scipy.misc.imread () método en la biblioteca SciPy. Y cuando lo generamos, es simplemente una matriz 3-D que contiene los valores de píxeles:

import numpy as np
import matplotlib.pyplot as plt
from scipy import misc

# read image
im = misc.imread('./original.jpg')
# image
im
array([[[115, 106,  67],
        [113, 104,  65],
        [112, 103,  64],
        ...,
        [160, 138,  37],
        [160, 138,  37],
        [160, 138,  37]],

       [[117, 108,  69],
        [115, 106,  67],
        [114, 105,  66],
        ...,
        [157, 135,  36],
        [157, 135,  34],
        [158, 136,  37]],

       [[120, 110,  74],
        [118, 108,  72],
        [117, 107,  71],
        ...,

Podemos chequear la forma y el tipo de esta matriz NumPy:

print(im.shape)
print(type(type))
(561, 997, 3)
numpy.ndarray

Ahora, dado que una imagen es solo una matriz, podemos manipularla fácilmente usando una función de matriz que hemos visto en el post. Como, podríamos voltear la imagen horizontalmente usando el np.flip () método:

# flip
plt.imshow(np.flip(im, axis=1))

Imágenes de numpy flipped

O puede normalizar o cambiar el rango de valores de los píxeles. A veces, esto es útil para cálculos más rápidos.

im/255
array([[[0.45098039, 0.41568627, 0.2627451 ],
        [0.44313725, 0.40784314, 0.25490196],
        [0.43921569, 0.40392157, 0.25098039],
        ...,
        [0.62745098, 0.54117647, 0.14509804],
        [0.62745098, 0.54117647, 0.14509804],
        [0.62745098, 0.54117647, 0.14509804]],

       [[0.45882353, 0.42352941, 0.27058824],
        [0.45098039, 0.41568627, 0.2627451 ],
        [0.44705882, 0.41176471, 0.25882353],
        ...,
        [0.61568627, 0.52941176, 0.14117647],
        [0.61568627, 0.52941176, 0.13333333],
        [0.61960784, 0.53333333, 0.14509804]],

       [[0.47058824, 0.43137255, 0.29019608],
        [0.4627451 , 0.42352941, 0.28235294],
        [0.45882353, 0.41960784, 0.27843137],
        ...,
        [0.6       , 0.52156863, 0.14117647],
        [0.6       , 0.52156863, 0.13333333],
        [0.6       , 0.52156863, 0.14117647]],

       ...,

¡Recuerde que esto es utilizar el mismo concepto de ufuncs y transmisión que vimos en el post!

Hay muchas más cosas que podría hacer para manipular sus imágenes que serían útiles cuando clasifique imágenes usando redes neuronales. Si está interesado en construir su propio clasificador de imágenes, ¡puede dirigirse aquí para obtener un tutorial increíble sobre el tema!

Notas finales

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.