PowerPoint - DCA

Propaganda
Ambiente de suporte ao ensino de
processamento de imagens usando a
linguagem Python
Alexandre Gonçalves Silva
Roberto de Alencar Lotufo
Rubens Campos Machado
Universidade Estadual de Campinas
SBIE 2002
Sumário
• Introdução
• Modelo de programação
 Representação de imagens
 Manipulação matricial
• Ambiente de desenvolvimento
 A linguagem Python
 O sistema Adesso
• Resultados
 Caixa de ferramentas
 Corretor automático
• Conclusões
SBIE 2002
2
Introdução
(1)
Almeida 96
• Processamento de imagens
 Biologia, astronomia, engenharia, geologia, artes, ...
• Ferramentas apropriadas existentes
 Khoros, MATLAB, ImageMagik, PhotoPixJ(1) , ...
• A linguagem Python e seu pacote numérico
• O sistema Adesso
• Motivação
 Agregar o melhor das plataformas
• Objetivos
 Desenvolvimento de um ambiente aberto, multiplataforma,
de fácil aprendizagem, para ensino e pesquisa
SBIE 2002
3
Modelo de Programação (1)
• Níveis de programação
Linguagem de
Sistema
Linguagem
Visual
• Representação de imagens
SBIE 2002
4
Modelo de Programação (2)
• Varredura explícita e implícita
• Exemplo 1: cálculo do erro médio quadrático
1
MSE 
Nh Nw
Varredura explícita
   f (i, j, k )  f (i, j, k ) 
N h 1N w 1 2
i 0 j 0 k 0
2
1
2
Varredura implícita
MSE = 0
Nh = altura(f1)
Nh = altura(f1)
Nw = largura(f1)
Nw = largura(f1)
MSE = (lineariza(f1) – lineariza(f2
Para todo i entre 0 e Nh-1 faça:
MSE = soma(MSE) / (Nh*Nw)
Imagem colorida 256x256
Tempo (s)
))2
MATLAB (implícita)
0,038
C
0,051
Python (implícita)
0,136
Java
0,198
Python (explícita)
4,473
Para todo j entre 0 e Nw-1 faça:
Para todo k entre 0 e 2 faça:
MSE = MSE + (f1[i,j,k] – f2[i,j,k])2
MATLAB (explícita)
MSE = MSE / (Nh*Nw)
SBIE 2002
14,628
5
Modelo de Programação (3)
• Exemplo 2: sintetizar uma imagem em forma de
xadrez
z(i, j )  x(i, j )  y(i, j )%2







1
2

N
1 2  M 
2  2
1 2  M 

%2 
  
    
N  N
1 2  M 
1

1
SBIE 2002
0 1 0 1 
1 0 1 0 
0 1 0 1 



 
6
Ambiente de desenvolvimento (1)
• Programação em Python





Interpretada
Genérica
Multiplataforma
Orientada a objetos
Sintaxe
–
–
–
–
Rápida prototipação (RAD)
Não declarativa e com tipagem dinâmica
Blocos pela identação
Flexibilidade de argumentos
 Código aberto
SBIE 2002
7
Ambiente de desenvolvimento (2)
• Programação em Python (continuação...)




Mecanismo de erros e exceções
Eficiente reutilização de código (módulos)
Coleta de lixo automática
Recursos avançados de manipulação de textos, listas e
dicionários
 Facilmente estendível (API)
SBIE 2002
8
Ambiente de desenvolvimento (3)
• Pacote numérico (Numerical Python)
 Extensão de código aberto
 Projetado sob influência de plataformas como o MATLAB
 Implementação de arrays multidimensionais
– Processar volume de dados (números) tão eficientemente
quanto linguagens de sistema
 Módulos: Numeric, FFT, LinearAlgebra, Mlab,
RandomArray, ...
 Por sua vez, facilmente estendível
 Exemplo:
>>> import Numeric
>>> Numeric.zeros((3,5))
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
SBIE 2002
9
Ambiente de desenvolvimento (4)
• Interface
gráfica
 Tkinter
 Gnuplot /
Gnuplot.py
• Formatos de
arquivo
 PIL
SBIE 2002
10
Ambiente de desenvolvimento (5)
• O sistema Adesso




Parceria com o CenPRA
Baseado em componentes reutilizáveis
Base de dados em XML e ferramentas de transformação
Geração de código, documentação e empacotamento
 .c
 .c (API)
 Makefile
Base de Dados
XML
 Linguagem C
 Python
 MATLAB
Processador de
Estilos
 .py
 .m
 LaTeX
 HTML
Folhas de
Estilo
SBIE 2002
11
Ambiente de desenvolvimento (6)
• Transformações implementadas no Adesso para
Python
 Geração de código
