imagem digital -...

38
Imagem Digital 1 Marcelo Gattass 17/9/2015 Imagem Digital Depois da cor, o segundo elemento fundamental da Computação Gráfica é a Imagem Digital. Mas, antes de discutirmos a versão digital, vamos conceituar melhor o que entendemos por imagem. No sentido comum, imagem é uma representação gráfica de objetos que nos cercam ou que criamos. No contexto deste capítulo, a imagem que nos interessa é aquela produzida por computador que se assemelha a uma foto – ou seja, é uma região retangular do espaço na qual em cada ponto percebemos uma cor ou uma intensidade de cinza. Por questão de simplicidade, vamos inicialmente tratar do modelo das fotos monocromáticas ou, como se diz comumente, fotos em preto e branco. A Fig. 3.1 (a) mostra uma foto de um passarinho num poste com uma linha marcada. O valor da intensidade de cinza, medida de 0 a 255, ao longo desta linha está indicado na Fig. 3.1(b). Fig. 3.1 – Valor da intensidade de cinza ao longo de uma linha da foto. Se considerarmos que, para cada valor no interior do retângulo da foto, temos uma intensidade de cinza de 0 a 255, podemos, abstratamente, pensar em uma imagem monocromática como sendo uma função do R 2 em R ou uma superfície no R 3 , como ilustra a Fig. 3.2. Fig. 3.2 – Modelo matemático para uma imagem: função do R 2 em R. 0 50 100 150 200 250 0 100 200 300 400 500 600 (a) (b) u v L L(u,v)

Upload: duongcong

Post on 26-Jan-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 1

Marcelo Gattass 17/9/2015

Imagem Digital

Depois da cor, o segundo elemento fundamental da Computação Gráfica é a Imagem Digital. Mas, antes de discutirmos a versão digital, vamos conceituar melhor o que entendemos por imagem. No sentido comum, imagem é uma representação gráfica de objetos que nos cercam ou que criamos. No contexto deste capítulo, a imagem que nos interessa é aquela produzida por computador que se assemelha a uma foto – ou seja, é uma região retangular do espaço na qual em cada ponto percebemos uma cor ou uma intensidade de cinza.

Por questão de simplicidade, vamos inicialmente tratar do modelo das fotos monocromáticas ou, como se diz comumente, fotos em preto e branco. A Fig. 3.1 (a) mostra uma foto de um passarinho num poste com uma linha marcada. O valor da intensidade de cinza, medida de 0 a 255, ao longo desta linha está indicado na Fig. 3.1(b).

Fig. 3.1 – Valor da intensidade de cinza ao longo de uma linha da foto.

Se considerarmos que, para cada valor no interior do retângulo da foto, temos uma intensidade de cinza de 0 a 255, podemos, abstratamente, pensar em uma imagem monocromática como sendo uma função do R2 em R ou uma superfície no R3, como ilustra a Fig. 3.2.

Fig. 3.2 – Modelo matemático para uma imagem: função do R2 em R.

0

50

100

150

200

250

0 100 200 300 400 500 600

(a) (b)

u

v

L

L(u,v)

Page 2: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 2

Marcelo Gattass 17/9/2015

Se a foto for colorida, não podemos medir a cor por apenas um número real, sendo necessários mais valores. Uma maneira simples de evoluirmos o modelo monocromático descrito acima consiste em considerar, em vez de uma, três funções distintas: uma para cada canal RGB. A Fig. 3.3 ilustra esta decomposição, na qual para cada canal o valor da intensidade é convertido numa escala de preto (zero) para branco (255).

RGB

R (Vermelho)

G (Verde)

B (Azul)

Fig. 3.3 – Decomposição de uma imagem colorida em três canais: RGB.

Naturalmente, também podemos pensar na imagem colorida como sendo uma função que atribui a cada ponto do domínio retangular um ponto no espaço de cores. Como visto no capítulo anterior, este espaço pode ser RGB, RGBA, CMY, CMYK, etc. A Fig. 3.4 ilustra esta idéia para o espaço RGB.

Fig. 3.4 – Imagem colorida como um mapeamento do R2 em R3.

A conveniência de escolhermos este ou aquele modelo para imagens coloridas depende da aplicação e é, de certa forma, uma decisão arbitrária.

R

G

Bu

v

Page 3: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 3

Marcelo Gattass 17/9/2015

Aquisição de imagens A natureza de uma imagem digital pode ser melhor compreendida se analisamos o seu processo de aquisição. Numa máquina fotográfica digital, um sistema de lentes projeta a cena 3D no plano correspondente ao filme. Por enquanto, vamos desconsiderar o processo de projeção para estudar os passos fundamentais que se seguem: amostragem, quantização e codificação. Antes de discutirmos o processo de aquisição de uma imagem que trata de um domínio bidimensional, é interessante consideramos primeiro o estudo de uma função f(x) genérica que passe pelos mesmos processos de amostragem e quantização, como ilustra a Fig. 3.5. O processo de amostragem consiste em dividir o domínio (eixo x) em uma partição indicada pelas marcas na figura. Dentro de cada intervalo escolhemos um valor para representar a função naquele trecho. Isto pode ser tanto o valor da função naquele ponto quanto outro valor que leve em conta o comportamento da função no trecho todo, como uma altura média, por exemplo.

(a) amostragem

(b) quantização

Fig. 3.5 – Amostragem e quantização de uma função f(x).

Após a amostragem temos a quantização. O valor amostrado pode ser adquirido como um tipo ponto flutuante ou inteiro longo, que requerem mais bits do que podemos dispor. Para

x

função originalf(x)

amostra

0

1

2

3

4

5

6

x

função originalf(x)

amostra

0

1

2

3

4

5

6

0

1

2

3

4

5

6

x

função original

amostraquantizada

f(x)

×

×

× ×

×

× × ×

×

× ×

×

×

Page 4: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 4

Marcelo Gattass 17/9/2015

reduzir o tamanho da representação do número na memória do computador, dividimos o eixo y em classes e escolhemos um representante para cada classe. No exemplo da Fig. 3.5, o eixo é particionado uniformemente com um intervalo de 1.0. Valores no intervalo (0.5, 1.5], por exemplo, são representados como 1. Assim, a função amostrada e quantizada pode ser representada através do vetor (3, 4, 5, 5, 4, 2, 2, 3, 5, 5, 4, 2). Este vetor representa, dentro das aproximações do nosso modelo, os infinitos pontos da função original. Para armazenar cada um dos valores quantificados como um tipo float de 4 bytes precisamos de 52 bytes. Podemos também codificar esta mesma informação com 4 bytes para indicar o tamanho do intervalo uniforme utilizado para quantização, 1.0, e armazenar o número do intervalo em que cada amostra quantizada está (3, 4, 5, 5, 4, 2, 2, 3, 5, 5, 4, 2). Este último vetor pode ser do tipo char em C, que consome apenas um byte por valor e o total de memória necessária seria 17 bytes, incluindo os quatro que definem o intervalo. Ou seja, neste caso a codificação reduziu razoavelmente a memória necessária sem nenhuma perda adicional de informação. Se admitirmos que o intervalo seja sempre 1.0 podemos omitir esta informação. Mais ainda, quando admitimos algum tipo de perda, a redução pode ser bem maior, como veremos na quantização de imagens.

O processo de aquisição de uma imagem não difere fundamentalmente do exemplo da função f(x). A Fig. 3.5 ilustra as etapas de amostragem, quantização e codificação de uma imagem em tons de cinza.

Amostragem A etapa de amostragem corresponde a definir uma cor para cada retângulo correspondente a um pixel. Como possivelmente a cor varia dentro da área do pixel, a cor uniforme escolhida deve gerar uma aproximação da percepção de cor que a variação original produzia.

Fig. 3.5 – Amostragem, quantização e codificação.

amostragemImagem de tons

contínuos

55 55 55 55 55 55 5555 20 22 23 45 55 5555 55 10 09 11 55 5555 55 43 42 70 55 5555 55 28 76 22 55 5555 55 55 55 55 55 55

5555 5555 5555 5555 5555 5555 55555555 2020 2222 2323 4545 5555 55555555 5555 1010 0909 1111 5555 55555555 5555 4343 4242 7070 5555 55555555 5555 2828 7676 2222 5555 55555555 5555 5555 5555 5555 5555 5555

64x54

64x54 - 16 cores

codificação

Imagem amostrada

Imagem amostrada equantizada

5*55, 1*55, 1*20, 1*22, ….

quantização

Imagem amostrada, quantizada e codificada

Page 5: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 5

Marcelo Gattass 17/9/2015

A Fig. 3.6, extraída de uma tela do Adobe PhotoShop™, ilustra os parâmetros de resolução espacial oriundos deste processo de amostragem. Devemos notar que, além da resolução medida em número de pixels na largura (width) e na altura (height), a imagem pode ter um tamanho de impressão que define uma resolução em pixels/polegada ou em pixels/milímetro. Os monitores de computadores geralmente trabalham na faixa de 75 pixels/polegada e as impressoras geralmente trabalham com mais de 300 pixels/polegada. A imagem dos lírios da Fig. 3.6, por exemplo, tem uma boa resolução para aparecer no seu tamanho normal em um monitor mas não usaria todo o potencial de uma impressora, a menos que ela fosse exibida num tamanho menor.

Fig. 3.6 – Resolução especial de uma imagem no Adobe PhotoShop™.

Outro aspecto interessante na tela de diálogo é a caixa de diálogo que pergunta qual o método para redefinir a resolução da imagem: mais próximo, bilinear ou bicúbico. Esta escolha se refere ao fato de que, para mudar o número de pixels tanto na largura quanto na altura, precisamos re-amostrar a imagem. Para ilustrar o que está envolvido nesta re-amostragem, consideremos novamente a função f(x) da Fig. 3.5 da forma ilustrada na Fig. 3.7, onde as linhas verticais correspondem à nova discretização espacial. Precisamos saber que valores devemos atribuir a cada um destes novos intervalos. Note que estes intervalos correspondem aos pixels no caso das imagens.

(a) aumento de resolução.

x

f(x)

×

×

× ×

×

× × ×

×

× ×

×

×função reconstruídapelo vizinho mais próximo

função reconstruídapor interpolação linear

função original

0

1

2

3

4

5

6

Page 6: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 6

Marcelo Gattass 17/9/2015

(b) redução de resolução.

Fig. 3.7 – Reconstrução e re-amostragem de f(x) em diferentes resoluções.

Dois critérios geométricos simples podem ser usados para estimar o valor da amostra num novo intervalo: (a) o valor da função num ponto do intervalo, ou (b) um valor médio ao longo dele. Se a função for linear no intervalo todo, a interpolação no meio do intervalo é equivalente à altura média. Note, entretanto, que, apesar de termos mantido o gráfico da função original na Fig. 3.7, ela não é mais conhecida nesta etapa. Para fazermos as estimativas dispomos apenas dos valores amostrados quantizados (marcados com um × nas figuras). Para qualquer um dos critérios geométricos enunciados acima, precisamos reconstruir uma aproximação para a função original a partir das amostras quantizadas. Na Fig. 3.7 apresentamos duas hipóteses: valor mais próximo e interpolação linear. A interpolação cúbica não está mostrada para não sobrecarregar a figura. Ela apenas permitiria uma aproximação mais suave que a linear. A janela do Adobe PhotoShop™ se refere às duas últimas interpolações como bilinear e bicúbica, uma vez que as interpolações no pixel são feitas simultaneamente nas direções x e y. Se examinarmos as reconstruções da função f(x), vemos que elas são pouco satisfatórias, incorrendo em grandes erros quando f(x) varia muito. Este fato advém da amostragem pobre em pontos nesta região de grande variação. A Fig. 3.8 ilustra uma função seno amostrada com uma amostragem ruim e outra boa. Para capturar corretamente as oscilações de freqüência ω de uma função, Nyquist estabeleceu que o intervalo de amostragem deve ser menor que 1/(2ω) . Funções amostradas em intervalos maiores que este valor, conhecido como limite de Nyquist, não podem ser adequadamente reconstruídas a partir apenas das amostras.

(a) freqüência de amostragem muito baixa.

x

f(x)

×

×

× ×

×

× × ×

×

× ×

×

×função reconstruídapelo vizinho mais próximo

função reconstruídapor interpolação linear

função original

0

1

2

3

4

5

6

x

f(x)

x

f(x)

Page 7: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 7

Marcelo Gattass 17/9/2015

(b) freqüência de amostragem boa.

Fig. 4.7 – Amostragens uniformes da função seno.

Um último ponto a destacar na questão da re-amostragem da função f(x) é que, quando o intervalo de amostragem é reduzido (aumento da resolução espacial), os novos valores podem ser calculados por interpolação dos valores antigos. Quando o intervalo é aumentado, reduzindo a resolução espacial, precisamos combinar os valores dos intervalos antigos para estimar um novo valor. Ou seja: quando aumentamos a resolução, interpolamos; quando reduzimos, temos que fazer uma média ponderada. A estratégia de utilizar o valor mais próximo é a que mais induz a erros mas é a mais eficiente, por isso é comumente utilizada em animações de jogos, onde a qualidade é um fator secundário face à eficiência. A Fig. 3.8 ilustra a redução e o aumento do número de pixels do personagem Papa-Léguas da Hanna-Barbera™ em três resoluções. Primeiramente, as imagens de baixa resolução são obtidas a partir da imagem de resolução mais alta com reduções de 50%. Depois aumentamos a resolução para voltar a resoluções mais altas. As mudanças de resolução do lado inferior esquerdo da figura utilizam interpolação bicúbica e as do lado superior direito utilizam o valor mais próximo. Dois pontos são importantes de destacar. O primeiro é que, ao reduzirmos a resolução espacial de uma imagem, perdemos informações e conseqüentemente não temos como voltar à imagem original. Uma maneira simples de observarmos isto é contando o número de pixels. O segundo ponto é que nem sempre a interpolação bicúbica produz resultados significativamente melhores. Esta é uma imagem típica de desenho animado, na qual as cores não variam suavemente. A interpolação bicúbica é melhor quando, ao interpolarmos com suavidade, reconstruímos melhor a função original, o que não é o caso para esta imagem em particular. A imagem do Papa-Léguas é descontínua e a imposição de continuidade não melhora muito o processo de reconstrução, podendo inclusive atrapalhar.

Fig. 3.8 – Mudanças de resolução espacial de uma imagem.

x

f(x)

x

f(x)

312×194

156×9778×48

312×194 312×192

78×49

156×97312×194

312×194

bicúbica

mais próximo

Page 8: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 8

Marcelo Gattass 17/9/2015

Quantização Após o processo de amostragem, temos um conjunto finito de valores de tons de cinza (ou cores), mas estes valores podem estar na forma analógica ou representados por números em ponto flutuante com muitos bits. Portanto, o segundo processo importante na aquisição de uma imagem é a quantização. Este processo inicialmente seleciona um conjunto de tons (geralmente 256) para os valores de intensidade de cinza (ou de cada canal de cor RGB). A seguir, cada tom de cinza (ou cada intensidade de cada canal de cor) é trocado pelo seu representante no conjunto escolhido. Assim, por exemplo, podemos representar cada pixel de uma imagem monocromática com um byte e cada pixel de uma imagem colorida com três bytes (RGB). Por questões de alinhamento de palavras na memória, diversas placas de vídeo armazenam os 3 bytes de cor em uma palavra de 32 bits (long int). Alguns programas também complementam os canais RGB com um canal chamado Alfa, resultando em uma informação de 32 bits, RGBA. Este canal é geralmente associado à transparência do pixel e é utilizado para controlar a sobreposição de duas imagens, como será descrito posteriormente.

Cores com 24 ou 32 bits são chamadas de true color porque normalmente se entende que 224, ou 16 milhões de cores, são suficientes para representar os tons mais sutis que monitores e impressoras atuais são capazes de reproduzir. É interessante notarmos que um ser humano normal só é capaz de distinguir 400 mil cores diferentes de todo o espectro de cores visíveis, ou seja, menos que 219. O número de cores que um ser humano normal é capaz de distinguir na tela de um monitor depende de cada equipamento, mas é certamente bem menor que 400 mil. Em função disto, as placas gráficas costumam oferecer uma opção, chamada hi color, que armazena as cores em uma palavra de 2 bytes (short int, em C) utilizando 15 ou 16 bits e reproduzindo 32 ou 65 mil cores, respectivamente. Quando as placas utilizam 15 bits, cada canal R, G ou B utiliza 5 bits que reproduzem 32 tons daquela cor. Quando as placas utilizam 16 bits, é comum estender a representação do canal verde para 6 bits ou 64 tons1.

O número de cores atualmente entendido como o mínimo para representar razoavelmente uma imagem complexa é 256. Nas placas de vídeo de 256 cores, cada pixel é representado por um byte e o significado de cada byte depende de uma tabela de cores. Ou seja, ao invés de armazenar a cor, este sistema armazena um índice de uma tabela. A cor é encontrada na linha correspondente da tabela de cores, como ilustra a Fig. 3.9. Note que a memória que armazena os índices de imagem de 800×600 pixels possui 64 mil bytes e a tabela de cores apenas 768 bytes. A tabela de cores é também denominada palheta de cores (em inglês “color table”, “look up table” ou “LUT”). Um ponto importante a destacar nestas imagens é que, se mudarmos a resolução espacial e quisermos utilizar uma reconstrução bilinear ou bicúbica, a nova cor gerada possivelmente não estará na palheta de cores.

1 O olho humano é mais sensível ao verde que aos outros canais, como está apresentado no capítulo sobre cores.

Page 9: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 9

Marcelo Gattass 17/9/2015

Fig. 3.9 – Esquema de representação de cores numa imagem indexada.

O problema da quantização admite soluções simples ou complexas. Para aprofundarmos um pouco mais este assunto, vamos tratar da redução do número de cores de uma imagem true color para uma imagem indexada. A Fig. 3.10 mostra a janela de diálogo do Jasc Paint Shop Pro™ para esta redução. Nesta janela, o usuário deve fazer duas escolhas básicas para definir o método de quantização a ser adotado: como a palheta deve ser determinada e como as cores dos pixels devem ser substituídas.

Vamos examinar primeiramente os métodos de escolha da palheta de cores. O diálogo da Fig. 3.10 oferece três opções: palheta determinada por um algoritmo baseado no corte mediano, palheta determinada por um algoritmo baseado na octree e o uso de uma palheta fixa, que é mais segura para uso na Web.

Fig. 3.10 – Algoritmos de redução de cores no Jasc Paint Shop Pro™.

A principal diferença entre as três opções de palhetas está na questão de usarmos uma palheta fixa para todas as imagens ou se o algoritmo deve calcular, para cada imagem, qual a palheta de cores que melhor se adapte a ela. Quando escolhemos a quantização uniforme ou uma palheta de cores fixa, o problema é razoavelmente simples. Para decidirmos qual cor da palheta (ri, gi, bi) melhor representa uma determinada cor (r, g, b) da imagem basta calcularmos a distância dessa tonalidade a cada uma das cores da palheta e escolher a menor. A distância neste caso pode ser simplesmente a distância euclidiana no espaço RGB:

