Exercício 02 - Funções Sintéticas da Toolbox ia636

Autor: Wagner Machado do Amaral
Data:16/03/2009

Enunciado: ia636-2009:exercicio2

Link para: Toolbox ia636

Tópicos desse exercício

  • iaroi - Descrição da função iaroi
  • iaramp - Descrição da função iaramp
  • iacircle - Descrição da função iacircle
  • mycircle - Implementação da função circle
  • estudo - Estudo das funções iaramp e iacircle

iaroi

Recorta um retangulo de uma imagem. ( Link para função)

sintaxe

g = iaroi( f, p1, p2 )

Entrada

  • f Imagem de entrada.
  • p1 Coordenadas do ponto superior esquerdo da área desejada.
  • p2 Coordenadas do ponto inferior direito da área desejada.

Saída

  • g Imagem de saída.
 1 # carrega imagem
 2 fish = mmreadgray('MVBook/fish.png')
 3 
 4 # exibe imagem original
 5 mmshow(fish, title = 'MVBook/fish.png')
 6 
 7 # recorta um retangulo da imagem
 8 fishiaroi = iaroi(fish, [45,8], [130,110])
 9 
10 # exibe imagem retornada pela função iaroi
11 mmshow(fishiaroi, title = 'iaroi(f, [45,8], [130,110]')

MVBook/fish.png

iaroi(f, [45,8], [130,110]

iaramp

Cria uma imagem em tons de cinza com dimensões dadas por s, com n faixas que possuem valores na escalada de cinza crescentes da esquerda para a direita ( Link para função)

Sintaxe

g = iaramp( s, n, range )

Entrada

  • s [H W], Altura e largura da imagem de saída.
  • n Número de faixas.
  • range [kmin, kmax], Valor mínimo e máximo na escala de cainza.

Saída

  • g Imagem de saída.
1 imgname = 'lenina.pgm'
2 I =mmreadgray(imgname)
3 mmshow(uint16(I),title=imgname)
4 
5 ramp = iaramp(I.shape, 5, [0,255])
6 mmshow(uint16(ramp),title='iaramp')
7 
8 Iramp = I + ramp
9 mmshow(uint16(Iramp),title=imgname+' + iaramp ')

lenina.pgm

iaramp

lenina.pgm + iaramp

O exemplo acima cria uma imagem utilizando a função iaramp. Em seguida é realizada a soma de cada pixel da imagem gerada com o pixel correspondente da imagem lenina.pgm. O resultado é uma mistura das duas imagens.

iacircle

Cria uma imagem binária contendo um circulo. ( Link para função)

Sintaxe

  • g = iacircle( s, r, c )

Entrada

  • s [rows cols] dimensões da imagem de saída
  • r raio do circulo
  • c [row col] posição do centro do circulo

Saída

  • g imagem binária

Segue abaixo um exemplo de uma imagem criada pela função iacircle. Essa imagem contém 200 pixels de altura (rows) e 300 pixels de largura (cols). O circulo possui raio 90 e centro na linha 100 coluna 150.

1 F = iacircle([200,300], 90, [100,150])
2 mmshow(uint16(F),title='iacircle')

iacircle

Implementação da função circle

A função mycircle é a implementação da equação do circulo g(x,y)

1 def mycircle(y, x, r, yc, xc):
2     x, y = iameshgrid( range(x), range(y)  )
3     F =  ((x-xc)**2+(y-yc)**2<=r**2)
4     return F
5 
6 F = mycircle(200, 300, 90 , 100, 150)
7 mmshow(uint16(F), title = 'mycircle' )

mycircle

Estudo das funções iaramp e iacircle

No estudo abaixo analisei as formas de mesclar o retorno das funções iacircle e iaramp com uma figura qualquer.

Conforme foi realizado acima na demonstração da função iaramp, a imagem de retorno foi mesclada com a figura lenina.pgm através da soma dos tons de cinza de cada pixel correspondente.

Já no caso da função iacircle, a soma dos tons de cinza de cada pixel não apresenta um bom resultado. Isso ocorre porque o retorno da função iacircle é uma imagem binária e a soma de 0 ou 1 a um ton de cinza qualquer não é muito perceptível.

Nesse caso a multiplicação apresenta um bom resultado ao mesclar o retorno de iaclicle com uma imagem qualquer.

Veja abaixo alguns testes que demonstram essas formas de se mesclar as imagens.

 1 imgname = 'gull.pgm'
 2 I =mmreadgray(imgname)
 3 
 4 ramp = iaramp(I.shape, 100, [0,255])
 5 
 6 BASE = iacircle([40,40], 20, [20,20])
 7 circle=iatile( BASE, I.shape  )
 8 
 9 
10 mmshow(uint16(ramp),title='iaramp')
11 mmshow(uint16(circle), title = 'iacircle')
12 mmshow(uint16(circle*ramp), title = 'iacircle*iaramp')
13 mmshow(uint16(I),title=imgname)
14 mmshow(uint16((circle*ramp)+I), title = '(iacircle*iaramp)+gull.pgm')

iaramp

iacircle

iacircle*iaramp

gull.pgm

(iacircle*iaramp)+gull.pgm