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:
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))
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!