Buscar

Processamento de IMAGEM

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

1 
 
 
Aula 4.1 
 
 Realce de características (Operações aritméticas pontuais) 
 Curva de Tons, Curva Gamma 
 
Realce de Características da Imagem (Pré-processamento no domínio espacial). 
 
Podemos destacar certas características da imagem com procedimentos que operam diretamente 
sobre os pixels de uma imagem, na forma como estão arranjados espacialmente. Matematicamente, 
uma operação de processamento espacial é denotada da seguinte forma: 
 
g(x,y) = T [f (x,y)] 
 
onde f (x,y) representa a imagem de entrada, g(x,y) representa a imagem de saída realçada, e T é um 
operador em f , definido para atuar sobre um ponto (pixel) ou sobre sua vizinhança. T é também 
denominada de FUNÇÃO DE TRANSFERÊNCIA. 
 
As operações que T promove sobre os pixels da imagem podem ser ARITMÉTICAS ou LÓGICA, 
PONTUAIS ou DEPENDENTES DA VIZINHANÇA DO PIXEL (também denominado de 
filtragem no domínio espacial). 
 
Veremos as operações dependentes da vizinhança nos próximos módulos. Por ora nos limitaremos a 
algumas as operações básicas que são aplicadas diretamente sobre pixels individuais. 
 
As mais comuns são: 
 
IDENTIDADE: Apenas uma referência. Nada mais do que uma cópia idêntica, ponto a ponto da 
imagem original. 
 
g(x,y) = f (x,y) 
 
Um fragmento de código C para este tipo de transformação pode ser visto a seguir: 
 
for (int y = 0; y < altura_da_imagem; y++) 
for (int x = 0; x < largura_da_imagem; x++) 
g(x,y) = f(x,y); 
 
NEGATIVA: a negativa de uma imagem f é obtida ao inverter-se a intensidade luminosa de todos 
os pontos da imagem, resultando em uma nova imagem g com aspecto semelhante a um negativo 
fotográfico. Ou seja, para uma imagem f com uma faixa de tons de cinza variando de [0, L−1], a 
negativa desta imagem é obtida pela expressão: 
 
g(x,y) = (L−1)− f (x,y). 
 
Esta operação é adequada para destacar pequenos detalhes brancos ou cinza sobre grandes áreas 
negras. 
 
int L = 226; // 256 Niveis de cinza 
for (int y = 0; y < altura_da_imagem; y++) 
for (int x = 0; x < largura_da_imagem; x++) 
g(x,y) = (L-1) - f(x,y); 
 
2 
 
 
LOGARÍTMICA: esta operação aplica uma transformação logarítmica a cada ponto de uma 
imagem f, conforme a expressão: 
 
g(x,y) = c.log(1+ f (x,y)), 
 
onde c é uma constante definida em função dos níveis de cinza. O fragmento de C a seguir ilustra a 
codificação da transformação logarítmica da imagem para 256 níveis de cinza. 
 
double c = 255 / log(256); 
for (int y = 0; y < altura_da_imagem; y++) 
for (int x = 0; x < largura_da_imagem; x++) 
g(x,y) = c*log(1+f(x,y)); 
 
Esta operação normalmente mapeia uma faixa de baixos valores de intensidade luminosa para 
faixas maiores, TORNANDO VISÍVEIS PARTES DA IMAGEM QUE SE ENCONTRAVAM 
MUITO ESCURAS. 
 
POTÊNCIA: esta operação aplica uma transformação de potência a cada ponto de uma imagem f, 
conforme a expressão: 
 
g(x,y) = c.(f(x,y))
β
, 
 
onde c é uma constante e  > 0 é a potência a qual se deseja elevar o nível de intensidade luminosa 
de f (x,y). Funciona de forma semelhante à logarítmica, normalmente realçando pontos de baixa 
intensidade luminosa, mas isso depende de se  é maior ou menor que 1. 
 
double c = 255 / pow(256,expoente); 
for (int y = 0; y < altura_da_imagem; y++) 
for (int x = 0; x < largura_da_imagem; x++) 
g(x,y) = c*pow(f(x,y),expoente); 
 
Por razões prática, é conveniente NORMALIZAR f(x,y) para assumir valores REAIS entre 0, e 1. 
Ou seja 0 ≤ f(x,y) ≤ 1. A NORMALIZAÇÃO evita que nos preocupemos com a quantização, isto é, 
com a quantidade de níveis de cinza da imagem. Para "desnormalizarmos" a imagem, basta 
multiplicarmos seu valor por L − 1 e aproximarmos o resultado para o inteiro mais próximo. 
 
As figuras a seguir, de PAVIM e ROLOFF(2005), ilustra as 4 transformações mostradas acima. 
 
3 
 
 
 
Figura 1. Variação da imagem quando aplicamos operações básicas de pré-processamento pontual de 
IDENTIDADE, NEGATIVO, LOGARITMO E POTÊNCIA (= 0,5). 
 
A Curva de Tons 
 
Chama-se CURVA DE TONS o gráfico f x g, onde f representa a imagem original, de entrada, e g a 
imagem final, de saída. Trata-se de um recurso visual muito comum em quase todos os programas de 
processamento de imagem que permite visualizar, e mesmo modelar interativamente, o operador T. 
 
0.0
0.5
1.0
0.0 0.5 1.0
f(x,y)
g
(x
,y
)
0.0
0.5
1.0
0.0 0.5 1.0
f(x,y)
g
(x
,y
)
 