–
–
–
–
Geração de funções
Geração de demonstrações
Geração de testsuites
Flexibilidade de argumentos
 Geração de wrapper
 Geração de setup
 Geração de documentação ilustrada (descrições, saídas
numéricas, gráficos, imagens e equações)
– DocBook
– LaTeX
– HTML
SBIE 2002
12
Ambiente de desenvolvimento (7)
• Exemplo de transformação:
<AdFunction lang="python matlab">
<Documentation>
<Descr name="Description">Generate a cosenosoid image of size s with
amplitude 1, period T, phase phi and wave direction of theta. The
output image is a double array.</Descr>
<Descr name="Examples">
<PYcode>import Numeric
f = <Self/>([128,256], 100, Numeric.pi/4, 0)
iashow(ianormalize(f, [0,255]))</PYcode>
</Descr>
<Descr name="Equation">
<Eq>f(x,y) & = & sin( 2\pi (f_x x + f_y y) + \phi) \\
...
</Eq>
</Descr>
</Documentation>
<Return name="f" type="mmIMAGE" output="yes">
<Args>
<Arg name="s" type="mmIMAGE" dir="in" optional="no" default="">
<Descr>size: [rows cols].</Descr>
</Arg>
...
</Args>
<Source lang="python">
<Code>cols, rows = s[1], s[0]
x, y = iameshgrid(range(cols),range(rows))
freq = 1./t
fcols = freq * Numeric.cos(theta)
frows = freq * Numeric.sin(theta)
f = Numeric.cos(2*Numeric.pi*(fcols*x + frows*y) + phi)</Code>
</Source>
…
<Platforms>windows linux sunos</Platforms>
</AdFunction>
def iacos(s,t,theta,phi):
""" o Purpose
Create a cossenoidal image.
o Synopsis
f = iacos(s,t,theta,phi)
o Input
s: size: [rows cols].
t: Period: in pixels.
theta: spatial direction...
phi: Phase
...
o Examples
f = iacos([128,256], 100, Numeric.pi/4, 0)
iashow(ianormalize(f, [0,255]))
"""
cols, rows = s[1], s[0]
x, y = iameshgrid(range(cols),range(rows))
freq = 1./t
fcols = freq * Numeric.cos(theta)
frows = freq * Numeric.sin(theta)
f = Numeric.cos(2*Numeric.pi*(fcols*x + frows*y) + phi)
return f
SBIE 2002
13
Resultados (1)
• Caixa de ferramentas
 Mais de 60 algoritmos
distribuídos entre os
módulos
– ia636
– Ia636demo
– ia636test
 Mesmas funcionalidades
para MATLAB
• Corretor automático
 Sistema on-line de processamento de entregas
 Suporte CGI nativo do Python
SBIE 2002
14
Resultados (2)
• Modalidades do corretor automático
 Correção
Módulo da
Submissão
 Visualização
V1(a)
V2(a)
...
Vn(a)
Script de
Testes
=
Módulo
Gabarito
Saídas
V1(b)
V2(b)
...
Vn(b)
SBIE 2002
15
Resultados (3)
• Python x MATLAB
SBIE 2002
16
Resultados (4)
• Aplicação no curso de Visão Computacional (IA636)
no 1 Semestre de 2002
• Avaliação on-line final
 12 questionários respondidos / 13 alunos matriculados
 9 questões sobre o ambiente de suporte ao curso
• Algumas respostas relevantes:
1) Quanto tempo aproximadamente você
levou para instalar o Python e todos os
pacotes necessários ao funcionamento da
toolbox IA636? (a) Em poucos minutos: 8,
(b) Em poucas horas: 2, (c) Em cerca de
um dia: 0, (d) Em cerca de uma semana:
1, (e) Em mais de uma semana: 1
2) Quanto tempo aproximadamente
você levou para se habituar à sintaxe
Python e Numerical? (a) Menos de
duas semanas: 5, (b) Entre duas
semanas e um mês: 5, (c) Mais de um
mês: 2
SBIE 2002
9) Qual sua avaliação geral sobre o
ambiente de suporte ao curso IA636?
(a) Ruim: 1, (b) Razoável: 0 , (c) Bom:
8, (d) Excelente: 3
17
Conclusões (1)
• Python pode ser usado em vários domínios de
aplicação
• O pacote Numerical se adapta bem ao propósito
deste trabalho
 Implementações diretas das fórmulas da literatura
• O sistema Adesso separa nitidamente conteúdo de
apresentação




Reduz esforço de manutenção
Imunidade a erros nas gerações automáticas
Consistência na interface com o usuário
Gerações facilmente alteradas de acordo com os avanços
tecnológicos
SBIE 2002
18
Conclusões (2)
• A caixa de ferramentas e toda documentação que a
acompanha auxiliam:
 A aprendizagem da linguagem em si
 Os algoritmos tradicionais de PI
 A implementação de um algoritmo ou aplicação nova
• O corretor mostrou-se eficaz no auxílio à avaliação
de exercícios de programação permitindo:
 Comparação de tempos e soluções
 Visualização de valores e imagens finais
• A grande vantagem do Python é a generalidade,
facilidade e flexibildade de programação, provendo
um eficiente sistema direto de manipulação de
matrizes totalmente gratuito, de fácil acesso
SBIE 2002
19
Trabalhos futuros
• Criação de folhas de estilos para criação de páginas
dinâmicas
• Implementação de programação visual aos moldes
do Khoros ou Simulink
• Explorar a linguagem Jython para criação de
interfaces para Internet (applets)
SBIE 2002
20
Obrigado!
Alexandre Gonçalves Silva
[email protected]
SBIE 2002
Download