Trabajar con un conjunto de imágenes en el aprendizaje automático

A primera vista, cuando se acerque el aprendizaje automático, los archivos de imagen aparecen como datos no estructurados formados por una serie de bits. El archivo no se separa de los bits entre sí de alguna manera. No se puede simplemente mirar en el archivo y ver cualquier estructura de imagen porque no existe ninguno. Al igual que con otros formatos de archivo, archivos de imágenes se basan en el usuario para saber cómo interpretar los datos.

Por ejemplo, cada píxel de un archivo de imagen podría consistir en tres campos de 32 bits. Sabiendo que cada campo es de 32 bits depende de usted. Una cabecera al principio del archivo puede proporcionar pistas sobre cómo interpretar el archivo, pero aún así, le toca a usted para saber cómo interactuar con el archivo utilizando el paquete o la biblioteca de la derecha.

Se utiliza Scikit-imagen aquí. Es un paquete de Python dedicada al procesamiento de imágenes, recogerlos de archivos, y el manejo de ellos utilizando matrices NumPy. Mediante el uso de Scikit-imagen, puede obtener todas las habilidades necesarias para cargar y transformar las imágenes para cualquier algoritmo de aprendizaje automático. Este paquete también le ayuda a cargar todas las imágenes necesarias, ajustar y recortar, y aplastarla en un vector de características con el fin de transformarlos con fines de aprendizaje.

Scikit-imagen no es el único paquete que puede ayudar a lidiar con imágenes en Python. También hay otros paquetes, tales como las siguientes:

  • scipy.ndimage: Le permite operar en las imágenes multidimensionales
  • Mahotas: Una biblioteca de procesamiento de C ++ basado rápido
  • OpenCV: Un paquete de gran alcance que se especializa en la visión por ordenador
  • ITK: Diseñado para trabajar en imágenes 3D para fines médicos

El ejemplo muestra cómo trabajar con un dibujo en un fichero estructurado. los imagen de ejemplo es una oferta de dominio público. Para trabajar con imágenes, es necesario para acceder a la Scikit biblioteca de imágenes, que es una colección algoritmo utilizado para el procesamiento de imágenes. Echa un vistazo a una tutorial para esta biblioteca. La primera tarea es la de mostrar la imagen en pantalla usando el siguiente código.

imread de importación skimage.io

skimage.transform de cambio de tamaño de importación

pyplot de importación matplotlib como PLT

matplotlib.cm importación como cm

% Matplotlib inline

example_file = ("http://upload.wikimedia.org/" +

"Wikipedia / Commons / 7 / 7d / Dog_face.jpg")

image = imread (example_file, as_grey = True)

plt.imshow (imagen, CMAP = cm.gray)

plt.show ()

El código comienza con la importación de una serie de bibliotecas. A continuación, crea una cadena que apunta al archivo de ejemplo en línea y lo coloca en example_file. Esta cadena es parte de la Estoy leído() llamada de método, junto con as_grey, que se fija para Cierto. los as_grey argumento le dice a Python para convertir cualquier imagen en color en escala de grises. Las imágenes que ya están en escala de grises siguen siendo de esa manera.

Después de haber cargado una imagen, realice un renderizado. los imshow () función realiza la prestación y utiliza un mapa de color en escala de grises. los espectáculo() realmente funcionan las pantallas imagen para ti.

función show ()
La imagen aparece en la pantalla después de procesar y mostrar la misma.

A veces las imágenes no se pueden presentar perfecto, el ruido u otro granularidad. Debe suavizar las señales erróneas e inutilizables. Los filtros pueden ayudarle a lograr ese alisado sin ocultar o modificar las características importantes de la imagen, tales como los bordes. Si usted está buscando un filtro de imagen, se puede limpiar sus imágenes utilizando la siguiente:

  • filtro de mediana: Basado en la idea de que la señal verdadera proviene de una mediana de un barrio de píxeles. Un disco función proporciona el área utilizada para aplicar la mediana, lo que crea una ventana circular en un barrio.
  • Total de eliminación de ruido variación: Basado en la idea de que el ruido es la varianza y este filtro reduce la varianza.
  • filtro de Gauss: Utiliza una función gaussiana para definir los píxeles para suavizar.