0.0
0.5
1.0
0.0 0.5 1.0
f(x,y)
g
(x
,y
)
0.0
0.5
1.0
0.0 0.5 1.0
f(x,y)
g
(x
,y
)
 
Figura 2. CURVAS DE TONS para as operações básicas mostradas acima (IDENTIDADE, NEGATIVO, 
LOGARITMO E POTÊNCIA (= 0,5)). Note que f e g estão NORMALIZADAS. 
g = f g = 1 f 
g = log2(1+f) 
g = f 

 
Identidade Negativo 
Logaritmica Potëncia ( = 0.5) 
4 
 
 
 
Figura 3. Exemplo de ferramenta que utilize a CURVA DE TONS para modelar a FUNÇÃO DE TRANSFERÊNCIA (T). A 
esquerda do Adobe Photoshop(R), ao centro do Aldus PhotoStyler 2.0 e a direita do GIMP (Gnu Image Maniputalion Program). 
 
 
 
 
EXEMPLO DE MODELAGEM SIMPLES (LINEAR) DA CURVA DE TONS. 
 
Vamos considerar o problema de construirmos uma FUNÇÃO DE TRANSFERÊNCIA a partir de 
uma CURVA DE TONS. A gráfico g = T(f) pode ser representado por uma FUNÇÃO LINEAR: 
 
g = a.f + b 
 
Onde a é o COEFICIENTE ANGULAR e b é o COEFICIENTE LINEAR. 
 
Note que quando a = 1, a inclinação da reta não muda. Neste caso, 
 
g = f + b 
 
