Computação Gráfica em Python

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Computação Gráfica em Python - Presentation Transcript

    1. Computação Gráfica em Luiz Eduardo Borges http://ark4n.wordpress.com/
    2. Sumário ● Computação gráfica ● Imagens em 2D ● Processamento de imagens ● Modelagem 3D ● Animação Foto alterada com o filtro Cubism do GIMP.
    3. Computação gráfica Definições: ● Área da ciência da computação que estuda a geração e manipulação de conteúdo visual. ● Tecnologias associadas a criação e manipulação de imagens digitais. ● Representação e manipulação de dados visuais usando Cena 3D renderizada no Blender. computadores.
    4. Imagens em 2D (raster) A imagem é composta por pixels (picture elements), com uma cor associada. RGB = (102, 153, 102) Imagem RGB = (102, 153, 204) RGB = (102, 153, 153) Geralmente, as cores dos pixels são representadas em RGB (Red, RGB = (51, 102, 153) Blue, Green).
    5. Processamento de imagem Imagem original em um formato raster (mapa de bits). Algoritmos Imagem processada (filtro GIMPressionist / Mossy, do GIMP).
    6. 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. ● Desenhos simples em 2D. ● Rotinas para tratamento de imagens: equalizar, deformar, inverter e outras.
    7. PIL (exemplo A-I) import Image O módulo Image define uma from ImageFilter import * classe para tratar imagens com fn = 'for.png' vários métodos para modificar im = Image.open(fn) suas características. for i, filter in enumerate((CONTOUR, EMBOSS, FIND_EDGES)): fl = im.filter(filter) fl.thumbnail((512, 512), O módulo ImageFilter provê Image.ANTIALIAS) filtros mais comuns para o fl.save(fn.replace('.png', '%d.png' % i), processamento de imagens. 'PNG') pn = im.point(lambda i: i * 3) pn.thumbnail((512, 512), Image.ANTIALIAS) pn.save(fn.replace('.png', '%d.png' % (i + 1)), 'PNG')
    8. PIL (exemplo A-II) import Image A função open() cria objetos da from ImageFilter import * classe Image a partir de arquivos. Vários formatos são fn = 'for.png' suportados. im = Image.open(fn) for i, filter in enumerate((CONTOUR, Os filtros CONTOUR, EMBOSS, FIND_EDGES)): EMBOSS e FIND_EDGES são fl = im.filter(filter) alguns que estão disponíveis em fl.thumbnail((512, 512), ImageFilter. Image.ANTIALIAS) fl.save(fn.replace('.png', '%d.png' % i), 'PNG') O método filter() aplica o filtro especificado na imagem. pn = im.point(lambda i: i * 3) pn.thumbnail((512, 512), Image.ANTIALIAS) pn.save(fn.replace('.png', '%d.png' % (i + 1)), 'PNG')
    9. PIL (exemplo A-III) import Image from ImageFilter import * fn = 'for.png' O método thumbnail() im = Image.open(fn) redimenciona a imagem. Com antialias, a imagem resultante for i, filter in enumerate((CONTOUR, fica mais suave. EMBOSS, FIND_EDGES)): fl = im.filter(filter) O método save() grava a imagem fl.thumbnail((512, 512), em arquivo no formato Image.ANTIALIAS) especificado. fl.save(fn.replace('.png', '%d.png' % i), 'PNG') O método point() aplica uma pn = im.point(lambda i: i * 3) função a cada ponto da imagem. pn.thumbnail((512, 512), Image.ANTIALIAS) pn.save(fn.replace('.png', '%d.png' % (i + 1)), 'PNG')
    10. PIL (exemplo A-IV) Arquivos de saída CONTOUR EMBOSS FIND_EDGES lamdba i: i *3 for0.png for1.png for2.png for3.png
    11. Imagens em 2D (vetorial) A imagem é gerada a partir de instruções que descrevem os objetos. As instruções são primitivas geométricas, tais como linha, Arquivo SVG gerado no ponto, círculo e outros. Inkscape.
    12. Pylab / Matplotlib Implementa: ● 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 (limitado). ● Vários backends, que permitem exportar para vários formatos populares.
    13. Pylab / Matplotlib (exemplo B-I) A função subplot() divide e from pylab import * seleciona um pedaço da área da ent = arange(0., 20.1, .1) figura (311 => 3 linhas, 1 coluna, na primeira posição). subplot(311) sai = cos(ent) plot(ent, sai, lw=3, c=(.1, .25, .5)) A função plot() desenha uma ylabel('A') linha. subplot(312) sai = sin(ent) Texto para o eixo Y. plot(ent, sai, lw=3, c=(.1, .5, .25)) ylabel('B') subplot(313) sai = cos(ent) * sin(ent) plot(ent, sai, lw=3, c=(.1, .5, .5)) Texto para o eixo X. xlabel('entrada') ylabel('A x B') Salva a imagem em arquivo PNG. savefig('graf.png', dpi=100)
    14. Pylab / Matplotlib (exemplo B-II) from pylab import * Arquivo de saída ent = arange(0., 20.1, .1) subplot(311) A sai = cos(ent) plot(ent, sai, lw=3, c=(.1, .25, .5)) ylabel('A') subplot(312) B sai = sin(ent) plot(ent, sai, lw=3, c=(.1, .5, .25)) ylabel('B') AxB subplot(313) sai = cos(ent) * sin(ent) plot(ent, sai, lw=3, c=(.1, .5, .5)) xlabel('entrada') ylabel('A x B') graf.png savefig('graf.png', dpi=100)
    15. 3D (I) Wireframe Materiais O wireframe representa a Os materiais são aplicados estrutura dos objetos que aos objetos. compõem a cena.
    16. 3D (II) Shading Texturas Sombreamento define como Texturas são imagens raster cada objeto da cena reage que são aplicadas aos a luz. materiais.
    17. 3D (III) Texturas Sombras A imagem é gerada aplicando um algoritmo (como o raytracing), Reflexão que calcula cada ponto da saída.
    18. Animação (técnica keyframe) Keyframe 1 Keyframe 2 001 025 050 Keyframe 3 075 100 125 Os frames entre os keyframes são calculador por interpolação.
    19. VPython Implementa: ● Vários objetos 3D simples (cubo, esfera, cilindro, pirâmide, espiral, ...). ● Recursos para facilitar animações. ● Iluminação, zoom e pan automáticos. ● Controles interativos.
    20. VPython (exemplo C-I) Desenha quatro caixas. from visual import * 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) x, y, z = .1, .1, .1 Desenha a esfera e sombra. b = 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 rate(100) Controla a velocidade da animação.
    21. VPython (exemplo C-II) Janela de saída Caixas Esfera b Sombra s
    22. Blender Implementa: ● 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.
    23. Blender (cena) Fonte de luz Câmera Objetos
    24. Blender (exemplo D-I) import math import Blender Câmera # A cena atual cena = Blender.Scene.GetCurrent() # Muda a camera de lugar camera = Blender.Object.Get()[0] camera.setLocation(9., -9., 7.) # Remove da cena o objeto \"default\" cubo = Blender.Object.Get()[1] cena.objects.unlink(cubo) # Cria uma fonte de luz lampada = Blender.Lamp.New('Lamp') lamp = Blender.Object.New('Lamp') # Muda o lugar da fonte (default = 0.0, 0.0, 0.0) lamp.setLocation(6., -6., 6.) Continua...
    25. Blender (exemplo D-II) # \"Prende\" a fonte de luz na cena Fonte de luz lamp.link(lampada) cena.objects.link(lamp) # Cria um material material1 = Blender.Material.New('newMat1') material1.rgbCol = [.25, .25, .32] material1.setAlpha(1.) # Cria uma textura textura1 = Blender.Texture.Get()[0] textura1.setType('Clouds') textura1.noiseType = 'hard' # Coloca no material material1.setTexture(0, textura1) mtex = material1.getTextures()[0] mtex.col = (.18, .18, .22) Continua...
    26. Blender (exemplo D-III) # Cria o piso mesh = Blender.Mesh.Primitives.Plane(25.) piso = cena.objects.new(mesh,'Mesh') piso.setEuler(0., 0., math.radians(45)) # Coloca o material no piso piso.setMaterials([material1]) piso.colbits = 1 # Cria outro material material2 = Blender.Material.New('newMat2') material2.rgbCol = [.52, .61, .62] material2.setAlpha(1.) # Cria outra textura textura2 = Blender.Texture.Get()[0] Piso textura2.setType('Stucci') textura2.noiseType = 'hard' Continua...
    27. Blender (exemplo D-IV) # Coloca no material material2.setTexture(0, textura2) mtex = material2.getTextures()[0] mtex.col = (.22, .22, .32) # Cria objetos na cena def objeto(local, tam, mat, prim=Blender.Mesh.Primitives.Cube): mesh = prim() obj = cena.objects.new(mesh, 'Mesh') obj.setLocation(*local) obj.size = tam obj.setMaterials(mat) obj.colbits = 1 return obj mat = [material2] Continua...
    28. Blender (exemplo D-V) # Primitiva do cilindro prim = Blender.Mesh.Primitives.Cylinder # Cria colunas no fundo for i in xrange(16): # Topo da primeira fileira local = (i - 8., 8., 2.5) tam = (.25, .25, .1) objeto(local, tam, mat) # Base da primeira fileira local = (i - 8., 8., 0.) objeto(local, tam, mat) # Corpo da primeira fileira Colunas tam = (.2, .2, 2.5) objeto(local, tam, mat, prim) Continua...
    29. Blender (exemplo D-VI) # Topo da segunda fileira Aqueduto local = (-8., i - 8., 2.5) tam = (.25, .25, .1) objeto(local, tam, mat) # Base da segunda fileira local = (-8., i - 8., 0.) objeto(local, tam, mat) # Corpo da segunda fileira tam = .2, .2, 2.5 objeto(local, tam, mat, prim) # Aqueduto local = (-8., i - 8., 3.) tam = (.5, .5, .5) objeto(local, tam, mat) local = (i - 8., 8., 3.) objeto(local, tam, mat) Continua...
    30. Blender (exemplo D-VII) # Cria colunas em cima do piso for i in (-3, 3): for j in range(-3, 4): # Topo das fileiras X local = (i, j, 2.5) tam = (.25, .25, .1) objeto(local, tam, mat) # Topo das fileiras Y local = (j, i, 2.5) objeto(local, tam, mat) # Base das fileiras X local = (i, j, .5) objeto(local, tam, mat) Colunas Continua...
    31. Blender (exemplo D-VIII) # Base das fileiras Y local = (j, i, .5) objeto(local, tam, mat) # Corpo das fileiras X local = (i, j, 0) tam = (.2, .2, 2.5) objeto(local, tam, mat, prim) # Corpo das fileiras Y local = (j, i, 0) objeto(local, tam, mat, prim) # Cria escada for i in xrange(4): Escada local = (0., 0., i / 16.) tam = (2. + (8. - i) / 4.,2. + (8. - i) / 4., .25) objeto(local, tam, mat) Continua...
    32. Blender (exemplo D-IX) # Cria teto for i in xrange(35): local = (0., 0., 2.7 + i / 60.) tam = (3.5 , 3.5 * ( 1. - i / 35.), .1) objeto(local, tam, mat) # Atualiza a cena cena.update() Teto
    33. Blender (exemplo D-X) Cena final
    34. Referências PIL: ● http://www.pythonware.com/products/pil/ Matplotlib: ● http://matplotlib.sourceforge.net/ VPython: ● http://vpython.org/ Blender: ● http://www.blender.org/
    35. Computação Gráfica em Luiz Eduardo Borges http://ark4n.wordpress.com/ Fim

    + gsromagsroma, 2 years ago

    custom

    1681 views, 1 favs, 0 embeds more stats

    Luiz Eduardo Borges

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1681
      • 1681 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 25
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories