Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did...

17
Caixa de ferramentas de processamento de imagens para Numerical Python Relat´ orio N o 1 10 de janeiro de 2001 N o do Processo: 00/13671-0 Autor: Alexandre Gonc ¸alves Silva Orientador: Prof. Dr. Roberto de Alencar Lotufo Per´ ıodo: janeiro de 2001 ` a janeiro de 2002 Abstract Este trabalho consiste no estudo, desenvolvimento e implementac ¸˜ ao de uma caixa de ferra- mentas de processamento de imagens. Para tanto, ´ e utilizada a linguagem Python [1] associada ao pacote de processamento num´ erico multidimensional chamado Numerical [2], ambos per- tencentes ` a linha “Open Source” de distribuic ¸˜ ao de software. Python ´ e uma linguagem mod- erna, interpretada, de “alt´ ıssimo” n´ ıvel, orientada a objetos, bastante eficiente e apropriada para o desenvolvimento r´ apido de aplicac ¸˜ oes. A caixa de ferramentas ´ e elaborada utilizando-se as ferramentas do projeto Adesso [3] de desenvolvimento de software de computac ¸˜ ao cient´ ıfica. 1 Introduc ¸˜ ao A intenc ¸˜ ao deste relat´ orio ´ e descrever as atividades desenvolvidas e os resultados alcanc ¸ados nesta pesquisa, decorrido um ano da concess˜ ao da bolsa FAPESP. Este texto est´ a organizado da seguinte forma: a Sec ¸˜ ao 2 apresenta um resumo do plano de trabalho; a Sec ¸˜ ao 3 faz uma apanhado geral do que fora realizado neste per´ ıodo; na Sec ¸˜ ao 4, tem-se os resultados obtidos at´ e agora; na Sec ¸˜ ao 5, s˜ ao feitas considerac ¸˜ oes sobre o andamento e futuro do projeto; as conclus ˜ oes s˜ ao feitas na Sec ¸˜ ao 6; e finalmente, s˜ ao listadas as referˆ encias bibliogr´ aficas utilizadas. 2 Proposta inicial Existem hoje em dia diversas ferramentas computacionais apropriadas para processamento de imagens tanto comerciais como gratuitas. Entre elas podemos citar Khoros, MATLAB, Mathematica, VisiLog, PV-WAVE, AVS, IDL, ImageMagick, entre outras. Existem tamb´ em esforc ¸os nacionais para o desenvolvimento de ferramentas similares: PhotoPix [4]. 1

Transcript of Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did...

Page 1: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

Caixa de ferramentas de processamento deimagens para Numerical Python

Relatorio No 1

10 de janeiro de 2001

No do Processo:00/13671-0

Autor: Alexandre Goncalves SilvaOrientador: Prof. Dr. Roberto de Alencar LotufoPerıodo: janeiro de 2001a janeiro de 2002

Abstract

Este trabalho consiste no estudo, desenvolvimento e implementacao de uma caixa de ferra-mentas de processamento de imagens. Para tanto,e utilizada a linguagemPython[1] associadaao pacote de processamento numerico multidimensional chamadoNumerical[2], ambos per-tencentesa linha “Open Source” de distribuicao desoftware. Pythone uma linguagem mod-erna, interpretada, de “altıssimo” nıvel, orientada a objetos, bastante eficiente e apropriada parao desenvolvimento rapido de aplicacoes. A caixa de ferramentase elaborada utilizando-se asferramentas do projetoAdesso[3] de desenvolvimento desoftwarede computacao cientıfica.

1 Introduc ao

A intencao deste relatorio e descrever as atividades desenvolvidas e os resultados alcancadosnesta pesquisa, decorrido um ano da concessao da bolsa FAPESP.

Este texto esta organizado da seguinte forma: a Secao 2 apresenta um resumo do plano detrabalho; a Secao 3 faz uma apanhado geral do que fora realizado neste perıodo; na Secao 4,tem-se os resultados obtidos ate agora; na Secao 5, sao feitas consideracoes sobre o andamentoe futuro do projeto; as conclusoes sao feitas na Secao 6; e finalmente, sao listadas as referenciasbibliograficas utilizadas.

2 Proposta inicial

Existem hoje em dia diversas ferramentas computacionais apropriadas para processamentode imagens tanto comerciais como gratuitas. Entre elas podemos citarKhoros, MATLAB,Mathematica, VisiLog, PV-WAVE, AVS, IDL, ImageMagick, entre outras. Existem tambemesforcos nacionais para o desenvolvimento de ferramentas similares:PhotoPix[4].

1

Page 2: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