b consiste em somarmos (ou subtrairmos) um valor constante a f, o que implicará em um 
AUMENTO (soma) ou DIMINUIÇÃO (subtração) GLOBAL do BRILHO da imagem destino g. 
Como f e g estão normalizadas, -1  b  1. O gr[afico a seguir ilustra exemplos de aumento e 
diminuição de brilho da imagem representados na curva de tons. 
Figura 4. Curva de tom original (identidade) e alteradas, com suas imagens transformadas e histogramas. (CONCI, 2008) 
5 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 5. Exemplo de AUMENTO de BRILHO (esquerda) e DIMINUIÇÃO de BRILHO (direita) na CURVA DE 
TONS. Note que o valor f = 0,5 aumentou para g = 0,7 no gráfico da esquerda e diminuiu para g = 0,3 no gráfico da 
esquerda. 
 
Por outro lado, o valor de a implica na alteração do CONTRASTE da imagem. Acompanhe nos 
gráficos a seguir: 
0.0
0.5
1.0
0.0 0.5 1.0
f(x,y)
g
(x
,y
)
0.0
0.5
1.0
0.0 0.5 1.0
f(x,y)
g
(x
,y
)
 
Figura 6. Exemplo de AUMENTO de CONTRASTE (esquerda) e DIMINUIÇÃO de CONTRASTE (direita) na 
CURVA DE TONS. Note que o uma pequena variação de tons em f foi expandida em g no gráfico da esquerda, 
tornando o histograma mais largo, e comprimiu no gráfico da direita, fazendo com que o histograma se tornasse mais 
estreito. 
 
A Curva Gamma 
 
A CURVA GAMMA, ou CORREÇÃO GAMMA (), é uma espécie de "coringa" para ajustar os 
níveis de cinza (meios-tons) buscando uma melhor resposta perceptiva à imagem. Ou seja, trata-se 
de uma transformação não linear que altera os valores da luminância da imagem original obtendo 
uma melhor resposta na saída de um dispositivo em particular. Você pode usar a curva gamma para 
corrigir imagens a serem representadas por dispositivos diferentes, como entre a visão, cuja resposta 
ao estímulo é logarítmica, e uma imagem capturada por uma CCD, cuja resposta é, em geral, linear; 
ou ainda corrigir uma imagem para que sua impressão se torne mais nítida. 
 
No caso mais simples, a curva gamma é definida por uma função do tipo: 
γ
1
rs  , 
onde r representa os valores originais de níveis de cinza, normalizados na faixa de 0 a 1, e srepresenta os valores de níveis de cinza da imagem final. 
 
Na prática, a CORREÇÃO GAMMA é a mesma OPERAÇÃO PONTUAL DE POTÊNCIA vista 
anteriormente. 
 
 
0.0
0.5
1.0
0.0 0.5 1.0
f(x,y)
g
(x
,y
)
0.0
0.5
1.0
0.0 0.5 1.0
f(x,y)
g
(x
,y
)
g = f + 0.2 
0.7 
g = f  0.2 
0.3 
g = 2f  0.5 g = 0,5f + 0.25 
6 
 
 
Aula 4.2 
 
Representação e modelagem de objetos em duas e três dimensões. 
 
 Representação de vértices, arestas e faces. 
 Estrutura de dados baseada em vértices e arestas. 
 Modelagem de objeto em aramado por seus vértices e arestas. 
 
Modelagem em 2D e 3D 
Para representarmos os objetos, imagens, em alguma área da tela de um computador (VIEWPORT), 
devemos ser capazes de definir os pontos que serão ligados por segmentos de retas. Esses pontos 
são denominados VÉRTICES e os segmentos de reta que os unem são as ARESTAS. 
Quase todas as linguagens de programação que manipulam gráficos possuem primitivas para unir os 
VÉRTICES de uma figura previamente mapeados como PIXELS na VIEWPORT (o mapeamento 
WINDOWS -To-VIEWPORT) em termos das coordenadas de seus vértices. 
Tais VÉRTICES podem ser obtidos por meio de funções matemáticas, mas é comum utilizarmos 
uma estrutura de dados que armazene os VÉRTICE, ARESTAS e FACES de um objeto primitivo. 
Nosso problema aqui é aprender como podemos fazer isso, como MODELAR e ARMAZENAR os 
VÉRTICS e as ARESTAS de um dado modelo simples (primitiva). O tratamento de FACES poderá 
ser tratado mais tarde, quando discorrermos sobre os algoritmos Z-BUFFER e RAY-TRACING. 
 
Usando-se um sistema cartesiano xyz podemos representar adequadamente esses valores e guardá-
los em uma estrutura de dados conveniente (lista de vértices, arestas e faces) 
Consideraremos um sistema de eixos onde o eixo 
x é horizontal e positivo para a direita, o eixo y é 
vertical e positivo para cima e o eixo z é 
perpendicular a ambos, positivo na direção do 
produto vetorial e3 = e1 x e2, onde e1, e2 e e3 são 
os vetores unitários nas direções x, y e z, 
respectivamente (base). Esta orientação é 
denominada de SISTEMA DE MÃO DIREITA. 
Por exemplo: Um cubo de lado 1 com um dos vértices 
apoiado na origem do plano cartesiano será 
representado pela lista de vértices no SRO (ou no 
SRN) e aresta da seguinte forma (figura ao lado): 
 
Vértices V1 V2 V3 V4 V5 V6 V7 V8 
Coordenadas (0,0,0) (1,0,0) (1,1,0) (0,1,0) (0,0,1) (1,0,1) (1,1,1) (0,1,1) 
Já as arestas serão dadas pelo par (VÉRTICE INICIAL, VÉRTICE FINAL) por: 
 
Arestas V1-
V2 
V2-
V3 
V3-
V4 
V4-
V1 
V1-
V5 
V2-
V6 
V3-
V7 
V4-
V8 
V5-
V6 
V6-
V7 
V7-
V8 
V8-
V5 
 
Neste caso podemos utilizar a notação de vetores (arrays). Um conjunto de vetores receberá a lista 
dos vértices armazenado em uma matriz 3  N (ou 2  N no caso de 2D), onde N é o número de 
vértices ordenados de 1 até N colunas e outro receberá a lista de arestas. Assim: 
x 
y 
z 
V1 V2 
V3 V4 
V5 V6 
V7 
V8 
SRO 
7 
 
 











11110000
11001100
01100110
CUBOVERTICES
 
Já os vetores de arestas serão armazenados em uma matriz 2  M, independentemente se o objeto é 
2D ou 3D. As arestas são ordenadas em colunas de 1 até M. A primeira linha contém o índice do 
vértice inicial e a segunda o índice do vértice final. 







587687651432
876543214321
CUBOARESTAS
 
Esta forma de estruturar os vértices e as arestas de objetos não é única. 
Quando desenhamos na tela do computador um objeto modelado por seus vértices V = {V1, V2, 
V3, ..., Vn}, devemos primeiro transformar as coordenadas de cada VÉRTICE conforme a 
necessidade da representação (isto implica em transformações geométricas descritas no módulo 7 e 
transformações dos vértices resultantes do SRO  SRU  SRD, conforme vimos no módulo 2) e, 
em seguida, desenhar as ARESTAS ligando as coordenadas X e Y, em pixel, de cada um de seus 
vértices extremos. 
Por exemplo: Considere a aresta A1 que liga os vértices V1 e V2. Após efetuarmos uma série de 
cálculos para posicionar o objeto adequadamente no SRU e passá-lo para o SRD. Para desenhar o 
objeto em uma determinada viewport do dispositivo gráfico de saída, tomamos apenas os valores 
transformado das coordenadas Xpixel e Ypixel dos vértices V1 e V2 e os ligamos com um 
algoritmo de linhas (Bresenham), conforme visto no módulo 3. 
No presente módulo, contudo, iremos nos preocupar somente em como podemos criar uma estrutura 
de vértices e arestas para serem usadas oportunamente. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8 
 
 
Aula 5.1 
 
Transformações geométricas em duas e três dimensões 
 
 Transformações de pontos (translação, reflexão, escala, rotação e cisalhamento). 
 Concatenação de transformações geométricas. Coordenadas homogêneas. 
 Transformações Geométricas em 3D 
 
Transformações Geométricas em 2D e 3D 
Quando se trata de gerar imagens em duas ou três dimensões, apenas o uso de primitivas mapeadas 
na VIEWPORT pode não ser suficiente. Podo correr a necessidade de que sejam feitas certas 
transformações. Por um lado, as transformações de primitivas facilitam a geração de imagens 
porque os objetos gráficos podem ser gerados (calculados) em sua forma mais simples, e depois 
alterados para a imagem final que se deseja. Por outro lado, a aplicação de transformações permite 
que se crie uma “linguagem comum” (como será visto a seguir) que unifica e generaliza as 
transformações. 
Na disciplina de Álgebra Linear aprendemos o que são transformações e como podemos distinguir 
as transformações lineares e não lineares através de operações algébricas de soma vetorial e produto 
de vetor por escalar. As transformações se aplicam igualmente a funções matrizes e vetores. Em 
Computação Gráfica preocupamo-nos sobretudo com as transformações geométricas, aplicadas a 
vetores e espaços vetoriais. As transformações geométricas básicas são: 
1. Translação (T) 
2. Reflexão (M) 
3. Escala (S) 
4. Rotação (R) 
5. Cisalhamento (C) 
Dessas cinco transformações geométricas básicas apenas a transformação de translação é não-linear, 
todas as outras são lineares e, mais adiante, veremos a implicação desse fato de maneira bem 
dramática. 
Por ora considere a imagem de uma bandeira cujos vértices V, de coordenada (x, y), transformam-
se em V', de coordenadas (x', y'), como passamos a descrever em cada caso, com as respectivas 
matrizes de transformação. 
 
9 
 
 
TRANSLAÇÃO 
A translação é o ato de levar um objeto de um ponto para outro, num sistema de referência. O 
objetivo de uma translação é bem simples: ao calcularmos os pontos de um objeto, devemos 
escolher a posição mais simples para sua geração – por exemplo, para um círculo fazer coincidir o 
centro com a origem dos eixos – e depois transferir a figura para a posição final. 


























y
x
y
x
t
t
y
x
y
x
tyy
txx
´
´
´
´ 
  
),(´ yx ttTVV 
  Equação matricial p/ a transformação 
 
 
REFLEXÃO 
























y
x
y
x
yy
xx
10
01
´
´
´
´ (reflexão em y) 
  
VMV )1,1(´ 
  Equação matricial p/ a transformação 
 

























y
x
y
x
yy
xx
10
01
´
´
´
´ (reflexão emx) 
  
VMV )1,1(´ 
  Equação matricial p/ a transformação 
 
 
 
ESCALA 
Quando se aplica uma transformação de escala a um objeto, o resultado é um novo objeto 
semelhante ao original, mas "esticado" ou "encolhido". 


























y
x
s
s
y
x
ysy
xsx
y
x
y
x
0
0
´
´
´
´ 
  
VssSV yx ),(´
  Equação matricial p/ a transformação 
 
 
 
ROTAÇÃO 
É o ato de girar um objeto de um ângulo, num sistema de referência. Como no caso da translação, 
objetivo de uma rotação é bem simples: ao modelar-se os pontos de um objeto, deve-se escolher o 
X 
X 
X 
Y 
Y 
Y 
(0, 0) 
x 
x 
x 
y 
y 
y 
x 
x' 
x+tx 
-y 
y' 
y+ty 
Reflexão 
em y 
Figura 3: Escala. 
Figura 1: Translação. 
Reflexão 
em x 
Figura 2: Reflexão. 
10 
 
 
ângulo mais simples para sua geração, e depois girar a figura para a posição final. Um rotação em 
duas dimensões é aplicada pelo reposicionamento de cada ponto original (calculado) do objeto ao 
longo de um círculo imaginário no plano xy. Logo, deve ser especificado um ângulo de rotação , 
que especifica o arco que um dado ponto deve ser deslocado em torno da origem do sistema de 
referência (0, 0). 











 












y
x
y
x
yxy
yxx




cossin
sincos
´
´
cossin´
sincos´
 
  
VRV )(´ 
  Equação matricial p/ a transformação 
 
 
 
 
 
CISALHAMENTO (SHEAR) 


























y
x
c
c
y
x
yxcy
ycxx
y
x
y
x
1
1
´
´
´
´ 
  
VccCV yx ),(´
  Equação matricial p/ a transformação 
 
 
 
 
CONCATENAÇÃO DE TRANSFORMAÇÕES (TRANSFORMAÇÕES COMPOSTAS) 
 
As transformações apresentadas acima são elementares, isto é, são aplicadas independemente umas 
das outras. Entretanto, no caso geral, as transformações devem ser consideradas como sendo 
aplicadas em conjunto. Por exemplo, quando se deseja rotacionar um objeto deslocado da origem 
em torno de um ponto arbitrário (x0 , y0), que chamaremos de PIVOT, se aplicarmos as expressões 
apresentadas, o mesmo sofrerá um aparente deslocamento ao longo do círculo imaginário de rotação 
centrado na origem (conforme mostra a figura 4). A seqüência que deve ser aplicada é 1) deslocar a 
figura de modo que o ponto PIVOT coincida com a origem das coordenadas; 2) aplicar a rotação no 
objeto deslocado; e 3) transladar a figura de volta para o local original. 
Concatenar transformações requer estratégia (lógica) e uma boa dose de visão espacial para se obter 
o resultado desejado. A sequência correta de transformações não é única e uma má escolha pode 
diminuir a eficiência do processo, tornando-o mais lento ou impreciso. 
Uma vez decidida qual a sequência adequada, devemos transformar os vértices do modelo, 
armazenados no vetor (ou matriz de vetores) V, em vértices transformados V' . Isto pode se feito de 
duas formas: 1) aplicando as transformações elementares uma a uma, o que é pouco eficiente, pois 
aumenta muito a quantidade de cálculos, diminuindo a precisão e aumentando o tempo de execução, 
ou 2) concatenando as matrizes das transformações elementares em uma única matriz de 
transformação, o que parece mais complicado, mas é muito mais eficiente. 
X 
X 
Y 
Y 
x 
x´ 
y' 
y 
x´ 
x 
y 
Figura 5: Cisalhamento 