222 )()()( iii bbggrrd −+−+−= (3.1)

000

BGR

000

BGR

Tabela de coresMemória gráfica

Page 10: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 10

Marcelo Gattass 17/9/2015

Quanto, entretanto, deixamos em aberto a escolha das cores da palheta de modo a minimizar os erros da quantização, os algoritmos se tornam bastante mais complexos. Os algoritmos baseados no corte mediano e na octree pertencem a esta classe de palhetas adaptativas. A Fig. 3.11 ilustra a diferença de resultado que podemos obter com o algoritmo de corte mediano e de palheta fixa. Note que a imagem do avião fica muito mais deteriorada com a utilização da palheta fixa que a imagem dos lírios aquáticos. Isto ocorre porque as cores da imagem do avião têm muitos tons de azul e as palhetas fixas contêm amostras de todo o espectro de cores.

Fig. 3.11 – Alguns resultados dos algoritmos de quantização.

A idéia geral do algoritmo de corte mediano é que cada cor da palheta represente o mesmo número de cores da imagem original. A forma de implementá-lo consiste em dividir recursivamente as caixas envolventes das cores da imagem no espaço RGB na sua maior dimensão, de forma que cada sub-retângulo contenha o mesmo número de cores. O algoritmo abaixo descreve este procedimento:

• Comece calculando a caixa envolvente alinhada com os eixos que melhor ajuste os pontos no espaço RGB que representam as cores da imagem. Quando dois pixels da imagem têm a mesma cor, então dois pontos estão na mesma posição.

• Repita para cada nova caixa gerada:

o Ordene os pontos que representam as cores de acordo com o eixo correspondente à maior dimensão da caixa;

o Separe os pontos em dois grupos no ponto mediano. Ou seja, de cada lado do plano de corte, haverá aproximadamente o mesmo número de pontos.

• Até que o número de caixas corresponda à quantização de cores (256, por exemplo).

• Para cada caixa, calcule a cor correspondente ao seu centróide e atribua esta cor a todos os pixels que estão dentro dela.

A Fig. 3.12 ilustra este processo.

Page 11: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 11

Marcelo Gattass 17/9/2015

Fig. 3.12 – Passos do algoritmo de corte mediano.

Uma questão subentendida no resultado dos processos de amostragem e quantização é o armazenamento dos valores dos pixels na memória do computador. Os pixels de uma imagem estão dispostos segundo um arranjo bi-dimensional e a memória do computador é entendida como linear. Este problema também aparece quando queremos armazenar uma matriz e a solução adotada pela linguagem C é bem parecida com um dos métodos mais utilizados em imagens. Uma solução consiste em armazenar inicialmente todos os valores da primeira linha, seguidos pelos valores da segunda e assim por diante até a última linha. A memória das placas gráficas geralmente segue a ordem de varredura dos monitores que é de cima para baixo e assim o primeiro pixel a ser armazenado é o superior esquerdo e o último o inferior da direita. A fig. 3.13a ilustra este endereçamento para uma imagem em RGB. O endereço na memória dos bytes correspondentes ao RGB do pixel (x,y) também está mostrado na figura. A fig. 3.13b mostra uma das formas de armazenamento de uma imagem no formato TARGA. Este formato armazena, além das componentes RGB, a componente alfa (A) que serve para definir a opacidade do pixel. É claro que estes dois modelos não são únicos, existem muitas outras maneiras de se organizar a informação de cores de uma imagem: a imagem pode ser armazenada em três vetores (um para cada componente RGB); cada cor pode ser colocada em um long int (32 bits), etc...

(a) formato PPM

(b) um dos formatos TARGA

Fig. 3.13 – Dois modos de armazenamento de uma imagem.

00 01 02 0807060503 04 1009 110 1 2

...

1312 14w-1

15 16 17 18 ...

x

y Pixel (x,y)unsigned char *rgb_vector;…offset=3*(w*y+x);red = rgb_vector[offset];green = rgb_vector[offset+1];blue = rgb_vector[offset+2];

012

h-1

3

...

b g r ab g r a bb arg

0 1 …

...

argw-1 x

unsigned char *bgra_vector;…offset=4*(w*y+x);blue = bgra_vector[offset];green = bgra_vector[offset+1];red = bgra_vector[offset+2];alpha = bgra_vector[offset+3];

012

h-1

3

Pixel (x,y)

Page 12: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 12

Marcelo Gattass 17/9/2015

Codificação A codificação de uma imagem estabelece quais cadeias de bits representam uma determinada cor, mais precisamente estabelece os bits que representam os níveis dos tons de cinza ou dos canais RGB. Como nas placas gráficas e na memória principal utilizamos uma codificação de tamanho fixo, isto é, todos os tons de cinza são armazenados com o mesmo número de bits, a etapa de codificação é intimamente ligada à etapa de quantização. Ou seja, a quantização de um canal em 256 tons variando de 0 a 255 implica na codificação do unsigned char da linguagem C.

Na memória secundária, os requisitos de velocidade de armazenamento ou leitura são muito menores do que na memória principal, por isso os formatos como GIF e JPEG utilizam codificações mais demoradas que resultam em arquivos de imagens menores. Estas codificações mais eficientes em espaço são de tamanho variável, ou seja, cada tom de cinza, por exemplo, pode ser codificado com um número diferente de bits. A Tab. 3.1 ilustra esta idéia para uma imagem 100×100 quantizada em oito tons de cinza. A segunda coluna da tabela mostra quantos pixels tem um determinado tom.

Tamanho fixo Huffman

tons # pixels código tam. # bits código tam. # bits

0 1900 000 3 5700 00 2 3800 1/7 2500 001 3 7500 10 2 5000 2/7 2100 010 3 6300 01 2 4200 3/7 1600 011 3 4800 110 3 4800 4/7 800 100 3 2400 1110 4 3200 5/7 600 101 3 1800 11111 5 3000 6/7 300 110 3 900 111101 6 1800 1 200 111 3 600 111100 6 1200 TOTAL 30000 TOTAL 27000

Tab. 3.1 – Codificações de uma imagem 100×100 com oito tons de cinza. As colunas 3 e 6 da Tab. 3.1 correspondem, respectivamente, à codificação dos tons de acordo com um código de tamanho fixo e o código de Huffman, que será explicado a seguir. Note que nenhum código de Huffman é prefixo de outro, o que permite uma decodificação sem ambigüidades. As colunas 3 e 7 apresentam o tamanho em bits dos códigos e as colunas 5 e 8 os números de bits necessários para armazenar aquele tom. Apesar deste exemplo ter apresentado uma redução modesta, de 10%, note que a codificação de Huffman é mais compacta. Reduções de 60% são comuns em imagens reais com tons muito preponderantes. Um ponto importante a destacar nesta codificação é que ela é feita sem perda de informação, ou seja, a imagem armazenada pode ser restaurada na memória principal sem nenhuma diferença.

A codificação de Huffman é feita com base numa árvore binária na qual as folhas são os tons e, o código, o caminho para se chegar da raiz até elas, como ilustra a Fig. 3.14 para o exemplo da Tab. 3.1.

Page 13: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 13

Marcelo Gattass 17/9/2015

Fig. 3.14 – Árvore de Huffman.

A idéia básica para construir esta árvore consiste em colocar os tons mais freqüentes perto da raiz e os tons menos freqüentes mais distantes. O algoritmo de construção da árvore de Huffman para isto pode ser descrito da seguinte maneira:

• Comece criando uma tabela dos tons e do número de vezes que eles aparecem na imagem (colunas 1 e 2 da Tab. 3.1).

• Repita até que a tabela não tenha mais nenhuma linha:

o Ordene a tabela de forma decrescente segundo o número de vezes que os tons aparecem na imagem;

o Combine as duas últimas linhas da tabela (tons menos freqüentes) em uma única linha, somando o número de ocorrências dos tons combinados;

o Armazene cada combinação como sendo um nó de uma árvore binária cujos filhos são as linhas combinadas.

• Numere cada folha da árvore de acordo com o caminho para se chegar da folha até ele (Fig. 3.14).

A Fig. 3.15 procura ilustrar os passos deste algoritmo.

1 0

11 10 01

00

111 110

1111 1110

11111 11110

111101

111100

000110

110

1110

11111

111100111101

n0

n1

n2

n3

n4n5

n6

6/7 1

5/7

4/7

3/7

0 2/71/7

1 0

11 10 01

00

111 110

1111 1110

11111 11110

111101

111100

000110

110

1110

11111

111100111101

n0

n1

n2

n3

n4n5

n6

6/7 1

5/7

4/7

3/7

0 2/71/7

20013006/76005/78004/716003/71900021002/725001/7

20013006/76005/78004/716003/71900021002/725001/7

500n06005/78004/716003/71900021002/725001/7

500n06005/78004/716003/71900021002/725001/7

n0

6/7 1

500n06005/78004/716003/71900021002/725001/7

500n06005/78004/716003/71900021002/725001/7

n0

6/7 1

8004/71100n116003/71900021002/725001/7

8004/71100n116003/71900021002/725001/7

5/7

n1

Page 14: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 14

Marcelo Gattass 17/9/2015

Fig. 3.15 – Passos da construção da árvore de Huffman.

A codificação de Huffman é apresentada aqui como um exemplo simples de codificação com cadeias de bits de tamanho variável. Existem várias outras codificações que podem ser estudadas nas bibliografia de Teoria da Informação.

Processamento de Imagens É comum utilizarmos programas do tipo do Adobe Photoshop™ e do Jasc Paint Shop Pro™ para melhorar a qualidade de fotos digitais. Esta seção procura ilustrar os algoritmos envolvidos neste tipo de processamento.

Correção gama Consideremos, por exemplo, a imagem de um jogo de futebol ilustrada na Fig. 3.16 (a). Como a imagem está muito clara, podemos, por exemplo, utilizar um processo chamado de correção gama, que substitui o valor da luminosidade de cada pixel por outro obtida por:

γ LL← (3.2)

Se tomarmos o valor γ=0.42, obteremos o resultado indicado na Fig. 4.18(b). A Fig. 3.16(c) mostra um diálogo do Jasc Paint Shop Pro™ relativa a esta correção gama.

8004/71100n116003/71900021002/725001/7

8004/71100n116003/71900021002/725001/7

16003/71900n21900021002/725001/7

16003/71900n21900021002/725001/7

n0

6/7 1

5/7

n1 4/7

n2

n0

6/7 1

5/7

n1 4/7

n2

16003/71900n21900021002/725001/7

16003/71900n21900021002/725001/7 3500n3

1900021002/725001/73500n3

1900021002/725001/7

n0

6/7 1

5/7

n1 4/7

n2 3/7

n3

n0

6/7 1

5/7

n1 4/7

n2 3/7

n3

n0

6/7 1

5/7

n1 4/7

n2

3500n3

1900021002/725001/73500n3

1900021002/725001/7

3/7

n3

4000n43500n325001/7

4000n43500n325001/7

n4

2/7 0

n0

6/7 1

5/7

n1 4/7

n2 3/7

n3

6000n54000n46000n54000n4 n4

2/7 0

4000n43500n325001/7

4000n43500n325001/7 n5

1/7

n6

Page 15: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 15

Marcelo Gattass 17/9/2015

(a) imagem clara.

(b) imagem transformada.

(c) diálogo do Jasc Paint Shop Pro.

Fig, 3.16 – Mudança da luminosidade de cada pixel.

Uma característica que permite um melhor entendimento da distribuição de tons numa imagem digital é o seu histograma. O histograma de uma imagem é uma função que, para cada valor possível de cor, associa o número de pixels em que ela ocorre ou a sua freqüência na imagem. A Fig. 3.17 mostra os histogramas das imagens (a) e (b) da Fig. 3.16. A média, o desvio padrão e a mediana dos valores destes histogramas estão mostrados na Tab. 3.1. A transformação gama com um valor de γ < 1.0 tende a reduzir a intensidade luminosa, enquanto as transformações com valores maiores que 1.0 fazem o inverso, ou seja, tornam a imagem mais clara. Note também a natureza não linear da transformação gama, que afeta mais os valores próximos de zero.

Page 16: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 16

Marcelo Gattass 17/9/2015

Fig. 3.17 – Histogramas das imagens da Fig. 3.16.

Média Desvio Padrão Mediana

Imagem clara 212 19 212

Imagem transformada 166 33 164

Tab. 3.1 – Valores característicos dos histogramas da Fig. 3.17.

A correção gama é uma das transformações que atuam sobre o valor de cada um dos pixels individualmente. Outras correções que servem para ajustar o brilho e o contraste também modificam os valores dos pixels transformando o histograma da imagem.

Eliminação de ruídos Para reduzir ruído, existem procedimentos que procuram atenuar as variações localizadas. Para ilustrar esta idéia considere a função da Fig. 3.18. Se substituirmos cada valor fi do interior do domínio por uma média ponderada do tipo:

42 11 +− ++

= iiii

fffh (3.3)

obteremos a função hi também mostrada na Fig. 3.18. Note como após a aplicação da equação (3.3) a função se torna mais suave. Esta propriedade é geral nestas transformações que substituem o valor local por uma média ponderada da vizinhança. Os valores de máximos são naturalmente reduzidos, uma vez que fazem média com valores menores que eles. O mesmo raciocínio se aplica para explicar o aumento dos valores de mínimos.

fh fh

Page 17: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 17

Marcelo Gattass 17/9/2015

Fig. 3.18 – Suavização de função.

Uma maneira de sistematizar esta operação consiste em redefinir a equação (3.3) como:

∑−

=−=

1

0)(

n

kiiki fgh (3.4)

onde:

⎪⎪⎪

⎪⎪⎪

+>

+=

=

−=

−<

=

1014/104/214/110

lselselselselse

gl (3.5)

Se considerarmos as funções f e g contínuas, a equação (3.4) seria:

∫∞=

−∞=

−=t

t

dtxfxtgxh )()()( (3.6)

que é a convolução da função f(x) com o a função g(x). Como, neste caso, a função g elimina as variações de maior freqüência da função f, ela é também designada de “filtro passa-baixa”. É comum utilizarmos filtros passa-baixa baseados na função de distribuição de Gauss:

2

2

2

21)( σ

σπ

x

exG−

= (3.7)

onde σ é o desvio padrão da distribuição. O gráfico desta função está ilustrado na Fig. 3.19.

Fig. 3.19 – Gaussiana de média 0 e desvio padrão 1.

Esta função tem duas propriedades importantes para um filtro: é simétrica e a integral dela em todo o domínio é 1.0.

Voltando à notação discreta, temos que a função g pode ser representada pela matriz:

[ ]4142

41 (3.8)

0.1

0.2

0.3

-4 -3 -2 -1 0 1 2 3 4

Page 18: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 18

Marcelo Gattass 17/9/2015

entendendo que o ponto central 2/4 é o peso da amostra no local em que está sendo computada a função suavizada e os valores à direita e à esquerda da matriz correspondem a amostras à direita e à esquerda da função, respectivamente. Esta forma permite generalizar estas convoluções discretas, bastando para isto definir a matriz a ela associada. Note que (3.8) é uma forma discreta da distribuição gaussiana. Outras formas, de maior precisão, seriam:

[ ]14641161 (3.9)

ou

[ ]1615201561641 (3.10)

No caso de uma imagem, a função g é bidimensional e a matriz é geralmente quadrada. A escolha desta matriz depende do efeito desejado na imagem. Para suavização, podemos adotar a distribuição de Gauss no plano:

2

22

2

21),( σ

σπ

yx

eyxG+

= (3.10)

cuja imagem para σ = 1 e média zero está ilustrada na Fig. 3.20.

Fig. 3.20 – Gaussiana com media (0,0) e σ=1.

Formas discretas desta função podem ser escritas como:

(3.11)

ou

0.1

0.2

0.3

0.4

0.1

0.2

0.3

0.4

⎥⎥⎥

⎢⎢⎢

121242121

161

Page 19: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 19

Marcelo Gattass 17/9/2015

⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

1474141626164726412674162616414741

2731 (3.12)

A suavização pode ser útil para retirarmos ruídos de uma imagem. Como, geralmente, o ruído tem uma média zero (tanto adiciona quanto subtrai), a média ponderada tende a reduzir mais o ruído que a informação da imagem. Note que, em contrapartida à diminuição do ruído, temos uma perda em nitidez, de modo que este processamento pode ser bom para um dada imagem e ruim para outras. Se aplicarmos a suavização à imagem da Fig. 3.21(a) obtemos a melhora mostrada na imagem da Fig. 3.21(b).

(a) (b)

Fig. 3.21 – Filtragem com a Gaussiana.

Realce de bordas e arestas Para destacar bordas e arestas de uma imagem geralmente utilizamos operadores que procuram avaliar taxas de variação da intensidade luminosa. O cálculo de taxas de variação se faz com o uso de derivadas da função de luminosidade. Como numa imagem não dispomos da expressão analítica destas funções, mas sim de valores amostrados em intervalos iguais, os cálculos de derivadas seguem as aproximações de diferenças finitas. Para ilustrar como estas aproximações são obtidas, considere a série de Taylor de uma função f(x):

)()(2)()()()()( 3"2

' xOxfxxfxxfxxf Δ+Δ

+Δ+=Δ+ (3.13)

Com Δx=1, f(x)=fi e f(x+Δx)=fi+1 e a expressão (3.13) pode ser escrita como:

iiii ffff "'1 2

1++≅+ (3.14)

Com Δx=-1, f(x)=fi e f(x+Δx)=fi-1 temos:

Page 20: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 20

Marcelo Gattass 17/9/2015

iiii ffff "'1 2

1+−≅− (3.15)

A Fig. 3,22 ilustra estes valores discretos.

Fig. 3.22 – Cálculo de derivada por diferenças finitas.

Subtraindo a equação (3.15) da equação (3.14) podemos avaliar a derivada em xi como sendo:

2/)( 11'

−+ −≅ iii fff (3.16)

Se somarmos as equações (3.14) e (3.15) podemos obter a seguinte aproximação para a segunda:

)2( 11"

−+ −+−−≅ iiii ffff (3.17)

Como uma imagem é uma função de duas variáveis as derivadas mais comumente utilizadas no realce de arestas são o gradiente e o laplaciano. Dada uma função f(x,y) a expressão analítica do gradiente de f no ponto (x,y) é da dada por:

⎟⎟⎟

⎜⎜⎜

∂∂∂

=∇

yfx

fyxf ),( (3.18)

Na grade regular este gradiente pode ser estimado através de duas aplicações do operador (3.16), uma para x e outra para y:

( )( )

( )( ) ⎟⎟

⎞⎜⎜⎝

−=⎟⎟

⎞⎜⎜⎝

−=∇=∇

−+

−+

−+

−+

2/2/

2/),(),(2/),(),(

),()1()1(

)1()1(

11

11

jiji

jiji

jiji

jijijiij ff

ffyxfyxfyxfyxf

yxff (3.19)

A magnitude deste vetor estima a taxa de variação de f no ponto (x,y) e é, pode ser escrita como:

( ) ( )2)1()1(2

)1()1(21 )−+−+ −+−=∇ jijijijiij fffff (3.20)