Entre 1991 e 1997 o DCA-FEEC-UNICAMP adotou a plataformaKhoros. Estee um am-biemte apropriado para processamento de imagens constituindo de uma programacao visualbastante atrativa para iniciantes naarea, alem de oferecer um sistema de ajuda de autoria desoftware, permitindo sua extensao para novas funcoes dentro do contexto de caixa de ferra-mentas. No DCA foram desenvolvidas tres caixa de ferramentas: V3DTOOLS [5] de pro-cessamento e visualizacao tridimensional; MMACH de Morfologia Matematica [6]; e DIP-COURSE de ensino de processamento de imagens [7] [8]. Esteultimo foi o primeiro cursode processamento de imagens disponıvel nainternet. Porem, o grupo de desenvolvimento doKhorosenfrentou problemas internos e nao acompanhou os avancos tecnologicos desoftwaree, ao mesmo tempo, houve uma polıtica de venda. Outras desvantagens doKhorossao: poucadocumentacao e de baixa qualidade; dificuldade de instalacao; dificuldade de criacao de novasfuncoes, e de ser dedicado a problemas de processamento de imagens, apesar dos esforcos dogrupo para considera-lo como ambiente generico de desenvolvimento de software.

Em consequencia, oKhorosdeixou de ser adotado no DCA como ferramenta preferencial,dando lugar aoMATLAB. Ja foram desenvolvidas varias caixas de ferramentas nesta plata-forma, sendo uma delas repassadaa industria dentro do projeto Softex [9]. OMATLABe umambiente generico de computacao cientıfica muito difundido nos cursos de Engenharia, ap-resenta uma linguagem matricial extremamente simples, compacta e muito proxima da notacaomatematica, e possui uma comunidade bastante grande. Sua maior desvantageme seu altocusto. Poucas instituicoes tem condicoes de adquiri-lo. Outra desvantagem seria a falta deferramentas de autoria de caixa de ferramentas. Apesar de ser muito facil criar um conjunto defuncoes voltadas a um problema, nao existe nenhum suporte para a geracao de documentacaoparainternet, papel, etc.

E intencao, a longo prazo, do grupo desenvolver um ambiente computacional que contenhao melhor das duas plataformas. Neste sentido ja existe o esforco associado ao projetoAdessoem cooperacao com o ITI - Instituto Nacional de Tecnologia da Informacao.

A ideia deste projetoe integrar a linguagem Python ao sistemaAdessopermitindo que asbibliotecas hoje disponıveis noMATLAB [10] e noTcl/Tk [11] estejam tambem disponıveisao Python (transformacao wrapper). Ao mesmo tempo, oAdessosera usado para o desen-volvimento de uma caixa de ferramentas de processamento de imagens a ser usada comoplataforma aberta de pesquisa e ensino, contendo as principais funcoes e diversos exemplose demonstracoes. Esta caixa de ferramentas devera ser distribuıda gratuitamente para quepossa ser compartilhada pelo comunidade academica daarea.

O sistemaAdesso, de autoria desoftwarede computacao cientıfica, e um ambiente dedesenvolvimento de componentes onde a maior parte da informcao e armazenada em umabase de dados XML [12]. A partir desta organizacao, codigo, documentacao e produto finalpodem ser automaticamente gerados utilizando-se a maquina de transformacao doAdesso.Esta metodologia permite um menor esforco de manutencao e gerenciamento da informacao,consistencia na producao de interfaces, flexibilidade na apresentacao, no que se referea forma,do produto, gracas ao esquema de folhas de estilos (stylesheets), maior imunidade a erros, entreoutras caracterısticas.

Python tem a flexibilidade de Perl, associado ao poder numerico e facilidade de programa-cao doMATLAB; e disponibilizado em um ambiente “Open Source”, alem de ser facilmente es-tendido para C/C++ atraves do conceito de API (Application Programmer’s Interface). Em al-gumas situacoes, sobretudo quando se trata de algoritmos iterativos,e essencial a programacaoem linguagem de mais baixo nıvel para se ter um desempenho de execucao aceitavel.

2

Page 3: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

1 2 3 4 5 6 7 8 9 101o Trimestre X X X2o Trimestre X X X3o Trimestre X X X4o Trimestre X X X5o Trimestre X X X X6o Trimestre X X X7o Trimestre X X X8o Trimestre X X

Table 1: cronograma previsto para o trabalho.

3 Objetivos alcancados

A Tabela 1 mostra o cronograma trimestral previsto para o trabalho referenteas atividadeslistadas a seguir. O itens 1, 2, 4, 6, 7, 8, 9 e 10 sao atividades ja desenvolvidas. Houve,portanto, uma alteracao no planejamento inicial sem, no entanto, causar prejuızo ao andamentoda pesquisa.

1. Estudar a linguagem Python (finalizado)

2. Estudar o pacote Numerical (finalizado)

3. Comparar o ambiente Python/Numerical com o MATLAB e com o Tcl

4. Desenvolver interfaces para biblioteca em C de forma manual (finalizado)

5. Desenvolver codigo de geracao de interface entre a biblioteca C e o Python, integrando-ono ambiente Adesso

6. Especificar as funcoes disponıveis na caixa de ferramentas de processamento de imagens(finalizado)

7. Estudar e escolher as ferramentas para exibicao de imagens e de graficos (finalizado)

8. Desenvolver as funcoes de PI da caixa de ferramentas (finalizado)

9. Desenvolver demonstracoes associadasa caixa de ferramentas de PI (finalizado)