Pivot 
Figura 4: Rotação. 
11 
 
 
 
EXEMPLO 1. Aplicando as transformações elementares uma a uma ao exemplo acima. 
Seja (x, y) a coordenada de um dos vértices do objeto. Seja, também, (x0, y0) a coordenada do pivot 
de rotação, que não precisa ser, necessariamente, um dos vértices do objeto. Então: 
1. Translação do pivot para a origem (transformando (x, y) em (x', y')): 




























0
0
0
0
'
'
yy
xx
y
x
y
x
y
x 
2. Rotação de um ângulo  (transformando (x', y') em (x'', y'')): 



























 





     cos)'(sin)'( sin)'(cos)'(cos'´sin sin'cos'''cossin sincos'''' 00 00 xxxx
xxxx
yx
yx
y
x
y
x 
3. Voltando ao ponto inicial (transformando (x'', y'') em (x''', y''')) 


























000
000
0
0
cos)'(sin)'(
sin)'(cos)'(
''
''
'''
'''
yxxxx
xxxxx
y
x
y
x
y
x

 
Ou seja, aplicando as expressões: 
000
000
cos)'(sin)'('''
sin)'(cos)'('''
yxxxxy
xxxxxx



 
 
Obteremos o resultado esperado na figura 6, a rotação de ou objeto em torno de um ponto (x0, y0) . 
 
Note que as transformações de rotação, escala, reflexão e cisalhamento são matrizes multiplicativas, 
enquanto que a transformação de translação é uma matriz aditiva. Esta diferença nas operações 
X 
Y 
Ponto em torno 
do qual se deseja 
rotacionar 
X 
Y 
x0 
y0 
X 
Y 
X 
Y 
Centro de rotação 
X 
Y 
Translação do pivot para a origem (T1) Rotação (R) Translação de volta para o ponto inicial (T2) 
Aplicação direta da rotação 
(resultado indesejado) 
Aplicação concatenada (T2 R T1) 
(resultado desejado) 
Figura 6. Concatenação de transformações 
12 
 
 
dificulta a concatenação das transformações em uma única matriz. Isto ocorre justamente porque a 
transformação de translação é não linear, enquanto que as demais são lineares. 
 
A fim de contornar essa dificuldade usamos um artifício matemático que introduz as COORDENADAS 
HOMOGÊNEAS. O uso de coordenadas homogêneas facilita as aplicações de 
transformações sucessivas, pois todas as transformações podem ser resumidas numa única 
matriz, obtida pelo produto das matrizes de cada transformação independente. 
 
COORDENADAS HOMOGÊNEAS 
Considere a transformação de translação mostrada na figura 1. Introduzindo um coordenada extra, 
que chamaremos de z, podemos escrever a equação matricial da transformação da seguinte maneira: 

















































z
y
x
t
t
z
y
x
zyxz
ztyxy
ztyxx
zz
tyy
txx
y
x
y
x
y
x
100
10
01
'
'
'
.10.0'
..1.0'
..0.1'
'
'
'
 
 
Desta maneira, podemos transformar de uma vez por todas os vértices usando a equação matricial 
em coordenadas homogêneas: 
 
EXEMPLO 2. Concatenando as matrizes das transformações elementares em uma única matriz de 
transformação 


































































 























z
y
x
yyx
xyx
z
y
x
z
y
x
y
x
y
x
z
y
x
VyxTRyxTV
  
homogêneasscoordenadaemçãoTransformadeMatriz000
000
0
0
0
0
0000
100
cossincossin
sincossincos
'
'
'
100
10
01
100
0cossin
0sincos
100
10
01
'
'
'
),()(),('





 
 
Cujo resultado final é o mesmo que o do exemplo 1 (como deveria ser), porém de uso mais eficiente 
e adequado para uso em programação. 
 
13 
 
 
V1 = (-1,-1) 
XP 
V2 = (-1, 1) 
YP 
V3 = (1,1) 
(0,0) 
V4 = (1,-1) 
(160,120) 
X 
(319,239) 
Y 
30° 
Figura 7. Quadrado de lado 2 no SRU 
window 
EXEMPLO 3. Mapeamento WINDOW-TO-VIEWPORT usando transformações geométricas e 
coordenadas homogêneas 
No módulo 2 vimos como desenhar uma figura inscrita em uma janela (window) do SRU em uma 
janela de visualização (viewport) do dispositivo gráfico de saída (SRD). Para tanto usamos as 
relações de proporcionalidade, ou seja, uma regra de três simples. No exemplo a seguir faremos o 
mesmo trabalho usando os conceitos estudados no módulo 7. Vamos desenhar um quadrado de lado 
2, centrado na origem do SRU (ou SRO), rotacionado de 30° centrado no meio da tela de um 
dispositivo de 320 x 230 pixels. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Os vértices do quadrado no SRU (ou SRO) possuem coordenadas: V = {V1, V2, V3, V4 } e as 
arestas A = {(V1,V2), (V2,V3), (V3,V4), (V4,V1)} 
Usando a notação vista no módulo 6, podemos escrever as matrizes de vértices e arestas como: 













1111
1111
1111
V
 







1432
4321
A
 
As etapas da transformação são as seguintes: Rotação, Escala, Reflexão e Translação. Estas 
transformações deverão ser concatenadas e aplicadas a cada um dos vértices. 
 
1. Transformação de Rotação: Primeiro iremos girar o objeto conforme desejamos usando a matriz 
homogênea de rotação em 2D: 









 























 

100
086603,05,0
05,086603,0
100
030cos30sin
030sin30cos
100
0cossin
0sincos
)30( 

R
 
 
2. Transformação de Escala: A escala depende das dimensões das janelas de visualização no espaço 
real e no espaço do dispositivo gráfico. Vamos considerar que o quadrado esteja limitado por uma 
window de dimensão 4 x 4, ou seja de (–2, –2) a (2, 2). A janela de visualização do dispositivo 
gráfico será a janela toda, ou seja, 320 x 240. Desta forma, para conter uma janela de dimensões 4 x 
4 em outra de dimensões 320 x 240 os fatores de escala em X e Y serão
1
: 
 - Fator de Escala em X: 320/4 = 80 
 - Fator de Escala em Y: 240/4 = 60 
 
Assim, a matriz que representa o escalonamento do objeto dados será: 
 
1
 A rigor sx = 319/4 = 79.75 sy = 239/4 = 59.75 
14 
 
 






















100
0600
0080
100
00
00
)60.80( y
x
s
s
S
 
 
2. Transformação de Reflexão: Como as ordenadas reais do SRU são crescente de baixo para cima e 
as coordenadas do dispositivo gráfico, SRD, são crescente de cima para baixo, devemos refletir 
verticalmente o objeto. Ou seja, a matriz que representa a reflexão em relação ao eixo X é: 











100
010
001
)1,1(M
 
 
3. Transformação de Translação: Como a origem do dispositivo gráfico encontra-se no canto 
superior esquerdo, precisamos deslocar todo o objeto para o centro da janela de visualização, como 
queremos, cujas coordenadas são (160, 120). A matriz de transformação de translação em 
coordenadas homogêneas para este exemplo é: 











100
12010
16001
)120,160(T
 
 
FINALMENTE: Cada um dos vértices V = { V1, V2, V3, V4 } da figura original deverá ser 
transformado em vértices VP = { VP1, VP2, VP3, VP4 } do dispositivo gráfico pela relação: 
V
V
VRSMTVP























 

































100
120962,5130
16040282,69
100
086603,05,0
05,086603,0
100
0600
0080
100
010
001
100
12010
16001
)30()60,80()1,1()120.160(
 
 




































1111
0,14204,3804,980,202
3,2693,18972,507,130
1111
1111
1111
100
120962,5130
16040282,69
homogêneasscoordenadaemVérticesçãotransformadehomogêneaMatriz
    
VP
 
Observe que a matriz VP deve conter valores inteiros, pois são valores e pixels, então: 











1111
1423898,202
26918951131
VP
 
 
Assim, os vértices V foram transformados em VP 
 
Vértice V VP 
1: (-1,-1) (131,202) 
2: (-1, 1) ( 51, 98) 
3: ( 1, 1) (189, 38) 
4: ( 1,-1) (269,142) 
 
Que, uma vez ligados por um algoritmo de rasterização de linha, produz a figura abaixo. 
15 
 
 
XP 
YP 
(0,0) 
(160,120) 
(319,239) 
(189, 38) 
(51, 98) 
(131,202) 
(269,142) 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Note a distorção gerada pelo fato de que as janelas de visualização no espaço real e no espaço do 
dispositivo têm proporções diferentes. Como poderíamos corrigir essa distorção para obter a figura 
pretendida? 
 
 
 
TRANSFORMAÇÕES GEOMÉTRICAS EM 3D 
 
As transformações geométricas em 3D seguem os mesmos princípios vistos anteriormente. A 
principal diferença é que os modelos, agora, têm três coordenadas x, y e z e as transformações 
podem envolver os três eixos. Por exemplo, a transformação de rotação passa a ser considerada 
como rotação de um ângulo x em torno do eixo x, Rx(x), rotação de um ângulo y em torno do eixo 
y, Ry(y) e rotação de um ângulo z em torno do eixo z, Rz(z). As matrizes de transformação são 
matrizes 3x3 e, no caso das matrizes homogêneas, acrescenta-se a coordenada auxiliar w e as 
matrizes são de tipo 4x4. 
 
Segue abaixo as principais matrizes de transformação em coordenadas homogêneas (x, y, z, w) : 
 
TRANSLAÇÃO: 















1000
100
010
001
),,(
z
y
x
zyx
t
t
t
tttT
 
ESCALA: 















1000
000
000
000
),,(
z
y
x
zyx
s
s
s
sssS
 
 
ROTAÇÃO: 
















1000
0cossin0
0sincos0
0001
)(
xx
xx
xxR 


 













 

1000
0cos0sin
0010
0sin0cos
)(
yy
yy
yyR 


 
















1000
0cossin0
0sincos0
0001
)(
xx
xx
xxR 


 
 
 
16 
 
 
 
Aula 5.2 
 
 Operações Aritméticas Orientadas à Vizinhanças 
 Filtragem no Domínio Espacial (Máscaras) 
 Máscaras de suavização (média e mediana) e aguçamento (laplaciano) 
 Correlação x Convolução 
 
FILTRAGEM DE IMAGEM NO DOMÍNIO ESPACIAL 
(Operações aritméticas orientadas à vizinhança) 
 
Diferentemente do que vimos no módulo anterior, onde todos os pixels de uma imagem f(x,y) eram 
transformados segundo uma função T modelada sob a forma de uma CURVA DE TONS (gráfico 
de f contra g),sem dependerem do valor de pixels adjacentes, nas OPERAÇÕES ARITMÉTICAS 
ORIENTADAS À VIZINHANÇA cada pixels da imagem será modificado segundo seu próprio 
valor e em função dos valores dos pixels adjacentes. O resultado será armazenado em uma nova 
imagem g(x,y). 
 
O termo DOMÍNIO ESPACIAL refere-se ao próprio conjunto de pixels que compõem e imagem, 
ou seja, a própria f(x,y). 
 
Esse tipo de operação consiste na aplicação de uma máscara (matriz de pequena dimensão) como 
elemento estruturante da vizinhança de um dado pixel. As operações de arranjo matricial 
envolvidas são a CORRELAÇÃO e a CONVOLUÇÃO. A correlação consiste em mover a máscara 
pela imagem e calcular a soma dos produtos em cada posição. A convolução funciona da mesma 
forma, exceto que a mascara é rotacionada de 180°. Em termos matemáticos, a correlação de uma 
máscara M(x, y) de tamanho m x n com uma imagem f(x, y) é dada pela equação: 
 
 
 

a
as
b
bt
tysxftsMyxfyxMyxg ),(),(),(),(),( 
 
 
onde a = (m-1)/2 e b = (n-1)/2. Já a convolução é dada pela equação: 
 
 
 

a
as
b
bt
tysxftsMyxfyxMyxg ),(),(),(),(),(
 
 
Como um primeiro exemplo, consideremos uma máscara 3 x 3 onde todos os elementos sejam 
iguais a 1/9 (0,1111...) 
 
 
 
Conforme a primeira equação acima (correlação de um arranjo matricial) podemos escrever: 
 
 
 
Ou seja: 
1/9 1/9 1/9 
1/9 1/9 1/9 
1/9 1/9 1/9 
17 
 
 
 
 
 
Ora, isso nada mais é do que calcular a média dos 9 pixels (valor do pixels central f(x,y), e de seus 
oito vizinhos) e substituir na posição correspondente em g(x,y). Por essa razão, a máscara 
representada acima é denominada MASCARA DE MÉDIA. 
 
Repetindo a operação para todos os valores de f(x, y) obteremos uma nova imagem g(x,y) (Figura 
1). 
 
 
Figura 1. Funcionamento da filtragem espacial linear utilizando uma máscara 3 x 3. A forma escolhida para expressar as 
coordenadas dos coeficientes da máscara simplifica a escrita de expressões para filtragem linear (GONZALEZ, R. C. e 
WOODS, R. E. “Processamento Digital de Imagens”, 3ª. Edição, São Paulo, Pearson, 2010, página 95.) 
 
Em forma de PSEUDOCÓDIGO as duas operações (correlação e convolução) podem ser descritas 
como: 
 
tipo f = matriz [0..numero_de_colunas-1, 0..numero_de_linhas-1] de inteiros; 
tipo gCr = matriz [0..numero_de_colunas-1,0..numero_de_linhas-1] de inteiros; 
tipo gCv = matriz [0..numero_de_colunas-1,0..numero_de_linhas-1] de inteiros; 
tipo M = matriz [0..2,0..2] de real; // Mascara 3 x 3 
inteiro X, Y, S, T; 
18 
 
 
 
// Máscara de média 3 x 3 (cada elemento vale 1/9) 
para X de 0 até 2 passo 1 faça 
 para Y de 0 até 2 passo 1 faça 
 M[X,Y]=1/9; 
 
// Calcula CORRELAÇÃO e CONVOLUÇÃO excluindo as bordas 
para X de 1 até numero_de_colunas-2 passo 1 faça 
 para Y de 1 até numero_de_linhas-2 passo 1 faça 
 gCr[X,Y]=0; 
 gCv[X,Y]=0; 
 para S de -1 até 1 passo 1 faça 
 para T de -1 até 1 passo 1 faça 
 gCr[X,Y]= gCr[X,Y] + M[S+1,T+1]*f(X+S,Y+T); // Correlação 
 gCv[X,Y]= gCv[X,Y] + M[S+1,T+1]*f(X-S,Y-T); // Convolução 
 fimpara; 
 fimpara; 
 fimpara; 
fimpara; 
fim. 
 
O efeito visual que a MASCARA DE MÉDIA produz sobre a imagem corresponde a de 
SUAVIZAÇÃO (blurring) 
 
 (a) (b) (c) 
 
 
Figura 2. Resultado da aplicação da máscara de média simples. Da esquerda para a direita: imagem original, imagem resultante da 
aplicação de uma máscara de média 3 x 3, imagem resultante da aplicação de uma máscara 5 x 5. Observe o efeito de borda, 
particularmente notável na última figura. 
 
ALGUNS FILTROS LINEARES 3 x 3 ÚTEIS: 
 
FILTROS DE SUAVIZAÇÃO OU PASSA-BAIXA: 
 
Filtro de Média 











111
111
111
9
1
1z
 
Filtro de Média ponderada (peso 2 no pixel central) 











111
121
111
10
1
2z
 
Filtro Gaussiano 











121
242
121
16
1
3z
 
 
 
19 
 
 
 
FILTROS DE AGUÇAMENTO, ÊNFASE OU PASSA-ALTA: 
 
Ao contrário dos filtros de média, que suavizam (borram) a imagem, os filtros de aguçamento 
servem para detecção ou realce de bordas. 
 
Filtros Gradiente ou Derivada de Imagens (Prewitt e Sobel) permitem a detecção de bordas. São 
aplicados em conjunto. Primeiro aplica-se um e depois o outro sobre a imagem original obtendo 
duas imagens distintas, com bordas realçadas, que são combinadas (somadas) posteriormente. 
 
Prewitt Horizontal (realça/destaca linhas horizontais) 









 

111
000
111
HGP
 
 
Prewitt Vertical (realça/destaca linhas verticais) 














101
101
101
VGP
 
 
Sobel Horizontal (realça/destaca linhas horizontais) 









 

121
000
121
HGS
 
 
Sobel Vertical (realça/destaca linhas verticais) 














101
202
101
VGS
 
 
 
Filtro Laplaciano (derivada segunda da imagem). No operador laplaciano o coeficiente central tem 
o sinal oposto dos demais. 
 
Laplaciano 














010
141
010
1GL
 
ou 











010
141
010
2GL
 
Laplaciano com termos diagonais 














111
181
111
1GLD
 
ou 











111
181
111
2GLD
 
 
Observe que, nas máscaras apresentadas logo acima, a SOMA DOS PESOS é nula. Outra diferença 
é que seu uso elas pode resultar em valores de pixels negativos ou acima do valor máximo. Nestes 
casos, é preciso normalizá-los ou simplesmente descartá-los (p.ex., se g(x,y) < 0  g(x,y) = 0). 
 
As figuras 3 e 4, a seguir, exemplificam alguns dos filtros (máscaras) de aguçamento apresentados e 
seus resultados. 
 
20 
 
 
 (a) (b) (c) (d) 
 
 
Figura 3. Resultado da aplicação das máscaras (filtros espaciais) de PREWITT. (a) imagem original, (b) Prewitt Horizontal, (c) 
Prewit Vertical e (d) uma curiosa aplicação de (a) + (c) produzindo um efeito de alto/baixo relevo. 
 
 (a) (b) (c) (d) 
 
 
Figura 4. Resultado da aplicação do LAPLACIANO. (a) imagem original, (b) Laplaciano com termos diagonais e peso central 
positivo - GLD1, (c) Laplaciano com termos diagonais e peso central negativo – GLD2 e (d) aplicação de (a) - (c) produzindo um 
certo efeito de aguçamento da imagem. 
 
Por fim, para ilustrar a complexidade que é a aplicação de máscaras, considere os seguintes passos, 
que irão resultar no que é conhecido como MASCARA DE NITIDEZ (unsharp masking) e 
MÁSCARA DE ALTO-REFORÇO (high-boost): 
 
1. Borrar a imagem original, f(x,y), com a aplicação de uma máscara de média, obtendo g(x,y). 
2. Subtrair a imagem borrada da imagem original, ou seja: g(x,y) = f(x,y) - g(x,y) para todos os 
pixels (x,y). A imagem resultante é denominada MÁSCARA. 
3. Somar a MÁSCARA, multiplicada por uma constante k, à imagem original: g(x,y) = f(x,y) – 
k.g(x,y). 
 
No passo 3, quando k = 1 o resultado k.g(x,y) é a MÁSCARA DE NITIDEZ padrão. Quando k > 1 
a máscara é denominada de ALTO-REFORÇO. Quando k < 1 o resultado será uma MÁSCARA DE 
NITIDEZ mais atenuada. A figura a seguir mostra o exemplo de aplicação de uma MÁSCAR DE 
NITIDEZ quando k = 1 e de ALTO-REFORÇO quando k = 2. 
 
 (a) (b) (c) (d) 
 
 
Figura 5. Resultado da aplicaçãodas MÁSCARAS de (b) NITIDEZ (k = 1) e (b, c) ALTO-REFORÇO (com k = 2 e k = 5). (a) é a 
imagem original. Note que o resultado do ALTO-REFORÇO para k elevado é muito parecido com o aguçamento usando o 
LAPLACIANO. 
21 
 
 
FILTROS (MÁSCARAS) NÃO LINEARES OU DE ESTATÍSTICA DE ORDEM 
 
As máscaras acima são consideradas MÁSCARAS ou FILTROS LINEARES, pois as operações de 
CORRELAÇÃO e CONVOLUÇÃO são operações LINEARES. Já os FILTROS DE 
ESTATÍSTICA DE ORDEM, como se baseiam na CLASSIFICAÇÃO, ou ORDENAÇÃO, dos 
pixels contidos na área da imagem coberta pela máscara, e não mais pela média ou quaisquer outras 
operações de arranjo matricial. 
 
O mais conhecido filtro nesta categoria é o FILTRO DE MEDIANA (ou MÁSCARA DE 
MEDIANA). Apesar de também SUAVIZAR (ou BORRAR) a imagem, com no filtro de média, o 
filtro de MEDIANA é mais empregado na REMOÇÃO DE RUÍDOS ALEATÓRIOS que, 
porventura, ocorram na imagem original. Em particular, o filtro de mediana é bastante eficaz na 
remoção de um tipo de RUÍDO IMPULSIVO denominado SAL E PIMENTA (distribuição 
aleatória de pixels brancos, “sal” e pretos, “pimenta”). 
 
A MEDIANA consiste no “elemento do meio” de uma amostra ordenada. Sendo assim, a aplicação 
da máscara de mediana consiste em: 
 
1. Ordenar os valores de f(x,y) e vizinhos contidos sob a cobertura da máscara centrada em 
(x,y). 
2. Substituir o valor f(x,y) pelo valor obtido de MEDIANA. 
 
Por exemplo, se temos uma área de da imagem coberta pela máscara 3 x 3 com o valores: 
 
0 2 5 
4 9 2 
3 6 3 
 
O pixel central na imagem resultante (filtrada) será 
 
_ _ _ 
_ 3 _ 
_ _ _ 
 
Que é a MEDIANA da sequência ordenada: {0, 2, 2, 3, 3, 4, 5, 6, 9}, sendo os demais valores de 
sua vizinhança determinados pelos sucessivos deslocamentos da máscara sobre a imagem original. 
 
Na figura a seguir mostramos nossa imagem exemplo original “contaminada” com um RUÍDO 
IMPULSIVO tipo SAL E PIMENTA e depois filtrada com uma MÁSCARA DE MEDIANA. 
 
 (a) (b) (c) 
 
 
Figura 5. Resultado da aplicação da MÁSCARA de MEDIANA. (a) Imagem original. (b) Imagem original contaminada com ruído 
SAL E PIMENTA. (c) Imagem filtrada com a MASCARA DE MEDIANA 3 x 3.

Outros materiais