El siguiente código le proporciona una idea del efecto de cada filtro tiene en la imagen final, con los efectos que aparecen a continuación:

advertencias de importación

(warnings.filterwarnings"ignorar")

de filtros de importación skimage, restauración

desde el disco importación skimage.morphology

median_filter = filters.rank.median (imagen, el disco (1))

tv_filter = restoration.denoise_tv_chambolle (imagen,

peso = 0,1)

gaussian_filter = filters.gaussian_filter (imagen,

sigma = 0,7)

No se preocupe si aparece una advertencia cuando se está ejecutando el código. Esto ocurre porque el código convierte un número durante el proceso de filtrado y la nueva forma numérica no es tan rico como antes.

fig = plt.figure ()

Video: Sony Vegas, Fundidos y transiciones múltiples en muchas imágenes

para k, (t, F) en enumerate ((( `filtro Median`, median_filter),

( `Filtro de TV`, tv_filter),

( `Filtro gaussiano`, gaussian_filter))):

f = fig.add_subplot (1,3, k + 1)

plt.axis ( `off`)

f.set_title (t)

plt.imshow (F, CMAP = cm.gray)

plt.show ()


Los diferentes filtros para la limpieza de ruido diferente.

Si usted no está trabajando en IPython (o no está utilizando el comando mágico % Matplotlib inline), Cierra la imagen cuando haya terminado de ver que después de filtrar el ruido de la imagen. (El asterisco en la A

  • : entrada que dice que el código todavía está en marcha y no se puede pasar al siguiente paso.) El acto de cierre de la imagen termina el segmento de código. Ahora tiene una imagen en la memoria, y es posible que desee saber más acerca de él. Cuando se ejecuta el código siguiente, se descubre el tipo y el tamaño de la imagen:

    impresión("tipo de datos:% s, forma:% s" %

    (Tipo (imagen), imagen.Forma))

    La salida de esta llamada le indica que el tipo de imagen es una numpy.ndarray y que el tamaño de la imagen es de 90 píxeles por 90 píxeles. La imagen es en realidad una matriz de píxeles que se pueden manipular de varias maneras. Por ejemplo, si desea recortar la imagen, puede utilizar el siguiente código para manipular la matriz de imagen:

    imagen2 = imagen [5: 70,0: 70]

    plt.imshow (image2, CMAP = cm.gray)

    plt.show ()

    los numpy.ndarray en imagen2 es más pequeño que el de imagen, lo que la salida es menor también. El siguiente ejemplo muestra los resultados típicos. El propósito de recortar la imagen es para que sea un tamaño específico. Ambas imágenes deben ser del mismo tamaño para que usted pueda analizarlos. El recorte es una manera de asegurar que las imágenes son del tamaño correcto para el análisis.

    imagen recortada
    Recorte de la imagen hace que sea más pequeño.

    Otro método que se puede utilizar para cambiar el tamaño de la imagen es para cambiar su tamaño. El código siguiente cambia el tamaño de la imagen a un tamaño específico para el análisis:

    imagen3 = cambio de tamaño (imagen2, (30, 30), modo = `cercano`)

    plt.imshow (image3, CMAP = cm.gray)

    impresión("tipo de datos:% s, forma:% s" %

    (Tipo (image3), image3.shape))

    La salida de la impresión() función le dice que la imagen es ahora de 30 píxeles por 30 píxeles de tamaño. Se puede comparar a cualquier imagen con las mismas dimensiones.

    Después de haber limpiado todas las imágenes y los había puesto el tamaño adecuado, es necesario aplanar ellos. Una fila conjunto de datos es siempre una única dimensión, no dos o más dimensiones. La imagen está un conjunto de 30 píxeles por 30 píxeles, por lo que no puede hacer que sea parte de un conjunto de datos. El siguiente código se aplana imagen3, por lo que se convierte en una serie de 900 elementos almacenados en image_row.

    image_row = image3.flatten ()

    impresión("tipo de datos:% s, forma:% s" %

    (Tipo (image_row), image_row.shape))

    Observe que el tipo sigue siendo una numpy.ndarray. Puede agregar esta matriz a un conjunto de datos y luego utilizar el conjunto de datos para fines de análisis. El tamaño es de 900 elementos, como se esperaba.

  • Artículos Relacionados