10. Confeccionar home-page da caixa de ferramentas usando as ferramentas do ambienteAdesso. Esta home-page devera ser a forma de distribuicao e comunicacao com osusuarios interessados (finalizado)

Neste primeiro ano, foi possıvel se ter uma boa experiencia em relacao aos ambientesPython,MATLAB e Tcl, mas ainda nao foi feita uma comparacao mais formal a respeito,sugerida no item 3. Para o termino do trabalhoe importante dar atencao aos itens 4 e 5. Ointerfaceamento entre C e Python ja foi testado mas ainda resta incluir esta informacao noAdessode modo que este processo seja automatizado. Para isto, algumas particularidades doproprio sistemaAdessodevem ser compreendidas.

Em relacao as disciplinas, ja foram cursados os 60 creditos necessarios ao mestrado emEngenharia Eletrica da FEEC-UNICAMP. As ementas estudadas foram:

• Visao Computacional: Imagens digitais. Dispositivos de exibicao e aquisicao de im-agens. Cor. Transformacoes espaciais e interpolacao em intensidade. Transformadas deimagens. Melhoramento de imagens. Filtros. Segmentacao de imagens. Descritores.Reconhecimento de padroes. Aplicacoes.

3

Page 4: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

• Analise de Imagens por Morfologia Matematica e Topicos em Engenharia de Compu-tacao I: Introducao a Morfologia Matematica. Operadores Elementares; Dilatacoes eErosoes. Funcao Distancia, Distancia Geodesica; Filtros Morfologicos. Aberturas eFechamentos. Filtros Alternantes Sequenciais. Sup-Geradores, Afinamento e Homoto-pia. Reconstrucao Algoritmo de Linhas Divisores deAgua. Exemplo de Segmentacaode Imagens usando Morfologia Matematica.

• Visao Robotica: Metodos de calibracao de cameras. Localizacao (posicao e orienta-cao) de objetos no espaco. Principais metodos. Aplicacoes industriais. Integracoes desensores.

• Introducao ao Processamento de Imagem Digital: Fundamentos de Imagem Digital.Transformacoes Radiometricas. Convolucao e Correlacao. Filtragem no Domınio Espa-cial. Analise de Fourier. Filtragem no Domınio da Frequencia. Tecnicas de Restauracao.Segmentacao de Imagens. Introducaoa Morfologia Matematica.

• Computacao Grafica I: Introducaoaarea de Computacao de Imagens. Revisao de periferiaGrafica. Transformacoes de coordenadas. Recorte. Window/Viewport. Pacotes graficos.Algoritmos de linhas e superfıcies escondidas. Rasterizacao de imagens. Preenchimentode Polıgonos. Tonalizacao de imagens: flat, Gouraud, Phong. Tecnicas de modelagem:visao introdutoria daarea.

• Topicos em Sistemas: Sinais contınuos e discretos. Sistemas lineares invariantes notempo: circuitos eletricos. Equacoes diferenciais lineares ordinarias invariantes no tem-po. Transformada de Laplace. Serie de Fourier. Transformada de Fourier. Amostragemde sinais. Transformada Z. Transformada Z aplicadaa probabilidade. Ortogonalizacaode sinais. Transformada discreta de Fourier.

• Estudos Especiais I: Estudos realizados sobre temas especıficos voltados para o tema detese.

• Seminario de Computacao: Assuntos diversos em computacao.

Na maioria dos cursos citados, os conteudos teoricos foram reforcados com exercıcios delaboratorio. Com isto, alem das ementas estudadas, houve uma grande familiaridade emrelacaoa linguagem C e, sobretudo, ao uso doMATLAB.

Para este semestre ja esta feita a matrıcula em “Tese de Mestrado” e “Programa EstagioDocente II”. A primeira disciplina consiste no desenvolvimento da tese em si e a segunda, deauxılio didatico ao curso de “Sistemas de Informacoes Graficas” oferecido na graduacao.

Para a pesquisa, o primeiro passo foi a aprendizagem da linguagem Python e do pacoteNumerical. A seguir, surgiram alguns questionamentos sobre qual a melhor forma de exibiruma imagem ou um grafico em Python, elementos importantes na analise de imagens. Foramestudados entao os modulosTkinter e Gnuplot [13], referencias bastante comuns a usuariosPython.

O passo seguinte foi o aprendizado da linguagem XML e a forma como a maquinaAdessotrata estas estruturas de marcacao.

No Anexo 1, tem-se o conteudo de um seminario apresentado na FEEC-Unicamp, em abrilde 2001. E feito um resumo geral do projeto, incluindo uma introducao sobre a linguagemPython, o modulo Numeric e o projetoAdesso.

Neste tempo, foi elaborado um poster (de 50cm x 90cm) e uma breve apresentacao parao XIV Simposio Brasileiro de Computacao Grafica e Processamento de Imagens (SIBGRAPI2001) entitulado “Toolbox of Image Processing forNumericalPython”. Tanto o mini-artigopublicado [14] quanto o poster podem ser visto no Anexo 2.