Os algoritmos se baseiam em comparações deste valor de magnitude nos diversos pixels. Como o que interessa são os valores relativos e não absolutos, para reduzir o esforço computacional é comum estimar esta taxa de variação abandonando os quadrados, as raízes e o fator ½. Assim a estimativa de taxa de variação pode ser feita por:

f(x)

x

fi-1fi fi+1

i+1ii-1

f(x)

x

fi-1fi fi+1

i+1ii-1

Page 21: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 21

Marcelo Gattass 17/9/2015

)1()1()1()1( −+−+ −+−=∇ jijijijiij fffff (3.21)

Uma outra medida de taxa de variação importante é o Laplaciano, que analiticamente se escreve como sendo:

2

2

2

22 ),(

yf

xfyxf

∂+

∂=∇ (3.22)

A equação (3.17) nos permite escrever a fórmula de diferenças finitas para o Laplaciano como sendo:

)(4 )1()1()1()1(2

++−+ +++−=∇ jijijijiijij ffffff (3.23)

Uma forma simples de escrever este fórmula, consiste em fornecer, em uma matriz, os coeficientes dos pixels, ou seja:

⎥⎥⎥

⎢⎢⎢

−−

010141010

(3.24)

O elemento central da matriz corresponde ao pixel ij e os demais elementos aos seus vizinhos correspondentes.

Para exemplificar os algoritmos de realce de arestas, considere a fig. 3.23 onde na parte inferior está mostrada uma imagem bem simples que é composta apenas de três faixas de cinza. A função f(x), também mostrada na figura, representa os valores dos pixels ao longo do eixo que está sobre as faixas, acrescidos de um certo ruído sempre presente nas imagens reais. Como a faixa mais clara tem maior intensidade luminosa o valor da função f(x) é mais alto. Na borda entre o cinza escuro e o cinza claro temos uma variação alta num intervalo pequeno, ou seja uma taxa de variação grande.

Fig. 3.23 – Detecção de bordas.

Nesta figura o valor do módulo da derivada de f(x) é estimado por:

2/)( 11'

++ −= iii fff (3.25)

E a parte positiva da segunda derivada também pode ser calculada pela fórmula:

f(x)

|f '(x)|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

|f ''(x)|

Page 22: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 22

Marcelo Gattass 17/9/2015

⎩⎨⎧

<−+−

>−+−−+−=

+−

+−+−

0)2(00)2(2

11

1111''

iii

iiiiiii

fffsefffsefff

f (3.26)

Note na fig. 3.23 que o gráfico das derivadas tem um valor quase nulo nas regiões homogêneas e um valor alto na posição do pixel da borda. A fig. 3.24 ilustra um exemplo do uso dos operadores para destacar as arestas de uma a imagem do prédio ilustrado na fig. 3.24a. As fig. 3.24b e 3.24c mostram resultado da aplicação do gradiente e do laplaciano, respectivamente, após a aplicação de uma correção gama. Note nestes resultados que as regiões de maior taxa de variação estão representadas por um valor mais preto, ou seja, de menor intensidade luminosa. Isto ocorre porque as cores nas figuras b e c estão invertidas, ou seja, para cada pixel a intensidade do canal de luminosidade foi transformada por:

LL −← 255 (3.27)

transformando preto em branco e claro em escuro. O resultado “preto sobre branco” gasta menos tinta na impressão e fica melhor visualmente.

(a) foto

(c) gradiente

(d) laplaciano

Fig. 3.24 – Gradiente e laplaciano no uso de detecção de arestas.

A fig. 3.25 ilustra o processo de realce dos pixels que estão sobre as linhas de campo no sistema JuizVirtual2. Este processo de aplicar o filtro Gaussiano antes do Laplaciano é tão comum que os operadores combinados recebem o nome de “LoG”. Note que nesta figura a imagem colorida é transformada em preto e branco através do operador de luminosidade:

BGRL 11.059.030.0 ++=

2 http://www.visgraf.impa.br\juizvirtual

Page 23: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 23

Marcelo Gattass 17/9/2015

Fig. 2.25 – Um exemplo de aplicação do filtro LoG.

Transformações e composição A fig. 2.26 mostra três imagens: um circo, o personagem Papa-Léguas da Hanna-Barbera™ e, o circo com o Papa Léguas em frente. Este aplicação simples apresenta dois problemas interessantes: transformação e composição de imagens. A imagem do personagem precisa ser reduzida e colocada sobre outra.

(a)

(b)

(c)

Fig. 2.26 – Composição de imagens com redução.

Transformações de imagens O tamanho de uma imagem está intimamente ligado sua resolução. Se queremos que o Papa Léguas seja reduzido em 20% para ser colocado sobre a imagem do circo, precisamos na realidade de uma outra imagem do personagem com uma resolução menor. Ao invés de

⎥⎥⎥

⎢⎢⎢

121242121

161

filtrogaussiano

⎥⎥⎥

⎢⎢⎢

−−

010141

010

filtro laplaciano

LL −← 255BGRL 11.059.030.0 ++=

Page 24: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 24

Marcelo Gattass 17/9/2015

termos uma imagem 320×200 precisamos de outra reduzida com a resolução 256×180. Em uma outra situação poderíamos ter o problema de ampliação e não de redução. O problema de ampliação e redução da resolução de uma imagem já foram discutido na seção de amostragem deste capítulo. Ao animarmos um personagem ou objeto sobre uma imagem de fundo poderíamos ter outras transformações que representassem o movimento. Conceitualmente os algoritmos de transformação geométrica (ou warping) de uma imagem são simples:

1. Para cada pixel da imagem transformada.

1.1. Utilizando a transformação inversa, determine a região da imagem original correspondente a este pixel.

1.2. Determine a cor que melhor representa as cores contidas nesta região.

A fig. 2.27 mostra a região do passo 1.1 para duas transformações: uma de ampliação e outra de redução. Como mencionado na seção de amostragem, quando aumentamos a resolução de uma imagem caímos num problema de interpolação. Quando reduzimos temos um problema de taxa de amostragem. Se a imagem tem uma freqüência muito alta a redução pode causar um sério problema de aliasing.

Fig. 2.27 – Regiões associadas na imagem original e na transformada.

A fig. 2.28 mostra o resultado da amplificação de um passarinho por três métodos de interpolação: vizinho mais próximo, bi-linear e bi-cúbica.

(a) Original 75×85

12×8

36×2436×24

ampliaçãoampliação

3×23×2

reduçãoredução

Page 25: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 25

Marcelo Gattass 17/9/2015

(b) vizinho mais próximo

(300×340)

(b) bi-linear (300×340)

(b) bi-cúbica (300×340)

Fig. 2.28 – Resultados de diferentes interpolações.

Na imagem desta figura a interpolação pelo vizinho mais próximo não produziu resultados ruins. Este algoritmo pode ser implementado de maneira bastante simples:

Image imageResize(Image img0, int w1, int h1) { Image img1 = imageCreate(w1,h1); int w0=imageGetWidth(img0); int h0=imageGetHeight(img0); int x0,y0,x1,y1; unsigned char r,g,b,a; for (y1=0;y1<h1;y1++) for (x1=0;x1<w1;x1++) { x0=ROUND((w0-1)*x1/(w1-1)); y0=ROUND((h0-1)*y1/(h1-1)); imageGetPixel(img0,x0,y0,&r,&g,&b,&a); imageSetPixel(img1,x1,y1,r,g,b,a); } return img1; }

Nesta função a macro ROUND faz o arredondamento e é definida por:

#define ROUND(_) (int)floor( (_) + 0.5 )

A fig. 2.29 mostra um exemplo onde a redução da imagem introduz um efeito de alias. As linhas introduzem freqüências muito altas. Na figura é mostrada que se aplicamos um filtro Gaussiano, eliminando as freqüências mais altas, e depois aplicamos o algoritmo de redução baseado no vizinho mais próximo o resultado final é bem melhor.

Page 26: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 26

Marcelo Gattass 17/9/2015

Fig. 2.29 – Alias na redução da resolução.

É importante notarmos que geralmente as imagens normais não têm freqüências tão altas quanto as mostradas na fig. 2.29. Os resultados do algoritmo de ampliação e redução são normalmente bem melhores, como ilustra a fig. 2.30.

Fig. 2.30 – Caso geral da redução de resolução.

Além da translação e da escala, a rotação também é uma transformação importante. Os algoritmos para a rotação também seguem o esquema enunciado acima, com otimizações particulares para cada caso. Os algoritmos de transformações geométricas das imagens têm que satisfazer os seguintes requisitos:

1. Translação por zero tem que ser a identidade;

2. Seqüência de translações deve produzir o mesmo efeito que uma composta da origem ao destino;

3. Escalar por um fator λ, maior que 1, e depois escalar por 1/λ deve produzir a identidade;

4. Rotação por uma seqüência de ângulos que totalizem 360o deve produzir a identidade.

O requisito 3, exige que uma ampliação seguida de redução correspondente produza a identidade. Isto é, a imagem volte a ter a mesma informação de cor. O requisito não fala da ordem inversa, redução seguida de ampliação. Neste caso não teríamos como reproduzir a identidade. Isto porque depois de uma redução, perdemos parte das informações que tínhamos sobre a imagem e uma posterior ampliação não tem como recuperar esta perda.

256×256

150×150

100×100

Gauss

300×225

200×150

100×100

Page 27: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 27

Marcelo Gattass 17/9/2015

Uma discussão mais detalhada dos algoritmos de transformação de imagens foge aos objetivos introdutórios deste capitulo e pode ser encontrada nos bons livros sobre Processamento de Imagem que tenham um enfoque de algoritmos.

De qualquer forma, a animação de um personagem sobre uma imagem de fundo pode ser mais bem feita se preparamos com antecedência uma seqüência de quadros que correspondam à animação desejada. A imagem mostrada na fig. 3.31 ilustra 8×12 de posições do pequeno índio. Se os quadros de uma linha são apresentados em uma seqüência rápida temos a impressão de movimento do tipo caminhar. Os 8 quadros de cada coluna correspondem à animação do personagem se virando em torno da vertical.

Fig. 2.31 – Imagem com a animação de um personagem.

Composição de imagens Existem muitas maneiras de compor duas ou mais imagens de forma a produzir uma imagem final com conteúdo de cada uma delas. Vamos abordar aqui apenas as três formas mais usadas de sobreposição de imagens: código de cores (color key), máscara de bits e canal alfa. Na sobreposição de imagens uma imagem, chamada “origem”, é colocada sobre outra, denominada “destino”.

A técnica de código de cores é muito simples e consiste em definir uma das cores da imagem origem cor como sendo transparente. No pequeno índio da fig. 2.31 a cor azul (0,0,255) faz este papel. Notem que nenhum pixel do personagem pode ter este valor sob pena do personagem ficar “vazado”. A função imageCombineColorKey, mostrada a seguir, faz esta composição.

void imageCombineColorKey(Image origem, Image destino, int x0, int y0, unsigned char rt, unsigned char gt, unsigned char bt)

Page 28: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 28

Marcelo Gattass 17/9/2015

{ int x,y; for (y=0; y<imageGetHeight(origem); y++) for (x=0; x<imageGetWidth(origem); x++) { unsigned char r,g,b; imageGetPixel(origem,x,y,&r,&g,&b,NULL); if ((r!=rt)||(g!=gt)&&(b!=bt)) imageSetPixel(destino,x0+x,y0+y,r,g,b,0); } }

Esta técnica funciona melhor quando a imagem origem é indexada, ou seja, suas cores são obtidas a partir de um índice de uma tabela. Assim, podemos distinguir a cor transparente pelo índice e não pelo valor RGB. Além de mais preciso esta escolha permite que, por exemplo, o personagem tenha na sua definição um azul (0,0,255), basta que esta cor seja correspondente a um outro índice da tabela de cores. A técnica de máscara de bits utiliza uma outra imagem de mesmas dimensões contendo a chave para decidir se um pixel da origem deve ou não ser colocado na imagem destino. Assim, por exemplo, a máscara em preto na fig. 2.32 indica quais os pixels da imagem do Papa Léguas deve ser colocado na imagem destino. No OpenGLTM esta técnica corresponde ao uso do “stencil buffer”.

Fig. 2.32 – Uso de máscara para controlar a transparências de regiões da imagem origem.

Finalmente a composição com o canal alfa é uma técnica bastante flexível que permite uma série de efeitos. Nesta técnica, cada pixel da imagem tem, além das componentes RGB, uma informação sobre um valor chamado de alfa. No nosso caso este alfa representa a opacidade ou a transparência do pixel. A cor do pixel da imagem destino, (rdst, gdst, bdst, 255adst), depois que o pixel da imagem origem, (rsrc, gsrc, bsrc, 255asrc), for colocado sobre ela pode ser dada por:

)1( srcdstdstsrcsrcdst rrr ααα −+← (3.28a)

)1( srcdstdstsrcsrcdst ggg ααα −+← (3.28b)

)1( srcdstdstsrcsrcdst bbb ααα −+← (3.28c)

0

1AND

Page 29: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 29

Marcelo Gattass 17/9/2015

)1( srcdstsrcdst αααα −+← (3.28c)

onde: 255/a←α

Podemos entender esta equação imaginando que a imagem origem é um vidro colorido. A cor em cada ponto é a cor do vidro mais a cor do que está atrás reduzida pelo fator (1- asrc) que representa a transparência do vidro. A opacidade resultante também segue este raciocínio. É a opacidade do vidro mais a opacidade do que está atrás reduzida pela quantidade de luz que atravessa. Note que, se o valor de alfa for 0 (transparente) então o pixel da imagem destino não é alterado. Se o valor for 1 (opaco) então a cor do pixel da imagem origem substitui completamente a cor correspondente da imagem destino. Num caso intermediário temos uma mistura das duas cores. Note também que, seguindo este raciocínio, as componentes RGB da cor de um pixel são calculadas multiplicando-se as componentes armazenadas RGB originais pelo fator alfa. Assim um pixel de componentes (255, 255, 0, 127) é o amarelo RGB=(127, 127, 0) e não o RGB=(255, 255, 0). Existe uma opção um pouco mais eficiente para compor pixels em RGBA onde os canais RGB já armazenam as cores multiplicadas pelo canal alfa. Neste caso o valor de cada uma das componentes R, G ou B é necessariamente menor ou igual a componente A. Como os valores já estão multiplicados a equação (3.28) pode ser escrita por:

)1( srcdstsrcdst rrr α−+← (3.29a)

)1( srcdstsrcdst ggg α−+← (3.29b)

)1( srcdstsrcdst bbb α−+← (3.29c)

)1( srcdstsrcdst αααα −+← (3.29d)

O operador das equações (3.28) e (3.29) é chamado de over porque a imagem origem é colocada sobre a imagem destino. Existem outras combinações possíveis. Poderíamos, por exemplo, ter a imagem origem sendo colocado por trás da imagem destino. Neste caso a equação correspondente as componentes RGB já forem pré-multiplicadas seria dada por:

)1( dstsrcdstdst rrr α−+← (3.30a)

)1( dstsrcdstdst ggg α−+← (3.30b)

)1( dstsrcdstdst bbb α−+← (3.30c)

)1( dstsrcdstdst αααα −+← (3.30d)

Page 30: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 30

Marcelo Gattass 17/9/2015

Exercícios resolvidos 1. Explique os processos de reconstrução e amostragem que ocorrem nos algoritmos para

aumentar o tamanho de uma imagem. De duas opções de estratégias de calcular a cor do pixel “A” mostrado na figura abaixo?

Resp.: Para aumentar a resolução de uma imagem precisamos conhecer o valor de cor em pontos do plano onde não temos amostras. Para estimar estes valores temos que reconstruir a função de cor da imagem original para então podermos amostrá-la. No caso do ponto A da figura temos podemos seguir diversas estratégias. Uma seria simplesmente atribuir ao ponto A’ a cor do pixel mais próximo de A. Outra seria utilizar uma interpolação linear obtendo a cor em A em função das quatro amostras mais próximas dele.

2. Considere a imagem 6×6 com 9 tons de luminosidade mostrada abaixo.

i. Calcule e desenhe abaixo o histograma de probabilidades de um pixel desta

imagem ter uma determinada luminosidade.

A’A

Page 31: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 31

Marcelo Gattass 17/9/2015

Resp.:

Valor   Freq.   Prob.  

0   9   0.25  

1   7   0.1944  

2   4   0.1111  

3   3   0.0833  

4   2   0.0556  

5   2   0.0556  

6   3   0.0833  

7   3   0.0833  

8   3   0.0833  

 

36   1  

ii. Calcule pelo método de Otsu o valor da variância interior das classes b e f para um valor de limiar t=4 (i.e. b tem tons 0,1,2 e 3 enquanto f tem os tons 4,5,6,7 e 8).

Resp.:

Page 32: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 32

Marcelo Gattass 17/9/2015

Fundo (background)

Val   Freq   Prob  

0   9   0.25  

1   7   0.1944  

2   4   0.1111  

3   3   0.0833  

Σ   23   0.6389  

1.043523

33241709=

⋅+⋅+⋅+⋅=bµ

1.085123

)0435.13(3)0435.12(4)0435.11(7)0435.10(9 22222 =

−⋅+−⋅+−⋅+−⋅=bσ

Frente (foreground) Val   Freq   Prob  

4   2   0.0556  

5   2   0.0556  

6   3   0.0833  

7   3   0.0833  

8   3   0.0833  

Σ   13   0.3611  

6.230813

8373635242=

⋅+⋅+⋅+⋅+⋅=fµ

1.869813

)6.23088(3)6.23087(3)6.23086(3)6.23085(2)6.23084(2 222222 =

−⋅+−⋅+−⋅+−⋅+−⋅=fσ

Variância interior das classes:

1.368451.86983611.00851.16389.0222 =⋅+⋅=+= ffbbW ww σσσ

Page 33: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 33

Marcelo Gattass 17/9/2015

3. A uma imagem 6×6 mostrada abaixo, ilustra os dois tipos de ruídos mais comuns nas imagens capturadas. Pergunta-se que tipo de ruído são eles e que tipo de processo se utiliza para reduzi-los? De um exemplo de aplicação para cada um deles.

⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢

2119201920212019202220181918222119202119201820221820255191820201820212019

Resp.: A imagem apresenta um ruído branco (pequenas variações oscilatórias com média zero) e um pixel com ruído impulsivo, tipo “sal e pimenta” (o que tem valor 255). A maneira de reduzir os ruídos seria aplicarmos filtros.

Um filtro apropriado para o ruído branco é o filtro Gaussiano. Para o pixel de valor 18 no canto superior esquerdo da imagem o filtro Gaussiano 3×3 o transformaria para:

( ) 19375.1918202221921842022120219161

≅=+⋅++⋅+⋅+⋅++⋅+=v

se aproximando mais do valor 20.

Um filtro para atenuar o ruído impulsivo é o filtro de mediana. O pixel com valor 255 submetido a este filtro numa janela 3×3 se transforma em 20 pelo algoritmo.

Vizinhos em ordem = (18, 18, 19, 19, 20, 20, 21, 255). Mediana = 19.5

4. Considere uma imagem em tons de cinza representada pela matriz abaixo:

[ ]⎥⎥⎥⎥

⎢⎢⎢⎢

3020221026816105440181550452020

Determine qual o valor do pixel indicado na figura, atualmente de valor 16, depois de passarmos o filtro de Sobel, para acharmos arestas na imagem.

Page 34: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 34

Marcelo Gattass 17/9/2015

Resp.:

75.7431

4201016204015

20101018201024010151

41

−=−

=−+−+−

=

⎥⎥⎥

⎢⎢⎢

×−×

×−×

×−×

=Δ x

25.4417

4204410403615

201222101000401182151

41

==−−−++

=

⎥⎥⎥

⎢⎢⎢

×−×−×−

×××

=Δ y

Novo valor = 839.825.475.7 22 =+

5. Considere a imagem em tons de cinza representada pela matriz abaixo:

132   206   255   255   255   255   255  123   123   165   255   255   255   255  123   123   123   132   255   255   255  123   123   123   125   206   255   255  123   123   123   123   123   173   255  123   123   123   123   123   123   132  123   123   123   123   123   123   123  

Que operador você utilizaria para indicar se um pixel está sobre uma aresta? Qual o valor deste operador aplicado aos pixels de valor 132 e 123, marcados na matriz em negrito e sublinhado?

Resp:

Utilizaria o operador de Sobel (ou de Prewitt) buscando o máximo do modulo do vetor resultante como indicador da aresta. Poderia também utilizar o Lapaciano buscando os valores de zero como indicadores da aresta.

Page 35: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 35

Marcelo Gattass 17/9/2015

a) No pixels 132:

