aulapratica2

Objetivos:

  1. Algumas recomendações de programação,
  2. Análise dos exercícios feitos,
  3. Discussão de formas de descrever o programa, formas de ilustrar o funcionamento, enfim uma documentação que possa ser útil para outros entenderem o que foi feito.
  4. Geração de imagens sintéticas.

Recomendações de programação

Uso de bibliotecas com funções que possam ser usadas em outras situação. Neste contexto, é importante que as funções de processamento de imagens, não tenham funções de entrada e saída. Uma função deveria receber como entrada imagens e parâmetros e retornar imagens. O programa principal é quem deve se cuidar de medir tempo, mostrar as imagens, imprimir resultados.

Como descrever e documentar o programa

Como a matemática é uma linguagem simbólica universal, ela é muito utilizada na descrição das técnicas de processamento de imagens. A formulação matématica de um algoritmos não é trivial. É um processo de aprendizagem. No caso da imagem que gera o xadrez, a equação da modulo 2 da soma dos índices da matriz é bastante simples, precisa e eficiente. Já, a explicação de como funciona o algoritmo, muitas vezes requer um pequeno exemplo numérico ou mesmo uma animaçao.

Soluções da imagem xadrez

Caso casa de tamanho 1:

1 - mod(i+j,2) 2 - produto escalar, gerando uma imagem quadrada 3 - usando função senoidal em função dos índices i e j 4 - replicações: de colunas seguido de linhas, de ladrilho, resize 5 - duas atribuições com fatiamento, preenchendo as casas 1

Do ponto de velocidade, provavelmente as funções que usam 4 replicação e 5 fatiamento devem ser mais rápidas no Python.

Do ponto de vista de simplicidade e generalidade, a idéia de replicação de ladrinho é bastante intuitiva.

Entretanto, a forma de geração 1, onde o conteúdo é uma função dos índices, é muito poderosa e permite criar muitas imagens sintéticas. Neste sentido o uso da função iameshgrid ou mgrid do Numpy permite criar matrizes de índices e portante gerar funções rápidas evitando o uso de laços explícitos. Como a imagem gerada é uma função dos índices, a sua documentação na forma da equação matemática é também simples e precisa.

Exemplo de geração de imagem gaussiana

A imagem gaussiana bidimensional é dada por

Programa

1 def gaussian( xsize, ysize, mx, my, sx, sy):
2     x, y = iameshgrid(arange(0,xsize), arange(0,ysize) )
3     x = x.astype(float)
4     A = exp(-1./2 * ((x - mx)/sx)**2)
5     print A
6 
7 
8 gaussian (5, 3, 2, 1, 2, 2)
[[ 0.60653066  0.8824969   1.          0.8824969   0.60653066]
 [ 0.60653066  0.8824969   1.          0.8824969   0.60653066]
 [ 0.60653066  0.8824969   1.          0.8824969   0.60653066]]