ICE-B 11 - Imagens e Gráficos simples Ludwig Krippahl
Imagens Resumo Representação de imagens num ecrã. Pixels. Sistema RGB. Criação e manipulação de imagens com Numpy e Scikit-Image Gráficos simples com Matplotlib 1
Imagens Representação de imagens 2
Imagens Representação de imagens no computador Ecrã: matriz de pixels picture elements Resolução: Colunas x Linhas E.g. 1024x768 (Mas matriz Linhas x Colunas) 3
Imagens Representação de imagens no computador Imagem: Wikipedia, ed g2s, CC BY-SA 3.0 4
Imagens Pixels RGB, mistura de red+green+blue Imagens: Pengo (CC BY-SA 3.0) e Pko (Public Domain), de Wikimedia Commons 5
Imagens Pixels RGB, mistura de red+green+blue Representação matricial das imagens (matriz 3D): Linhas x Colunas x 3 cores No ficheiro o formato é mais complexo: JPG: Compressão com perdas PNG: Compressão sem perdas GIF: Compressão com perda na cor (tabela simplificada) BMP: Sem compressão (mas ficheiro grande) Mas podemos ler e gravar ficheiros com uma biblioteca adequada Scikit-Image (skimage): http://scikit-image.org/ Pillow, Python Image Library (PIL): https://pillow.readthedocs.io 6
Gerar Imagens Exemplo: gerar imagens criando as matrizes Matriz para imagem de 500x500 pixels, com 3 canais de cores Este formato assume valores entre 0 e 1 para cada cor Cor R, G, B, função da distância a um canto diferente from skimage.io import imsave import numpy as np img = np.zeros( (500,500,3)) diag = (img.shape[0]**2+img.shape[1]**2)**0.5 for r in range(img.shape[0]): for c in range(img.shape[1]): img[r,c,0] = (r**2+c**2)**0.5/diag img[r,c,1] = ((r-img.shape[0])**2+c**2)**0.5/diag img[r,c,2] = (r**2+(c-img.shape[1])**2)**0.5/diag imsave('teste.png',img) 7
Gerar Imagens Exemplo: gerar imagens criando as matrizes Cor R, G, B, função da distância a um canto diferente R: distância a (0,0) G: distância a (499,0) B: distância a (0,499) 8
Gerar Imagens Exemplo: gerar imagens criando as matrizes Cor R, G, B, função da distância a um canto diferente R: distância a (0,0) G: distância a (499,0) B: distância a (0,499) 9
Gerar Imagens Exemplo: gerar imagens criando as matrizes Cor R, G, B, função da distância a um canto diferente R: distância a (0,0) G: distância a (499,0) B: distância a (0,499) 10
Gerar Imagens Exemplo: gerar imagens criando as matrizes Cor R, G, B, função da distância a um canto diferente R: distância a (0,0) G: distância a (499,0) B: distância a (0,499) 11
Manipular Imagens Exemplo: manipular imagens alterando a cor Aproveitamos que os clubes mais famosos são R, G, B Imagem: European Pressphoto Agency 12
Manipular Imagens Exemplo: manipular imagens alterando a cor Vamos trocar o canal R por B nos pixels com mais vermelho from skimage.io import imsave, imread from skimage import img_as_float import numpy as np im = img_as_float(imread('l11-adeptos_red.png')) red_dominate = im[:,:,0]-im[:,:,1]+im[:,:,0]-im[:,:,2] red_mask = red_dominate>1.2 red_pixels = im[red_mask] blue_channel = red_pixels[:,2].copy() red_pixels[:,2] = red_pixels[:,0].copy() red_pixels[:,0] = blue_channel im[red_mask]=red_pixels imsave('l11-adeptos_blue.png',im) 13
Manipular Imagens Exemplo: manipular imagens alterando a cor Vamos trocar o canal R por B nos pixels com mais vermelho 14
Manipular Imagens Exemplo: manipular imagens alterando a cor Vamos trocar o canal R por G nos pixels com mais vermelho from skimage.io import imsave, imread from skimage import img_as_float import numpy as np im = img_as_float(imread('l11-adeptos_red.png')) red_dominate = im[:,:,0]-im[:,:,1]+im[:,:,0]-im[:,:,2] red_mask = red_dominate>1.2 red_pixels = im[red_mask] green_channel = red_pixels[:,1].copy() red_pixels[:,1] = red_pixels[:,0].copy() red_pixels[:,0] = green_channel im[red_mask]=red_pixels imsave('l11-adeptos_green.png',im) 15
Manipular Imagens Exemplo: manipular imagens alterando a cor Não é bem este o tom... demasiado G. Vamos reduzir 16
Manipular Imagens Exemplo: manipular imagens alterando a cor Vamos trocar o canal e dividir por 2 para ficar menos saturado from skimage.io import imsave, imread from skimage import img_as_float import numpy as np im = img_as_float(imread('l11-adeptos_red.png')) red_dominate = im[:,:,0]-im[:,:,1]+im[:,:,0]-im[:,:,2] red_mask = red_dominate>1.2 red_pixels = im[red_mask] green_channel = red_pixels[:,1].copy() red_pixels[:,1] = red_pixels[:,0].copy()/2 red_pixels[:,0] = green_channel im[red_mask]=red_pixels imsave('l11-adeptos_green.png',im) 17
Manipular Imagens Exemplo: manipular imagens alterando a cor Assim já fica um verde mais escuro 18
Animação Exemplo: criar uma animação from skimage.io import imsave, imread import numpy as np def save_circle(step): img = np.zeros( (500,500,3)) offset = np.pi/200*step*5*7*13 for r in range(img.shape[0]): for c in range(img.shape[1]): dist_center = ((r-img.shape[0]/2)**2+(c-img.shape[1]/2)**2)**0.5 img[r,c,0] = np.sin(dist_center/5+offset)/2+0.5 img[r,c,1] = np.sin(dist_center/7+offset)/2+0.5 img[r,c,2] = np.sin(dist_center/13+offset)/2+0.5 imsave(str(step).zfill(3)+'.png',img) for i in range(200): save_circle(i) Depois juntar as 200 imagens num vídeo Usar outro software, como ffmpeg 19
Animação Exemplo: criar uma animação 20
Imagens Processar imagens em Python Não faz parte da avaliação Mas pode ser útil saber um pouco sobre estas bibliotecas Criar thumbnails Ajustar contraste ou brilho Converter formato ou resolução Mais informação: http://scikit-image.org/ 21
Aplicações Electroforese de complexos AuNP-proteína DQ, Ricardo Franco, David Peitinho 22
Aplicações Microscopia de fluorescência de bactérias ITQB, Mariana Gomes de Pinho, Bruno Saraiva 23
Aplicações Microscopia de fluorescência de bactérias ITQB, Mariana Gomes de Pinho, Bruno Saraiva 24
Imagens Gráficos simples com Matplotlib 25
Tuberculose Gráfico de incidência de TB em Portugal Ficheiro com número de casos por 100,000 habitantes Dados da Organização Mundial de Saúde Ano Incidência estimada Limite inferior Limite superior 1990 91 38 166 1991 88 37 161 1992 85 36 155 1993 82 35 150 1994 79 34 144 1995 76 33 137... 2008 31 15 55 2009 30 14 52 2010 29 13 50 2011 28 13 49 2012 29 13 50 2013 30 13 52 26
Tuberculose Gráfico de incidência de TB em Portugal Carregar os dados Criar a figura e desenhar as linhas (plot) A consola ipython mostra os gráficos import numpy as np import matplotlib.pyplot as plt data = np.loadtxt('tuberculose.txt') plt.figure(figsize=(10,7)) plt.plot(data[:,0], data[:,1], 'k-') plt.plot(data[:,0], data[:,2], 'g-') plt.plot(data[:,0], data[:,3], 'r-') plt.title('tb Infection load for Portugal') plt.show() 27
Tuberculose Gráfico de incidência de TB em Portugal Carregar os dados Criar a figura e desenhar as linhas (plot) A consola ipython mostra os gráficos import numpy as np import matplotlib.pyplot as plt data = np.loadtxt('tuberculose.txt') plt.figure(figsize=(10,7)) plt.plot(data[:,0], data[:,1], 'k-') plt.plot(data[:,0], data[:,2], 'g-') plt.plot(data[:,0], data[:,3], 'r-') plt.title('tb Infection load for Portugal') plt.show() 28
Tuberculose Gráfico de incidência de TB em Portugal Carregar os dados Criar a figura e desenhar as linhas (plot) Em alternativa, podemos gravar import numpy as np import matplotlib.pyplot as plt data = np.loadtxt('tuberculose.txt') plt.figure(figsize=(10,7)) plt.plot(data[:,0], data[:,1], 'k-') plt.plot(data[:,0], data[:,2], 'g-') plt.plot(data[:,0], data[:,3], 'r-') plt.title('tb Infection load for Portugal') plt.savefig('l11-tb_plot.png',bbox_inches="tight",dpi=200) plt.close() 29
Tuberculose Gráfico de incidência de TB em Portugal Imagem gravada: 30
Tuberculose Gráfico de incidência de TB em Portugal plt.plot(data[:,0], data[:,1], 'k--') plt.plot(data[:,0], data[:,2], 'gx') plt.plot(data[:,0], data[:,3], 'ro') 31
Tuberculose Gráfico de incidência de TB em Portugal plt.plot(data[:,0], data[:,1], 'k-',linewidth=4) plt.plot(data[:,0], data[:,2], 'g-',linewidth=2) plt.plot(data[:,0], data[:,3], 'r-',linewidth=2) 32
Tuberculose Gráfico de incidência de TB em Portugal plt.style.use('seaborn') 33
Tuberculose Gráfico de incidência de TB em Portugal plt.bar(data[:,0]-0.2, data[:,1],0.3) plt.bar(data[:,0], data[:,2],0.3) plt.bar(data[:,0]+0.2, data[:,3],0.3) 34
Gráficos simples Função plot Argumentos: valores de x, valores de y Opcional formatação e outras opções https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html Função bar Argumentos: valores de x, alturas, largura Nota: valores de x correspondem ao centro da barra Outras opções (cores, barras de erro, etc) https://matplotlib.org/api/_as_gen/matplotlib.pyplot.bar.html 35
Imagens Resumo 36
Imagens Resumo Extra: Como são representadas imagens no computador (pixels, RGB) Criação e manipulação de imagens com Scikit-Image Importante para ICE: Plots simples com Matplotlib, plot e bar Formatação básica do plot Leitura adicional: Recomendada: Capítulo 11 dos apontamentos Opcional: Matplotlib: https://matplotlib.org/ Scikit-Image: http://scikit-image.org/ 37