109.254

8326490)123206)123255(2165255(41

=++

=−+−+−=Δ x

5.108)123255)125255(2123165(41

=−+−+−=Δ y

Módulo do vetor = 97.1535.10825.109 22 =+ =>Está sobre uma aresta

b) No pixel 123:

0=Δ=Δ yx

Módulo do vetor = 0. => Não está sobre uma aresta.

6. Considere uma imagem em tons de cinza representada pela matriz abaixo. Aplique um filtro de realce de arestas utilizando um dos filtros mostrados na folha de fórmulas. Ou seja, calcule o valor dos pixels correspondentes a sub-matriz 4×4 (sem levar em conta os pixels da borda) que realcem onde está a aresta presente na imagem.

⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢

100100100202020100100100202020100100100202020100100100202020100100100202020100100100202020

Resp.: Utilizando os filtros de Sobel (ou Prewitt) para capturar uma linha vertical temos:

80100100201001002010010020

101202101

41

100202010020201002020

101202101

41

0100100100100100100100100100

101202101

41

202020202020202020

101202101

41

=

⎥⎥⎥

⎢⎢⎢

⎥⎥⎥

⎢⎢⎢

=

⎥⎥⎥

⎢⎢⎢

⎥⎥⎥

⎢⎢⎢

=

⎥⎥⎥

⎢⎢⎢

⎥⎥⎥

⎢⎢⎢

=

⎥⎥⎥

⎢⎢⎢

⎥⎥⎥

⎢⎢⎢

resultando em:

Page 36: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 36

Marcelo Gattass 17/9/2015

20 20 20 100 100 100

20 0 80 80 0 100

20 0 80 80 0 100

20 0 80 80 0 100

20 0 80 80 0 100

20 20 20 100 100 100

onde a aresta vertical aparece nas duas colunas de pixels que fazem fronteira com ela. Utilizando o Laplaciano temos:

80100100201001002010010020

010141010

,80100202010020201002020

010141010

0100100100100100100100100100

010141010

202020202020202020

010141010

=

⎥⎥⎥

⎢⎢⎢

⎥⎥⎥

⎢⎢⎢

−−

−=

⎥⎥⎥

⎢⎢⎢

⎥⎥⎥

⎢⎢⎢

−−

=

⎥⎥⎥

⎢⎢⎢

⎥⎥⎥

⎢⎢⎢

−−

=

⎥⎥⎥

⎢⎢⎢

⎥⎥⎥

⎢⎢⎢

−−

20 20 20 100 100 100

20 0 -80 80 0 100

20 0 -80 80 0 100

20 0 -80 80 0 100

20 0 -80 80 0 100

20 20 20 100 100 100

A aresta está no cruzamento de zero entre -80 e 80.

Page 37: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 37

Marcelo Gattass 17/9/2015

Exercícios

1. A matriz mostrada abaixo com elementos que variam de 0 à 255 representa uma imagem de luminância 6×6. Qual seria a luminância do pixel de valor 118 marcado por [ ]’s, se sobre a imagem fosse aplicado: i) um filtro Gaussiano 3×3; ii) um filtro de Mediana.

