Resolução Espacial e a Resolução Radiométrica

Autor: cronuxs
Data: 25/03/2009

Exercicio

O objetivo destes dois exercícios é o de praticar com a resolução espacial e a resolução radiométrica. Estes exercícios podem ser entendidos como sugestões mínimas. Fique à vontade de mudar e flexibilizar o enunciado caso você ache que outras demonstrações sobre o conceito podem ser mais interessantes.

1. O objetivo deste exercício é verificar a questão da resolução espacial e radiométrica em imagens em níveis de cinza.

Utilize um dos programas de xadrez desenvolvido anteriormente. Considere:

  • o tabuleiro formado por N x M mosaicos, tendo cada mosaico tamanho L x L pixels,
  • uma imagem monocromática com 256 níveis.
  1. Atribua ao mosaico escuro o valor mínimo da escala de cinza e ao mosaico claro o valor máximo da escala de cinza.
  2. Exiba a imagem gerada para N = M = 100 e L = 2.
  3. Atribua aos mosaicos claros e escuros valores de intensidade próximos (por exemplo 110 e 111, numa escala de 0 a 255) e considerando os mesmos valores do item 2 exiba a nova imagem gerada. Explique o resultado obtido. Atenção, dependendo de como a imagem é observada, pode haver um processo automático de realce. Para evitar isto, coloque um pixel na imagem com valor 0 e outro pixel com valor 255, para garantir que não seja feito algum realce automático.
  4. Determine o valor mínimo de separação entre níveis de cinza para que o tabuleiro seja observável.
  5. Mantendo o tamanho da imagem em 200 x 200 pixels, varie os valores para N, M e L e verifique o efeito do tamanho do mosaico (L) na observabilidade do tabuleiro. Comente os resultados obtidos.
  1. Escolha uma imagem níveis de cinza:
    1. Simule a redução da resolução espacial na aquisição da imagem (menor número de sensores cobrindo a imagem do objeto). Considere fatores de redução 2, 4 e 8.
    2. Simule a redução da resolução em nível de cinza na aquisição da imagem. Considere fatores de redução 2, 4, 8 e 16.
    3. Explique a abordagem considerada na solução dos itens 1 e 2. Comente e justifique os resultados obtidos.

Resolução Item 1

 1 def tabuleiroDiferente(N,M,L,separacaoDeTons = 255/2):
 2 
 3     claro = 255/2 + separacaoDeTons/2
 4     escuro = 255/2 - separacaoDeTons/2
 5 
 6     f = zeros((L*2,L*2))
 7 
 8     f[0:L,0:L] = escuro
 9     f[L:L*2,L:L*2] = escuro
10 
11     f[0:L,L:L*2] = claro
12     f[L:L*2,0:L] = claro
13 
14     g = iatile(f, (N*2,M*2))
15 
16     g[0,0]= 0
17     g[0,1]= 255
18 
19     return g
20 
21 mmshow(tabuleiroDiferente(100,100,2,10))
Warning: downcasting image from double to uint16 (may lose precision)

Analise do resultado obtido (itens 1.1, 1.2, 1.3)

O resultado obtido ilustra o fato de que como os valores 110 e 100 são bem próximos, a percepção humana pensa que é uma cor intermediaria, pois o olho mal consegue distinguir estes dois tons.

Analise do resultado obtido (item 1.4)

1 for i in range(0,20,3):
2     mmshow(tabuleiroDiferente(100,100,2,i),title="Diferença de tons= "+str(i))

Diferença de tons= 0

Diferença de tons= 3

Diferença de tons= 6

Diferença de tons= 9

Diferença de tons= 12

Diferença de tons= 15

Diferença de tons= 18

A distinção dos tons, depende mto da resolução que o computador do observador se encontra, e a qualidade do monitor.

No meu caso, só pude perceber a diferença quando existe uma diferença de pelo menos 6 tons, caso contrario, não foi possível

Análise do resultado obtido (item 1.5)

  • Variando o tamanho de N e de M
