Exercício 3

Autor: Rodrigo Mologni Gonçalves dos Santos
Data: 23/03/2009

Questão 1

O código-fonte abaixo apresenta a função chessboard, criada pelo autor para gerar imagens semelhantes a tabuleiros de xadrez. Os parâmetros de entrada são: row, número de linhas (N); column, número de colunas (M); size, tamanho do pixel (L); minimum, menor intensidade luminosa; e maximum, maior intensidade luminosa.

 1 # Gera a imagem de um tabuleiro de xadrez
 2 def chessboard(row, column, size, minimum, maximum):
 3     image = numpy.zeros([row, column]) + minimum
 4 
 5     image[ ::2, 1::2] = maximum
 6     image[1::2,  ::2] = maximum
 7 
 8     image = numpy.kron(image, numpy.ones([size, size]))
 9 
10     return image

Itens 1 e 2

A Figura 1 representa um tabuleiro de xadrez (ou mosaico) formado por N = M = 100 células (ou ladrinhos) de L = 2 pixels.

Figura 1 - N = M = 100 e L = 2.

Item 3

A Figura 2 representa um tabuleiro de xadrez (ou mosaico) formado por N = M = 100 células (ou ladrilhos) de L = 2 pixels, com intensidades luminosas mínima e máxima iguais a 110 e 111, respectivamente.

Figura 2 - N = M = 100 e L = 2 com intensidades luminosa iguais a 110 e 111.

Item 4

A Figura 3 ilustra a percepção da visão humana para uma variação de intensidade entre níveis de cinza da imagem de um tabuleiro de xadrez (ou mosaico) formado por N = M = 100 células (ou ladrilhos) de L = 2 pixels, com intensidade luminosa mínima igual a 110.

(a) Variação igual a 2.

(b) Variação igual a 4.

(c) Variação igual a 8.

(d) Variação igual a 16.

(e) Variação igual a 32.

(f) Variação igual a 64.

Figura 3 - Percepção visual da variação de intensidades entre níveis de cinza.

De acordo com Gonzalez e Woods (2000), se o número de níveis de intensidade usados para representar uma imagem monocromática inclui apenas uma ou duas dúzias de níveis, o olho humano é bem capaz de detectar supostos contornos. Dizem também que uma imagem de 32 níveis já apresenta um conjunto quase imperceptível de sulcos muito finos nas áreas de níveis de cinza suaves. Logo, baseado em suas afirmações, pode-se concluir que o olho humano é capaz de discernir variações de intensidade abaixo de 32 níveis de cinza. Com isso, a variação de intensidade necessária para que o olho seja capaz de identificar variações em 256 níveis de cinza deve ser de no mínimo 8.

Item 5

A Figura 4 ilustra uma variação nos valores de N, M e L, mantendo-se o tamanho original da imagem (200 x 200 pixels), com intensidades luminosas mínima e máxima iguais a 110 e 114, respectivamente. Note que a variação entre as intensidades é igual a 4, ou seja, abaixo da variação mínima necessária para ser diferenciada visualmente.

(a) N = M = 200 e L = 1.

(b) N = M = 100 e L = 2.

(c) N = M = 50 e L = 4.

(d) N = M = 25 e L = 8.

(e) N = M = 8 e L = 25.

(f) N = M = 4 e L = 50.

Figura 4 - Percepção visual para detalhes.

De acordo com Gonzalez e Woods (2000), o fato de que o brilho percebido não seja uma função simples da intensidade é claramente demonstrado por dois fenômenos. O primeiro, chamado de padrão banda de Mach, é baseado no fato de que o sistema visual tende a substimar ou superestimar a intensidade próxima aos contornos entre as regiões de diferentes intensidades. O segundo, chamado de contraste simultâneo, é relacionado ao fato de que o brilho percebido de uma região não depende simplesmente da sua intensidade.