[ ]

⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢

1591197655636917215010573637117916913492625818317915811874561821831761521207116518418116913485

2. Dada função

)8/cos(2.0)(3)( xxsenxf ππ += qual o maior intervalo de amostragem Δx de forma a podermos reconstruí-la corretamente?

3. Explique 3 métodos de codificação de um vetor de valores inteiros de 0 a 255. 4. Que problemas ocorrem nos algoritmos para aumentar e reduzir o tamanho de uma

imagem quando eles percorrem os pixels da imagem origem e não os da imagem destino?

5. Considere uma imagem em tons de cinza representada pela matriz abaixo:

⎥⎥⎥⎥

⎢⎢⎢⎢

3020221026816102428181521202020

Sem modificar os pixels da borda, calcule a matriz que representa a imagem: a) Suavizada pelo filtro Gaussiano (3.11). b) Filtrada pelo filtro de Sobel horizontal.

6. Explique o que é resolução espacial de uma imagem.

7. O que é quantização e quando este processo ocorre na aquisição de uma imagem digital?

8. Explique os processos de reconstrução e amostragem que ocorrem quando mudamos a resolução espacial de uma imagem.

Page 38: Imagem Digital - webserver2.tecgraf.puc-rio.brwebserver2.tecgraf.puc-rio.br/~mgattass/cg/pdf/03_ImagemDigital.pdf · de projeção para estudar os passos fundamentais que se seguem:

Imagem Digital 38

Marcelo Gattass 17/9/2015

9. Que tipo de codificação de cores existe no formato BMP?

10. Explique 3 métodos para combinar duas imagens. 11. Explique quais são os 3 tipos de redundâncias que normalmente existem numa

imagem. Cite pelo menos 1 algoritmo para reduzir cada uma destas redundâncias. 12. Explique o que é Run-Length Encoding.

Bibliografia do capítulo

1. Foley, J. D., Van Dam, A., Feiner, S. K., e Huhes, J. F., Computer Graphics: Principles and Practices, (Systems Programming), 2nd edition in C, Addison-Wesley, 1995, ISBN 0-201-84840-6.

2. Gomes, J.M. e Velho, L., Image Processing for Computer Graphics, Springer, 1997, ISBN 0-387-94854-6

3. Gonzalez, R.C., and Woods, R.E, Digital Image Processing, Addison-Wesley, 1992.

4. Baxes, G. A., Digital Image Processing: principles and applications, John Wiley & Sons, New York, 1994, ISBN 0-471-00949-0