Trabalhando com um conjunto de imagens em aprendizado de máquina

À primeira vista, quando se aproxima o aprendizado de máquina, arquivos de imagem aparecem dados como não estruturados composta de uma série de bits. O arquivo não separar os bits do outro de forma alguma. Você não pode simplesmente olhar para o arquivo e ver qualquer estrutura de imagem, porque não existe nenhum. Tal como acontece com outros formatos de arquivo, arquivos de imagem dependem do usuário para saber como interpretar os dados.

Por exemplo, cada pixel de um arquivo de imagem poderia consistir em três campos de 32 bits. Sabendo que cada campo é de 32 bits é com você. Um cabeçalho no início do arquivo pode fornecer pistas sobre como interpretar o arquivo, mas, mesmo assim, é até você para saber como interagir com o arquivo usando o pacote certo ou biblioteca.

Você usa Scikit-imagem aqui. É um pacote Python dedicada ao processamento de imagens, pegando-os a partir de arquivos, e manuseá-los usando matrizes Numpy. Usando Scikit-imagem, você pode obter todas as habilidades necessárias para carregar e transformar imagens para qualquer algoritmo de aprendizado de máquina. Este pacote também ajuda a carregar todas as imagens necessárias, redimensionar ou cortar-los, e alise-os em um vetor de características, a fim de transformá-los para fins de aprendizagem.

Scikit-imagem não é o único pacote que pode ajudá-lo a lidar com imagens em Python. Há também outros pacotes, como o seguinte:

  • scipy.ndimage: Permite operar em imagens multidimensionais
  • Mahotas: A biblioteca de processamento rápido C ++ com base
  • OpenCV: Um pacote poderoso que se especializa em visão computacional
  • ITK: Projetado para trabalhar em imagens 3D para fins médicos

O exemplo aqui mostra como trabalhar com uma imagem como um arquivo não-estruturados. o imagem de exemplo é uma oferta de domínio público. Para trabalhar com imagens, você precisa acessar o biblioteca Scikit-image, que é uma coleção algoritmo usado para processamento de imagens. Confira um tutorial para esta biblioteca. A primeira tarefa é para exibir a imagem na tela usando o seguinte código.

de imread importação skimage.io

de skimage.transform redimensionamento de importação

de pyplot matplotlib importação como plt

matplotlib.cm importação como centímetros

% Matplotlib embutido

Video: Como converter imagens JPG, GIF, PNG, BMP e etc para matriz de bordados computadorizado

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

"wikipedia / commons / 7 / 7d / Dog_face.jpg")

image = imread (example_file, as_grey = True)

plt.imshow (imagem, cmap = cm.gray)

plt.show ()

O código começa com a importação de um número de bibliotecas. Em seguida, cria uma cadeia que aponta para o exemplo de arquivos online e coloca-lo em example_file. Essa seqüência é parte do imread () chamada de método, juntamente com as_grey, que é definido como Verdade. o as_grey argumento diz Python para transformar qualquer imagens coloridas em tons de cinza. Quaisquer imagens que já estão em escala de cinza permanecer assim.

Depois de ter uma imagem carregada, você torná-lo. o imshow () função executa o processamento e usa um mapa de cores em tons de cinza. o exposição() função na verdade exibe imagem para voce.

função de apresentação ()
A imagem aparece na tela depois de render e mostrá-lo.

Às vezes, as imagens não são perfeito- podem apresentar ruído ou outro granularidade. Você deve suavizar os sinais errados e inutilizável. Os filtros podem ajudá-lo a atingir esse alisamento sem esconder ou modificar características importantes da imagem, tais como as bordas. Se você está procurando um filtro de imagem, você pode limpar suas imagens usando o seguinte:

  • filtro mediano: Com base na idéia de que o verdadeiro sinal vem de uma média de um bairro de pixels. Um disco função fornece a área usada para aplicar a mediana, o que cria uma janela circular em um bairro.
  • Total de denoising variação: Com base na idéia de que o ruído é variância e este filtro reduz a variância.
  • filtro Gaussian: Usa uma função de Gauss para definir os pixels para suavizar.

