Exercício 5 - Mapeamento de contraste ou de intensidade

Autor: gkaneblai
Data: 17/04/2009

1. Estudar a funcao iaapplylut

1. Io = mmreadgray('MDX4422.jpg')
2. adshow(Io, title = "imagem original")
3. mmplot([[iahistogram(Io)]],['set yrange [0:255]','set xrange [0:255]'])
4. 
5. Tn = 255 - arange(256)
6. ITn = iaapplylut(Io,Tn)
7. 
8. adshow(ITn, title = "imagem negativa")
9. mmplot([[iahistogram(ITn)]],['set yrange [0:255]','set xrange [0:255]'])

imagem original

imagem negativa

2. Reprogramar a funcao iaapplylut para que ela seja mais simples. Se possivel.

01. def kapplylut(Io,T):
02.     return T[Io]
03. 
04. Tp = arange(256)
05. Tp[0:127]= 2 * Tp[0:127]
06. Tp[128:255] = 2 * (255 - Tp[128:255])
07. mmplot([[Tp]],['set yrange [0:255]','set xrange [0:255]'])
08. 
09. ITp = iaapplylut(Io,Tp)
10. mmplot([[iahistogram(ITp)]],['set yrange [0:255]','set xrange [0:255]'])
11. adshow(ITp, title = "kapplylut - funcao triangular")

kapplylut - funcao triangular

3. Implementar uma função interativa de melhoria de contraste da imagem. Deve-se usar a função monotonicamente crescente de intensidade formada por 3 segmentos de retas. Os dois pontos de inflexão destas retas devem ser calculados em função de 4 parâmetros: Wi,Li largura e intensidade média de entrada, e Wo, Lo, largura e intensidade média de saída. Existem algumas situações que vocês precisam prever o comportamento desta operação dependendo dos parâmetros passados. Utilizar algumas imagens para ilustrar o uso desta função interativa. Uma ilustração desta função, porém apenas com os parâmetros Wi e Li podem ser vistas em http://www.dca.fee.unicamp.br/DIPcourse/html-dip/c4/s3/front-page.html

01. def kcontraste (Li, Wi, Lo, Wo):
02. 
03.     P0 = [ 0 , 0 ]
04.     P1 = [ Li-(Wi/2), Lo-(Wo/2)]
05.     P2 = [ Li+(Wi/2), Lo+(Wo/2)]
06.     P3 = [ 255, 255 ]
07. 
08.     S1a = float(P1[1])/float(P1[0])
09.     S2a = float(P2[1]-P1[1])/float(P2[0]-P1[0])
10.     S3a = float(255-P2[1])/float(255-P2[0])
11. 
12.     Tc = arange(256)
13. 
14.     Tc[P0[0]:P1[0]]= (S1a * Tc[P0[0]:P1[0]])
15.     Tc[P1[0]:P2[0]]= (S2a * Tc[P1[0]:P2[0]]) + (P1[1]-S2a*P1[0])
16.     Tc[P2[0]:P3[0]]= (S3a * Tc[P2[0]:P3[0]]) + (P2[1]-S3a*P2[0])
17. 
18.     return Tc
19. 
20. 
21. 
22. Tlw = kcontraste (100, 80, 200, 80)
23. mmplot([[Tlw]],['set yrange [0:255]','set xrange [0:255]'])
24. 
25. 
26. ITlw = iaapplylut(Io,Tlw)
27. adshow(ITlw , title = "usando Li = 100, Lo = 200, Wi=Wo=80 ")
28. mmplot([[iahistogram(ITlw)]],['set yrange [0:255]','set xrange [0:255]'])

usando Li = 100, Lo = 200, Wi=Wo=80