Your SlideShare is downloading. ×

Computacao grafica python v2

829

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
829
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
17
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Objetivo ● Apresentar algumas soluções Open Source para Computação Gráfica com o uso de Python. ● Demonstrar as soluções em questão através de exemplos. Foto alterada com ofiltro Cubism do GIMP.
  • 2. Computação Gráfica Definição: ● Área da Ciência da Computação que estuda a geração e manipulação de conteúdo visual.Cena 3D gerada no Blender.
  • 3. Python em Computação Gráfica Blender Por que Python ao invés de outras linguagens dinâmicas? ● Muitos frameworks e bibliotecas disponíveis. ● Várias aplicações, tais GIMP como Blender, GIMP e Inkscape, usam a linguagem para ampliar funcionalidades e/ouInkscape automatizar rotinas.
  • 4. Formas de representação de imagem 2DMapa de bits Vetorial
  • 5. Mapas de bits (Raster) A imagem é composta por RGB = (102, 153, 102) pixels (picture elements), com uma cor associada. RGB = (102, 153, 204)RGB = (102, 153, 153) Geralmente, as cores dos pixels são representadas em RGB (Red, Green, RGB = (51, 102, 153) Blue), cada cor em 256 (8 bits) tons.
  • 6. Canais RedOriginal Green Blue Imagens resultantes obtidas isolando cada umas das cores que compõem a imagem original.
  • 7. Imagens Vetoriais A imagem é gerada a partir de instruções que descrevem os objetos.As instruções são primitivas geométricas, Arquivo SVG gerado tais como linha, ponto, círculo e outros. no Inkscape.
  • 8. Processamento de Imagem Imagem original em umformato raster (mapa de bits). Algoritmos Imagem processada (filtro GIMPressionist / Mossy, do GIMP).
  • 9. Processamento de Imagem (Exemplos)Original Contour Emboss Find edges Alguns dos filtros disponíveis na Python Imaging Library (PIL).
  • 10. PIL (Python Imaging Library)Implementa:● Ferramentas para cortar, redimensionar e mesclar imagens.● Algoritmos de conversão.● Filtros, tais como suavizar e detectar bordas.● Ajustes, incluindo brilho e contraste.● Operações com paletas de cores.● Ferramentas básicas de desenho (linha, arco e outras).● Rotinas para tratamento de imagens: equalizar, deformar, inverter e outras.
  • 11. PIL (Visão Geral) Objeto da classe ImageO módulo Image define Um objeto da classe uma classe básica que Image tem atributosserve de abstração para como tamanho (size), a manipulação de formato (format) e imagens. modo (mode).Os métodos fornecem Os outros módulos rotinas de provêm recursos processamento de diversos, tais como imagens, incluindo filtros (ImageFilter), rotacionar (rotate) e fontes (ImageFonts) eredimensionar (resize). desenho (ImageDraw).
  • 12. PIL (Exemplo I/II)import Image O módulo Image define a classe paraimport ImageOps tratar imagens com vários métodosimport ImageFilter para modificar suas características. A função open() cria objetos da classeimg = Image.open(tr01.jpg) Image a partir de arquivos. Vários formatos são suportados.img = ImageOps.autocontrast(img)img = ImageOps.equalize(img) O módulo ImageOps implementa várias rotinas comuns de processamento.img = img.filter(ImageFilter.SMOOTH) O método filter() aplica o filtro especificado na imagem.img.thumbnail((512, 512), Image.ANTIALIAS) O método thumbnail() redimensiona aimg = ImageOps.expand(img, imagem. border=2, fill=1) O método save() grava a imagem emimg.save(tr02.png, PNG) arquivo no formato especificado.
  • 13. PIL (Exemplo II/II)Original Saída Programa Versão reduzida, suavizada, com borda e cores modificadas.
  • 14. GIMP (GNU Image Manipulation Program) Implementa: ● Ferramentas para processamento e edição de imagens. ● Algoritmos de conversão. ● Manipulação de imagens compostas de múltiplas camadas. ● Uma API (Python-Fu) que permite a criação de plug ins usando Python.
  • 15. GIMP (Visão Geral) Cada imagem pode ter uma ou mais camadas (layers). Cada camada pode Cada camada ou Caixa de ter um ou mais canal pode serFerramentas. canais (channels). editado (drawable).
  • 16. GIMP (Plug in)O módulo gimpfu define as funções e tipos necessários para o Python possa se comunicar com o GIMP. A função que será utilizada para processar a imagem, usando a API do GIMP.A função register() cadastra a função de processamento na Procedural Database (PDB) do GIMP. Executa o plug in.
  • 17. GIMP (Função)A função recebe como argumentos a imagem (image), a camada corrente em edição (drawable) e outros que forem definidos no registro da função. Inicio da transação através da função pdb.gimp_image_undo_group_start(). A transação pode ser desfeita posteriormente através de undo. Altera a imagem ou a camada através das funções definidas na API do GIMP. Encerra a transação através da função pdb.gimp_image_undo_group_end().
  • 18. GIMP (Exemplo I/IV)from gimpfu import * Importa a interface com GIMP.def stonify(img, drawable): pdb.gimp_image_undo_group_start(img) Inicia a transação para undo. pdb.script_fu_lava(img, drawable, 10, 10, 7, Cria uma camada com lava. German flag smooth, 1, 1, 0) lava = img.layers[0] Cria uma camada de ruído. w, h = img.width, img.height rock = gimp.Layer(img, Rock, w, h, RGB_IMAGE, 100, MULTIPLY_MODE) pdb.gimp_image_add_layer(img, rock, 0) pdb.plug_in_solid_noise(img, rock, 0, 0, 0, 1, 4, 4) pdb.plug_in_bump_map(img, rock, lava, 135, 45, 15, 0, 0, 0, 0, 1, 0, 0) pdb.plug_in_bump_map(img, rock, drawable, 135, 45, 30, 0, 0, 0, 0, 1, 0, 0) Aplica revelo nas camadas. lava.visible = 0 Continua...
  • 19. GIMP (Exemplo II/IV) img.flatten() pdb.gimp_brightness_contrast (img.layers[0], 30, 10) pdb.gimp_image_undo_group_end(img) Termina a transação.register( Registra a função na PDB. Stonify, Carve image in stone, Carve image in stone with colors, Luiz Eduardo Borges, Luiz Eduardo Borges, 2008, <Image>/Python-Fu/Stonify, *, [], [], stonify) Executa o plug in.main() Continua...
  • 20. GIMP (Exemplo III/IV)Original Saída Continua...
  • 21. GIMP (Exemplo IV/IV) Relevo RelevoRuído CombinaLava
  • 22. Pylab / MatplotlibImplementa:● Pylab: API destinada ao uso interativo.● Matplotib: API orientada a objetos.● Vários gráficos 2D mais usados: linhas, barras, pizza, dispersão e outros.● Suporte a gráficos 3D (Beta).● Vários backends, que permitem exportar para vários formatos populares.● Suporte a extensões, como o Basemap.
  • 23. Pylab / Matplotlib (Visão Geral) Canvas SubplotEixo Y Eixo X
  • 24. Pylab / Matplotlib (Exemplo I/II)from pylab import * A função ogrid() cria um arranjo de arranjos com os pontos da grade.x, y = ogrid[-1:1:.01, -1:1:.01] Uma função matemática.z = 6*x**2 + 6*y**2 + cos(16*sqrt(x**2 + y**2) + 3*arctan2(x,y))ext = [-1, 1, -1, 1] A função imshow() plota gradientesimshow(z, origin=lower, extent=ext) de cores que variam com a saídacontour(z, origin=lower, extent=ext) função passada como parâmetro. Já contour() plota apenas os contornosxlabel(x) das áreas de cor.ylabel(y)title(z = 6*x**2 + 6*y**2 + cos(16*sqrt(x**2 + y**2) + 3*arctan2(x,y)))savefig(graf.png) Salva o arquivo como PNG.
  • 25. Pylab / Matplotlib (Exemplo II/II)Saída
  • 26. Pylab / Matplotlib / Basemap (Exemplo I/II)from mpl_toolkits.basemap import Basemap Carrega o basemap.from matplotlib import pyplotfrom numpy import arange Cria um mapa visto da latitude -20 e longitude -50.mapa = Basemap(projection=ortho, lat_0=-20, lon_0=-50, resolution=l, area_thresh=1e3)mapa.bluemarble()mapa.drawcoastlines(color=#777799)mapa.drawcountries(color=#ccccee)mapa.drawmapboundary()mapa.drawmeridians(arange(0,360,30), color=#ccccee)mapa.drawparallels(arange(-90,90,30), color=#ccccee)x,y = mapa([-43.1],[-22.6]) Define a aparência domapa.plot(x, y,w^) mapa.pyplot.text(x[0]+2e5, y[0]-6e5, RiondenJaneiro, color=#eeeecc)pyplot.savefig(mapa.png) Marca um ponto no mapa.
  • 27. Pylab / Matplotlib / Basemap (Exemplo II/II)Saída Paralelos Fronteiras Meridianos
  • 28. 3D (I/III) Wireframe MateriaisO wireframe representa Os materiais sãoa estrutura dos objetos aplicados aos objetos. que compõem a cena.
  • 29. 3D (II/III) Shading TexturasSombreamento define Texturas são imagens como cada objeto da raster que são aplicadas cena reage a luz. aos materiais.
  • 30. 3D (III/III) Texturas SombrasA imagem é gerada aplicando um algoritmo (como oraytracing), que calcula cada Reflexão ponto da saída.
  • 31. Animação 3D (Técnica Keyframe)Keyframe 1 Keyframe 2001 025 050 Keyframe 3075 100 125 Os frames entre os keyframessão calculados por interpolação.
  • 32. VPythonImplementa:● Vários objetos 3D simples (cubo, esfera, cilindro, pirâmide, espiral e outros).● Recursos para facilitar animações.● Iluminação, zoom e pan automáticos.● Controles interativos.
  • 33. VPython (Exemplo I/II)from visual import * Desenha quatro caixas.box(pos=(12, 0, 0) , length=1 , height=21 , width=29)box(pos=(-12, 0, 0) , length=1 , height=21 , width=29)box(pos=(0, 10, 0) , length=25 , height= 1 , width=29)box(pos=(0, -10, 0) , length=25 , height=1 , width=29) Desenha a esfera e sombra.x, y, z = .1, .1, .1b = sphere(pos=(3, 5, 7), radius=1.2)s = cylinder(pos=(3, -10, 7), axis=(0, .5, 0), color=color.black)while True: Move a esfera e a sombra. b.pos += (x, y, z) s.x, s.z = b.x, b.z Muda a direção da esfera e da if abs(b.x) > 10: x = -x sombra. if abs(b.y) > 8: y = -y if abs(b.z) > 12: z = -z Controla a velocidade da animação. Rate(100)
  • 34. VPython (Exemplo II/II)Janela de saída Caixas Esfera b Sombra s
  • 35. BlenderImplementa:● Modelagem 3D avançada, com materiais, texturas, iluminação, extrusão, entre outros.● Recursos de animação sofisticados.● Um game engine poderoso.● Uma API que permite uso do Python.
  • 36. Blender (Visão Geral) Cena Fonte de luz CâmeraObjeto Material Textura
  • 37. Blender (Construindo uma Cena)
  • 38. Blender (Exemplo I/VI)Estrutura de arame
  • 39. Blender (Exemplo II/VI)import math Câmeraimport Blender# A cena atualcena = Blender.Scene.GetCurrent()# Muda o lugar da "camera"camera = Blender.Object.Get()[0]camera.setLocation(9.5, -9.5, 6) Objeto padrãoprint dir(camera)# Remove da cena o objeto "default"cubo = Blender.Object.Get()[1]cena.objects.unlink(cubo)# Muda o lugar da fonte de luzlamp = Blender.Object.Get()[-1]lamp.setLocation(2.5, -1.5, 1) Continua...
  • 40. Blender (Exemplo III/VI)def obj(mat, tam=(1, 1, 1), pos=None, Desenha um objeto na cena. prim=Blender.Mesh.Primitives.Cube): mesh = prim() obj = cena.objects.new(mesh, Mesh) obj.size = tam obj.colbits = 1 obj.setMaterials(mat) if pos: obj.setLocation(*pos) return objmater = Blender.Material.New(newMat1)mater.rgbCol = (.14, .14, .14) Cria um novo material e definemater.setAlpha(1) seus atributos.mater.setMode(RayMirr)mater.setRayMirr(.3)mater.setFresnelMirr(2)mat = [mater] Continua...
  • 41. Blender (Exemplo IV/VI)# Cria uma textura Materialtextur = Blender.Texture.Get()[0]textur.setType(DistortedNoise)# Coloca no materialmater.setTexture(0, textur)mtex = mater.getTextures()[0]mtex.col = (.28, .28, .28) Eixo# Cria eixoprim = Blender.Mesh.Primitives.Cylinderobj(mat, (.2, .2, 4), pos=(0, 0, -1), prim=prim) Continua...
  • 42. Blender (Exemplo V/VI)# Cria base Basepos = (0, 0, 0)obj(mat, (1, 1, .6), pos=pos, prim=prim)base = obj(mat, (5, 5, .3), pos=pos, prim=prim)# Cria dentesfor ang in xrange(0, 180, 15): dentes = obj(mat, (5.5, .25, .2), pos=pos) Dentes dentes.setEuler(0, 0, math.radians(ang))# Atualiza a cenacena.update() Continua...
  • 43. Blender (Exemplo VI/VI)Objeto renderizado
  • 44. ReferênciasPIL:● http://www.pythonware.com/products/pil/GIMP:● http://www.gimp.org/Matplotlib:● http://matplotlib.sourceforge.net/VPython:● http://vpython.org/Blender:● http://www.blender.org/
  • 45. Fim Duvidas?Blog: http://ark4n.wordpress.com/

×