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.