Foram implementadas uma serie de funcoes da caixa de ferramentas, ja no contexto deproducao desoftwaredoAdesso. Foram criadas folhas de estilos para geracao de codigo-fonte

4

Page 5: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

Figure 1: Script para demonstracao do “iashow”

Python (incluindo geracao de: funcoes em si,scriptsde demostracao da caixa de ferramentas,e testsuitespara verificacao de correcao das funcoes implementadas), e folhas de estilos parageracao de documentacao emHTML (HyperText Markup Language). Alem de um incrementodo tratamento automatico de parametro padrao (valordefault) na folha de estilo de geracao decodigoMATLABexistente.

Por fim, foi desenvolvido um prototipo de correcao automatica descriptsPython, viain-ternet, com bons resultados. Esta podera ser uma ferramenta auxiliar de ensino, no que dizrespeitoa avaliacao, ja que se pode gerar estatısticas a respeito de cada aluno, a partir doregistro de cada submissao feita.

4 Resultados

Nesta secao, sera dada uma breve introducao dos ambientes de trabalho e os resultados obtidosnesta pesquisa.

4.1 A linguagem Python

Pythone uma moderna linguagem, interpretada, orientada a objetos, de alto nıvel, de rapidaprototipacao, com um sintaxe simples (quase como um “pseudo-codigo”), estensıvel, extrema-mente portavel.

A linguageme bastante flexıvel (assim comoPerl) e e livremente distribuıda, alem de terseu codigo aberto. Pode ser facilmente instalada a partir dewww.python.org nas mais di-versas plataformas.E suficientemente eficiente para utilizacao em processamento de imagensquando associada ao pacoteNumerical. Este tambem segue a linha “Open Source” e pode serlivremente adquirido emwww.pfdubois.com/numpy . Comoe todo programado em C ePython,e tao portavel como proprio Python. A combinacao Python eNumericalpermite umpoder numerico e facilicidade de uso como doMATLAB.

4.1.1 Exibicao de imagens

A exibicao de imagense possıvel atraves do uso do moduloTkinter. Estee o pacote padraoGUI (Graphical User Interface) do Python. OTkinter e uma interface, orientada a objetos,para as funcionalidades doTcl/Tk. Para criacao de objetos graficos, portanto, se faz necessarioo aprendizado doTk. No entanto, na caixa de ferramentas ja implementada, a funcao “iashow”se encarrega de oferecer uma interface ainda mais trivial ao usuario. Na Figura 1 tem-se umscript, no qual se faz uso da exibicao de imagens. A Figura 2 mostra as janelas graficas geradasa partir de cada “iashow” doscript.

>>> from ia636py import *>>> f = iaread(’cameraman.pgm’)>>> (g, a) = iasobel(f)>>> s = iashow(f)(256, 256) Min= 0.0 Max= 251.0 Mean=137.066 Std=87.20>>> s = iashow(g)(256, 256) Min= 0.0 Max= 1067.79024157 Mean=98.274 Std=179.78

5

Page 6: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

(a) (b)

Figure 2: (a) Imagem original; (b) Logaritmo do filtro de Sobel da imagem (a)

Figure 3: Script para demonstracao do “iaplot”

4.1.2 Exibicao de graficos

Existem varias ferramentas de exibicao de graficos que podem ser localizadas nositedo Py-thon. Foi escolhido ognuplotpor ser uma ferramenta bastante poderosa e, ate certo ponto,comum a usuarios Unix. Ognuplote utilizado, por exemplo, noOctave[15], um clone de di-versas funcionalidades doMATLAB, e livremente distribuido (licenca GLP-GNU). A interfacecom o Python, oGnuplot.py, e simples de ser instalada e utilizada. Assim como na exibicaode imagens, tambem foi feita uma interface de mais alto nıvel para exibicao de graficos atravesda funcao implementada “iaplot”. Na Figura 3, obseva-se um exemplo de uso desta funcao. AFigura 4 mostra a janela gerada com o grafico em questao.

>>> from ia636py import *>>> h = ialog([200, 300], [100, 150], 20)>>> iaplot(h[100, :])

4.2 O sistemaAdesso

O Adessoe um ambiente computacional de suporte ao desenvolvimento de aplicacoes cientıfi-cas.E um projeto de desenvolvimento conjunto entre a Fundacao CTI e a FEEC-UNICAMP,apoiados pelo projeto FAPESP 98/13817-3 de auxılio a pesquisa. OAdessoexplora o modelode programacao baseado em componentes reutilizaveis, cada vez mais comum em programasdeultima geracao, para fornecer suporte ao desenvolvimento de componentes e sua integracaoa diversas plataformas de programacao cientıfica. O Adessoconfigura-se em uma base dedados de componentes (algoritmos) representada em XML e em um conjunto de ferramentasde transformacao (stylesheets) para geracao de codigo, documentacao e empacotamento doscomponentes. A Figura 5 mostra o esquema de como esta transformacao ocorre. Ha uma basede dados XML, de entrada, contendo informacoes quaisquer tais como algoritmos C, Pythone meta-informacoes. Ha tambem um conjunto de folhas de estilo, tambem em formato XML,cada qual para uma saıda especıfica que pode ser codigo-fonte C ou Python, documentacao