1 def tabuleiroIrregular(Size,M,N,L,T=255/2):
2     I = zeros(Size)
3     F = tabuleiroDiferente(M,N,L,T)
4     I[0:min(len(F),len(I)),0:min(len(F[0]),len(I))] = F[0:min(len(F),len(I)),0:min(len(F[0]),len(I))]
5     return I
6 
7 for i in range(50,101,10):
8     for j in range(50,101,10):
9         mmshow(tabuleiroIrregular((200,200),i,j,2),title="N = "+str(i)+", M = "+str(j))

N = 50, M = 50

N = 50, M = 60

N = 50, M = 70

N = 50, M = 80

N = 50, M = 90

N = 50, M = 100

N = 60, M = 50

N = 60, M = 60

N = 60, M = 70

N = 60, M = 80

N = 60, M = 90

N = 60, M = 100

N = 70, M = 50

N = 70, M = 60

N = 70, M = 70

N = 70, M = 80

N = 70, M = 90

N = 70, M = 100

N = 80, M = 50

N = 80, M = 60

N = 80, M = 70

N = 80, M = 80

N = 80, M = 90

N = 80, M = 100

N = 90, M = 50

N = 90, M = 60

N = 90, M = 70

N = 90, M = 80

N = 90, M = 90

N = 90, M = 100

N = 100, M = 50

N = 100, M = 60

N = 100, M = 70

N = 100, M = 80

N = 100, M = 90

N = 100, M = 100

Como foi possivel observar, alterações no N,M não influem em nada a percepção visual da cor, e apenas modificam o tamanho do objeto.

  • Variando o L
1 def tabuleiroIrregular(Size,M,N,L,T=255/2):
2     I = zeros(Size)
3     F = tabuleiroDiferente(M,N,L,T)
4     I[0:min(len(F),len(I)),0:min(len(F[0]),len(I))] = F[0:min(len(F),len(I)),0:min(len(F[0]),len(I))]
5     return I
6 
7 for i in range(1,10,1):
8         mmshow(tabuleiroIrregular((200,200),100,100,i),title="L = "+str(i))

L = 1

L = 2

L = 3

L = 4

L = 5

L = 6

L = 7

L = 8

L = 9

Quanto maior o L, maior o Ladrilho, e mais facilmente o olho humano consegue distinguir as duas cores pois elas se realçam,

Resolução Item 2

Item 2.1

 1 def reducaoResolucaoEspacial(img,fator):
 2 
 3     for i in range(0,len(img),fator):
 4         for j in range(0,len(img[0]),fator):
 5             img[i:i+fator,j:j+fator] = average(img[i:i+fator,j:j+fator])
 6 
 7     return img
 8 
 9 FILENAME = 'lenina.pgm'
10 for i in range(8):
11     i = 2**i
12     I = mmreadgray(FILENAME)
13     mmshow(reducaoResolucaoEspacial(I,i),title="Fator = "+str(i))

Fator = 1

Fator = 2

Fator = 4

Fator = 8

Fator = 16

Fator = 32

Fator = 64

Fator = 128

Para resolver este exercicio a imagem foi dividida em vários quadrados contendo fator X fator pixels, e neste quadrado foi feito uma média desses valores, e esta média foi atribuida como valor deste quadrado inteiro.

Item 2.2

 1 def reducaoResolucaoRadiometrico(img,fator):
 2 
 3     maximo = img.max()
 4     minimo = img.min()
 5 
 6     img = ianormalize(img,[0,(maximo-minimo)/fator])
 7     img = ianormalize(img,[minimo,maximo])
 8     return img
 9 
10 FILENAME = 'lenina.pgm'
11 for i in range(8):
12     i = 2**i
13     I = mmreadgray(FILENAME)
14     mmshow(reducaoResolucaoRadiometrico(I,i),title="Fator = "+str(i))

Fator = 1

Fator = 2

Fator = 4

Fator = 8

Fator = 16

Fator = 32

Fator = 64

Fator = 128

Para resolver este item foi realizado uma normalização com o fator, para que valores intermediarios sejam perdidos e logo em seguida uma normalização para a escala da cinza de 0 a 255, desta forma não terão valores intermediarios.