O código a seguir fornece uma idéia do efeito cada filtro tem na imagem final, com os efeitos mostrado abaixo:

avisos de importação

warnings.filterwarnings ("ignorar")

a partir de filtros de importação skimage, restauração

a partir do disco de importação skimage.morphology

median_filter = filters.rank.median (imagem, o disco (1))

tv_filter = restoration.denoise_tv_chambolle (imagem,

peso = 0,1)

gaussian_filter = filters.gaussian_filter (imagem,



sigma = 0,7)

Não se preocupe se um aviso aparece quando você está executando o código. Isso acontece porque o código converte um número durante o processo de filtragem e a nova forma numérica não é tão rico quanto antes.

Fig = plt.figure ()

para k, (t, M) em enumerar ((( `filtro Mediana`, median_filter),

( `Filtro de TV`, tv_filter),

( `Filtro gaussiano`, gaussian_filter))):

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

Video: Train an Image Classifier with TensorFlow for Poets - Machine Learning Recipes #6

plt.axis ( `off`)

f.set_title (t)

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

plt.show ()


Filtros diferentes para diferentes limpeza ruído.

Se você não estiver trabalhando em IPython (ou você não estiver usando o comando mágica % Matplotlib embutido), Basta fechar a imagem quando você terminar de vê-lo depois de filtrar o ruído da imagem. (O asterisco na In

  • : entrada diz-lhe que o código ainda está em execução e você não pode passar para a próxima etapa.) O ato de fechar a imagem termina o segmento de código. Agora você tem uma imagem na memória, e você pode querer saber mais sobre ele. Quando você executa o código a seguir, você descobre o tipo e tamanho da imagem:

    impressão("Tipo de dados:% s, forma:% s" %

    (Tipo (imagem), image.shape))

    A saída do presente convite diz que o tipo de imagem é um numpy.ndarray e que o tamanho da imagem é de 90 pixels por 90 pixels. A imagem é na verdade um conjunto de pixels que você pode manipular de várias maneiras. Por exemplo, se você quiser cortar a imagem, você pode usar o seguinte código para manipular a matriz da imagem:

    imagem2 = imagem [5: 70,0: 70]

    plt.imshow (imagem2, cmap = cm.gray)

    plt.show ()

    o numpy.ndarray em image2 é menor do que aquele em imagem, de modo que a saída é menor, bem. O exemplo a seguir mostra os resultados típicos. O objetivo do corte da imagem é torná-lo um tamanho específico. Ambas as imagens devem ser do mesmo tamanho para que você possa analisá-los. O corte é uma forma de garantir que as imagens são o tamanho correto para a análise.

    imagem recortada
    Cortar a imagem torna menor.

    Outro método que você pode usar para mudar o tamanho da imagem é para redimensioná-la. O código a seguir redimensiona a imagem para um tamanho específico para análise:

    image3 = redimensionamento (image2, (30, 30), mode = `mais próximo`)

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

    impressão("Tipo de dados:% s, forma:% s" %

    (Tipo (image3), image3.shape))

    A saída a partir da impressão() função diz-lhe que a imagem é agora de 30 pixels por 30 pixels de tamanho. Você pode compará-lo a qualquer imagem com as mesmas dimensões.

    Video: Como converter PDF para imagens JPEG

    Depois de ter limpado todas as imagens e os fez o tamanho certo, o que você precisa para achatar-los. Uma fileira de conjunto de dados é sempre uma dimensão única, não dois ou mais dimensões. A imagem é atualmente uma série de 30 pixels por 30 pixels, então você não pode fazer parte de um conjunto de dados. O código a seguir achata image3, assim, torna-se uma matriz de 900 elementos armazenados em image_row.

    image_row = image3.flatten ()

    impressão("Tipo de dados:% s, forma:% s" %

    (Tipo (image_row), image_row.shape))

    Note que o tipo ainda um é numpy.ndarray. Você pode adicionar essa matriz para um conjunto de dados e, em seguida, usar o conjunto de dados para fins de análise. O tamanho é de 900 elementos, como o previsto.


  • Publicações relacionadas