6

Page 7: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

Figure 4: Linha 100 da imagem do Laplaciano de Gaussiana

LATEX, HTML, entre inumeras outras possibilidades. A maquina XSL se encarrega de leras duas entradas (arquivos XML) e gerar a saıda. Esta maquinae implementada atraves dotDOM [16], um eficiente pacote paraTcl que facilita o processamento XML/DOM.

4.3 Geracao de codigo

Uma das folhas de estilos implementada foi a de geracao de codigo-fonte Python. Na Figura 6pode-se ver um trecho da organizacao XML contendo informacoes a respeito da funcao “ia-cos”. As meta-informacoes (na parte entre<Documentation> e </Documentation> )consistem em um trecho de descricao da funcao (emDescr name=’’Description’’ ),um trecho com exemplos de uso da funcao (emDescr name=’’Examples’’ , e um trechocom a equacao, se existir, escrita em LATEX (em Descr name=’’Equation’’ ). Segue a

( 110,50)

Base de Dados XMLLinguagem C

Python

-

( 90,30)Maquina XSL�����

( 100,20).c

( 100,20)Makefile

- ( 100,20).py@@R

( 100,20)LATEX

BBBBBBBN ( 100,20)HTML

6

( 90,30)Folhas de Estilo

Figure 5: MaquinaAdesso

7

Page 8: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

Figure 6: Trecho XML a respeito da funcao “iacos”

descricao da variavel de retorno da funcao (emReturn ), e os argumentos de entrada ne-cessarios (emArgs ). Apos isto, vem o corpo do codigo-fonte (emSource ). O que amaquina XSL faze percorrer toda a base de dados XML, nesta estrutura dearvore, fazendoas substituicoes necessarias. A Figura 7 mostra o codigo gerado automaticamente a partirda interpretacao do trecho XML da Figura 6. O Anexo 3 exemplifica a forma de uma folhade estilo apresentando o nucleo da que foi implementada paraa geracao de codigo-fonte Py-thon. Alem de um modulo completo da caixa de ferramentas, esta folha de estilo gera asdemonstracoes e ostestsuites. A Figura 8 exibe o ambiente Python e a solicitacao de ajudaa funcao “iacos”, quando em sua utilizacao na pratica, a partir do modulo importado com afuncao gerada da Figura 7. Esta mesma informacao, encaranda comohelpno codigo-fonte,eaproveitada na documentacao HTML ou LATEX.

<AdPythonFunction><Documentation>

<Descr name="Description">Generate a cosenosoid image of size s withamplitude 1, period T, phase phi and wave direction of theta. Theoutput image is a double array.</Descr><Descr name="Examples">

<PYcode>import Numericf = <Self/>([128,256], 100, Numeric.pi/4, 0)iashow(ianormalize(f, [0,255]))</PYcode>

</Descr><Descr name="Equation"><Eq>f(x,y) &amp; = &amp; 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="" hidden="no"><Descr>size: [rows cols].</Descr>

</Arg>...

</Args><Source>

<Code>cols, rows = s[1], s[0]x, y = iameshgrid(range(cols),range(rows))freq = 1./tfcols = 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></AdPythonFunction>

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 of the wave, in radians. 0 is a wave onthe horizontal direction.phi: Phase

o Outputf:

o DescriptionGenerate a cosenosoid image of size s with amplitude 1, period

8

Page 9: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

Figure 7: Codigo-fonte da funcao “iacos” gerado automaticamente

Figure 8:Helpda funcao “iacos” no IDLE Python

T, phase phi and wave direction of theta. The output image is adouble array.

o Examplesimport Numericf = 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./tfcols = freq * Numeric.cos(theta)frows = freq * Numeric.sin(theta)f = Numeric.cos(2*Numeric.pi*(fcols*x + frows*y) + phi)return f

4.4 Geracao de documentacao

A geracao de documentacao consiste em se descrever toda a caixa de ferramentas imple-mentada. Alguns requisitos sao considerados essenciais a uma boa documentacao. O primeiroitem e descrever as funcoes em si, dizer qual a finalidade de cada uma, qual sua sintaxe e seusparametros de entrada e saıda. O segundo,e determinar alguns exemplos e as saıdas que devemser produzidas quando os mesmos sao interpretados pela linguagem em uso. Outro iteme o es-tabelicimento de formulas, sempre que possıvel, pois facilitam, muitas vezes, o entendimentodo algoritmo. Por fim, para cada funcao, e importante listar as demais funcoes associadas eseu algoritmo ou codigo-fonte.

Foi elaborada uma folha de estilo para geracao de documentacao HTML, para Python,a partir doAdesso, que cobre os itens citados. No Anexo 4, pode-se visualizar as saıdasgeradas em relacao a documentacao das funcoes ate entao implementadas. As informacoes a

9

Page 10: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

respeito das funcoes, seus parametros, sao implementadas basicamente como na geracao decodigo-fonte vista anteriormente. Ja os exemplos requerem um pouco mais de cuidado. Saobasicamento quatro formas de geracoes automaticas distintas: incluisao de saıdas numericasou texto, de imagens, de graficos e de equacoes.

Ja foi dito quee utilizado o tDOM para analise de estruturas XML. Portanto, foi necessario,abrir um interpretador Python dentro doTcl para que pudessem ser gerados os resultadosesperados. Houve uma pesquisa em cima deste tema e foi encontrada uma interface nestesentido chamadaTclpython[17]. A partir daı, os scriptsPython puderam ser normalmenteexecutados e suas saıdas mapeadas em variaveisTcl. Quando na passagem por um “iashow”,por exemplo, ha um tratamento diferenciado dentro doTcl. O interpretador Python abertopassa a gravar em arquivo (usando o proprio “iawrite” da caixa de ferramentas) a imagem,em questao, em memoria. Algo similar acontece quando se detecta um “iaplot”. A folha deestilo agora busca utilizar as funcionalidades doGnuplotpara gravar as figuras. Gravadas asmesmas, oTcl passa a fazer chamadas asotwaresde conversao de formatos, no caso de PS(Postscript) para GIF (Graphics Interchange Format) ou PNG (Portable Network Graphics).

A geracao de equacoes depende apenas da existencia de uma interpretador para sintaxe deformulas do LATEX. O Tcl desta vez faz a compilacao do trecho XML a respeito. No caso deHTML, sao criadas imagens GIF, pela conversao de PS ou PDF (Portable Document Format)gerado. Se a documentacao fosse em LATEX propriamente dito nao haveria esta necessidade.

4.5 Funcoes implementadas

A seguir, sao listadas as funcoes implementadas ate agora. O prefixo “ia” tem origem no nomedas disciplinas de pos-graduacao da FEEC-UNICAMP, em especial, o curso IA636 (VisaoComputacional), no qual se podera utilizar a caixa de ferramentas desenvolvida. No Anexo 4,pode-se ver as paginas HTML geradas automaticamente sobre tais funcoes.

• iabwlp - Calcula o filtro em frequencia, passa-baixo, de Butteworth

• iacircle - Cria uma imagem binaria de cırculo

• iacos- Cria uma imagem de cossenoide

• iacrop - Corta uma imagem para encontrar o retangulo mınimo

• iadct - Calcula a Transformada Discreta de Cossenos

• iadctmatrix - Gera a matriz base para a transformada DCT

• iadft - Calcula a Transformada Discreta de Fourier

• iadftmatrix - Gera a matriz base para a transformada DFT

• iadftview - Gera o espectrootico de Fourier para visualizar o resultado da DFT

• iaffine - Realiza uma transformacao afim

• iafftshift - Desloca a componente de frequencia zero para o centro do espectro

• iagaussian- Gera uma imagem Gaussiana 2D

• iageorigid - Faz uma transformacao geometrica de corpo rıgido 2D

• iahaarmatrix - Gera a matriz base para a Transformada de Haar

• iahadamard - Calcula a Transformada de Hadamard

• iahadamardmatrix - Gera a matriz base para a Transformada de Hadamard

• iahistogram - Calcula o histograma de uma imagem

• iahwt - Calcula a Transformada Wavelet Haar

10

Page 11: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

• iaidct - Obtem a Transformada Discreta Inversa de Cossenos

• iaidft - Obtem a Transformada Discreta Inversa de Fourier

• iaifftshift - Desfaz o efeito do uso da funcao iafftshift

• iaihadamard - Transformada Inversa de Hadamard

• iaihwt - Transformada Inversa Wavelet Haar

• iaind2sub - Converteındices lineares em coordenadas XY

• iaisdftsym - Verifica se uma matriz complexae conjugada simetrica

• ialog - Gera uma imagem do Laplaciano de Gaussiana

• ialogfilter - Calcula o filtro do Laplaciano de Gaussiana

• iameshgrid - Cria uma malha de coordenadas

• ianormalize - Normaliza os valores dospixelsdentro de uma escala especificada

• iaotsu - Calcula oThresholdingde Otsu

• iapconv - Calcula a convolucao periodica 2D

• iaplot - Exibe o grafico de uma funcao

• iaptrans - Faz uma translacao periodica

• iaread - Le um arquivo de imagem (PBM, PGM e PPM)

• iarectangle- Cria uma imagem binaria de retangulo

• iashow- Exibe uma imagem

• iasobel- Faz a deteccao de aresta de Sobel

• iasub2ind - Converte coordenadas XY emındices lineares

• iavarfilter - Calcula o filtro de variancia

• iawrite - Escreve em um arquivo de imagem (PBM, PGM e PPM)

Foi confeccionada uma pagina para o curso de IA636 contendo, entre outras informacoes, acaixa de ferramentas completa (codigo-fonte e documentacao) e dicas de instalacao [18].

4.6 Geracao de demonstracoes

Al em do elementoAdPythonFunction na estrutura XML, como visto na Figura 6, hatambem o elementoAdPythonDemo responsavel especificamente por armazenar informa-coes a fim de demonstrar, ou ate mesmo, realizar um pequeno curso, sobre determinada funcaoou conjunto de funcoes.

A folha de estilo de geracao de documentacao HTML tambem se encarrega de gerar asdemostracoes existentes na caixa de ferramentas. Um exemplo pode ser visto na Figura 9quando se da alguns exemplos da Transformada de Fourier em imagens sinteticas.

Outra abordageme dada pela folha de estilo de geracao de codigo-fonte que se encarregade por todos os exemplos de um elementoAdPythonDemo em um arquivo descript Pythondevidamente formatado. Feita a geracao de codigo, estesscriptssao automaticamente criados.Sua execucao gera as mesmas saıdas que se apresentam nas paginas HTML, mas dentro do am-biente Python. Neste caso, pode-se rapidamente modificadar os testes, conforme o desejado, everificar os novos resultados.

11

Page 12: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

12

Page 13: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

Figure 9: Exemplo de demonstracao gerada em formato HTML

13

Page 14: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

Figure 10: Teste da funcao “iacircle”

4.7 Geracao de testes (testsuites)

A ultima tarefa do gerador de codigo e a de criarscripts Python de teste de toda caixa deferramentas implementada. Esta informacao de teste tambem esta armazenada em XML jun-tamente com as funcoes. Ostestsuitesnada mais sao que exemplos com saıdas supostamentecorretas e, quase sempre, gerada analiticamente sem uso do computador. Osscriptscitadosvao entao testar funcao por funcao comparando as saıdas geradas nos exemplos fornecidoscom as saıdas esperadas. Com isto, espera-se cobrir o maximo de casos de erro, e melhorarcada vez mais a correcao da caixa de ferramentas. A Figura 10 mostra um trecho de teste paraexemplificar a verificacao da funcao “iacircle”.

print ’testing iacircle’correto = ‘iacircle([5,7], 2, [3,4])‘ == ‘Numeric.array(

[[0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 1, 0, 0],[0, 0, 0, 1, 1, 1, 0],[0, 0, 1, 1, 1, 1, 1],[0, 0, 0, 1, 1, 1, 0]])‘

5 Continuidade do trabalho

O curso de Visao Computacional (IA636) utilizara tanto a caixa de ferramentas doMATLABcomo a do Python, atraves de exercıcios praticos. Isto permitira testar de fato a caixa de fer-ramentas implementada neste projeto e verificar suas vantagens e desvantagens comparadas aoMATLAB. Todo o projeto de pesquisa pode ser visto emhttp://www.dca.fee.unicamp.br/˜alexgs . Uma pagina definitiva, disponıvel ao publico, sera feita em julho de 2002.

Foi discutida a viabilidade de se criar paginas dinamicas nainternet, atraves das facilidadesdo modulo cgi (Common Gateway Interface) do Python, com o proposito de implementaralgoritmos de processamento de imagens e ser mais uma ferramenta de aprendizagem. Nestecaso, o usuario precisaria de apenas um navegador deinternetpara executar seusscripts. Umpequeno teste para o calculo do filtro de media foi feito, usandocgi/Python, e os resultadosforam satisfatorios (Figura 11). Seria interessante automatizar este processo de criacao decgi, elaborando-se uma nova caixa de ferramentas neste sentido. Seria uma nova forma detransformacao de informacao suportado peloAdesso.

Ate agora foi tratado apenas um formato de arquivo de imagem (do tipo PBM/PGM/-PPM). Seria interessante o suporte a outros formatos, embora haja conversores comoIm-ageMagick[19] com este fim, para facilitar o trabalho do usuario final. Uma solucao queesta em estudoe o uso do pacoteImg [20] do Tk, porem, ha certa dificuldade de interfacecom o Python, mais precisamente oTkinter. Sabe-se, porem, que ao menos o formato GIF,mais comumente utilizado,e suportado independentemente peloTkintere pode ser facilmenteadaptado ao “iaread” e “iawrite” da caixa de ferramentas.

E preciso acrescentar mais demonstracoes a outras funcoes implementadas, alem de ter-minar todos ostestsuitesfaltantes. Estas tarefas sao basicamente de preenchimento de umconjunto de arquivos XML com trechos descriptsadequados. Conforme a necessidade, novasfuncoes tambem poderao ser criadas.

O principal objetivo agorae a criacao de uma folha de estilo para estabelecer a interfaceentre a linguagem C e o Python de forma automatica. Com isto, muito do que ja esta progra-mado, ee utilizado emMATLABe Tcl/Tk, passara a ser aproveitado em Python, sem custoadicional de programacao.

14

Page 15: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

Figure 11: CGI para obtencao do filtro de media

Devido ao cumprimento de grande parte da proposta, existe a possibilidade do termino dotrabalho antes do previsto. Para uma consolidacao maior da pesquisa, um artigo sobre esteprojeto esta sendo elaborado no momento.

6 Conclusoes

O ambiente Python/Numerical, dentro do contextoAdesso, permite agregar (e acrescentar)vantagens de sistemas comoKhoroseMATLAB, seja na facilidade de instalacao, seja na facil-idade de uso, seja no custo, ou na possibilidade de criacao de documentacao, entre outras.

A estensıvel linguagem Python permite a implementacao eficiente de algoritmos para pro-cessamento de imagens. A caixa de ferramentas implementada devera ser disponıvel de formaaberta e gratuita, permitindo que a comunidade nacional seja beneficiada com este esforco.Ter-se-a uma opcao as ferramentas de processamento de imagens ja existente emMATLAB,desenvolvida no DCA-FEEC-UNICAMP e usada em cursos de graduacao.

Al em deste principal resultado, podemos citar outros: contribuicao ao sistemaAdessocoma inclusao de uma nova plataforma suportada, verificando sua generalidade e consolidacao do

15

Page 16: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

uso deste sistema na geracao de uma nova caixa de ferramentas.O ambiente produzido sera util tanto em ensino e pesquisa como para o desenvolvimento

de aplicacoes finais.

References[1] G. Rossum,Python Tutorial, F. L. Drake Jr., editor, April 15, 2001.

http://www.python.org/doc/current/tut/tut.html

[2] D. Ascher, P. F. Dubois, K. Hinsen, J. Hugunin, and T. Oliphant’,Numerical Python,LLNLL, University of California, June 1, 2001.http://www.pfdubois.com/numpy/html2/numpy.html

[3] R. C. Machado, R. A. Lotufo,“Adesso: Ambiente Computacional para DesenvolvimentoRapido de Aplicacoes”. DCA-FEEC-UNICAMP/FCTI Activities Report, Maio, 2000,Campinas.

[4] De Almeida, A.C.R. et al.PhotoPix, Plataforma em Java para Implementacao de Algor-itmos de Processamento Digital de Imagens, SIBGRAPI, 1998.

[5] Luppi R. M. S., Kligerman D. M., Falcao A. X., Braga Neto U. M., Vieira A. J. e LotufoR. A. V3DTOOLS : A KHOROS Toolbox for 3D Imaging, World Congress on MedicalPhysics and Biomedical Engineering 94, Rio de Janeiro, agosto de 1994.

[6] J. Barrera, G. J. F. Banon, R. A. Lotufo, and R. Hirata Jr.,MMach: a MathematicalMorphology Toolbox for the Khoros System, Journal of Electronic Imaging, vol 7, no. 1,pp.174-210, January 1998.

[7] Lotufo R. A., Jordan R.Hands-On Digital Image Processing, IEEE Frontiers in Educa-tion - 26th Annual Conference, FIE-96 pp 1199-1202, Volume 3, Nov. 6-9, 1996. SaltLake City, Utah, USA.

[8] R. Jordan, R. A. Lotufo,Interactive Digital Image Processing Course on the World-Wide Web, Proccedings of the 1996 International Conference on Image Processing. IEEESignal Processing Society. pp.433-436. September 16-19, 1996, Lausanne, Switzerland.

[9] SDC Information Systems,SDC Morphology Toolbox for MATLABhttp://www.mmorph.com

[10] The MathWorks,The Language of Technical Computinghttp://www.mathworks.com

[11] Welch, Brent B.Pratical Programming in Tcl an Tk, 3rd ed., Prentice Hall PTR, 1999.

[12] W3C Recommendation 6 October 2000,Extensible Markup Language (XML) 1.0(Second Edition)http://www.w3.org/TR/2000/REC-xml-20001006

[13] Gnuplot.pyhttp://gnuplot-py.sourceforge.net/

[14] Silva, A. G.; Lotufo, R. A., R.; Machado, R. C.Toolbox of Image Processing for Nu-merical Python, Proceedings of XIV Brazilian Symposium on Computer Graphics andImage Processing. p. 402. October 2001, Florianopolis, Brazil.

[15] Eaton, John W.,GNU Octave, a high-level interactive language for numerical computa-tions, 3rd ed., February 1997.http://www.octave.org/doc/octave −toc.html

[16] Loewer, Jochen,tDOM - A fast XML/DOM/XPath package for Tcl written in Chttp://www.tu-harburg.de/skf/tcltk/papers2000/tDOM3.pdf

[17] Fontaine, Jean-Luc,tclpython, a Python package for Tclhttp://jfontain.free.fr/tclpython.htm

[18] Pagina do Curso de Visao Computacional (IA636)http://www.dca.fee.unicamp.br/ alexgs/curso

16

Page 17: Caixa de ferramentas de processamento de imagens …alexgs/tese/relatorio_1.pdf · aux´ılio did atico ao curso de “Sistemas de Informac¸´ oes Gr˜ ´aficas” oferecido na

[19] ImageMagick, Convert, Edit and Compose Imageshttp://www.imagemagick.org/

[20] Img Home Pagehttp://members1.chello.nl/ j.nijtmans/img.html

17