Pode-se concluir, portanto, que com o aumento do tamanho dos pixels, a variação entre as intensidades passa a ser perceptível pela visão. Isso porque os pixels de brilho inferior a variação mínima necessária para serem distinguidos pelo olho, deixam de fundir-se próximo aos contornos (padrão banda de Mach) e o contraste entre eles torna-se perceptível (contraste simultâneo).

Questão 2

O código-fonte abaixo apresenta três funções, implementadas pelo autor, para a manipulação de imagens digitais. São elas: reduce e enlarge, responsáveis respectivamente pela redução e ampliação da resolução espacial, e scale, responsável pela redução da resolução em nível de cinza.

 1 # Simula a redução da resolução espacial na aquisição da imagem.
 2 def reduce(image, factor):
 3     h, w = image.shape
 4     x, y = meshgrid(range(h / factor), range(w / factor))
 5 
 6     return image[y * factor, x * factor]
 7 
 8 # Simula a ampliação da resolução espacial na aquisição da imagem.
 9 def enlarge(image, factor):
10     h, w = image.shape
11     x, y = meshgrid(range(h * factor), range(w * factor))
12 
13     return image[y / factor, x / factor]
14 
15 # Simula a redução da resolução em nível de cinza na aquisição da imagem.
16 def scale(image, factor):
17     min   = image.min()
18     max   = image.max()
19     image = ianormalize(image, [0, 256 / factor - 1])
20     image = ianormalize(image, [min, max])
21 
22     return image

Item 1

A Figura 5 ilustra a redução da resolução espacial da imagem de um fotógrafo (a) para fatores de redução igual a 2 (b), 4 (c) e 8 (d).

(a) N = M = 256 e L = 1.

(b) N = M = 128 e L = 2.

(c) N = M = 64 e L = 4.

(d) N = M = 32 e L = 8.

Figura 5 - Simulação da redução da resolução espacial.

Item 2

A Figura 6 ilustra a redução da resolução de nível de cinza da imagem de um fotógrafo (a) para fatores de redução igual a 2 (b), 4 (c), 8 (d), 16 (e), 32 (f), 64 (g) e 128 (h).

(a) 256 níveis de cinza.

(b) 128 níveis de cinza.

(c) 64 níveis de cinza.

(d) 32 níveis de cinza.

(e) 16 níveis de cinza.

(f) 8 níveis de cinza.

(g) 4 níveis de cinza.

(h) 2 níveis de cinza.

Figura 6 - Simulação da redução da resolução de nível de cinza.

Item 3

A Figura 5 (a) mostra uma imagem de um fotógrafo de 256 x 256 pixels e 256 níveis de cinza. A Figura 5, itens "b" a "d", mostra os resultados da redução da resolução espacial de N = M = 256 para N = M = 128, 64 e 32, respectivamente. Em todos os casos o número de níveis de cinza permitido foi 256. Sendo a mesma a área de exibição usada para cada imagem (um campo de exibição de 256 x 256), os pixels nas imagens de menor resolução tiveram de ser duplicados, de maneira a preencher toda a área de exibição. Essa "replicação de pixels" produziu um efeito de xadrez, que é particulamente visível nas imagens de resolução mais baixa.

A Figura 6 ilustra os efeitos produzidos pela diminuíção do número de bits usados para representar o número de níveis de cinza em uma imagem. A Figura 6 (a) mostra a mesma imagem de 256 x 256 pixels de 8 bits usada na discussão anterior. A Figura 6, itens "a" a "h", foi obtida ao se reduzir o número de bits de 7 até 1, mantendo-se a resolução espacial constante em 256 x 256 pixels. As imagens de 256, 128 e 64 níveis de cinza são visualmente idênticas para todos os propósitos práticos. A imagem de 32 níveis (d), entretanto, desenvolveu um conjunto quase imperceptível de sulcos muito finos nas áreas de níveis de cinza suaves. Esse efeito, é geralmente bastante visível em imagens exibidas usando 16 ou menos níveis de cinza igualmente espaçados, como mostrado claramente nas imagens "e" a "h".

Referências

GONZALEZ, Rafael C.; WOODS, Richard E. Processamento de Imagens Digitais. Edgar Blücher, 2000.