introduÇÃo a mÉtodos numÉricos para …calves/an/lmac/projecto/... · utilizadas técnicas...
TRANSCRIPT
INTRODUÇÃO A MÉTODOS NUMÉRICOS PARA TRATAMENTO DE IMAGEM
Inês Estrela Oliveira
Projecto em Matemática (3º Ano)
Licenciatura em Matemática Aplicada e Computação
Instituto Superior TécnicoUniversidade Técnica de Lisboa
2007
Orientador: Carlos J. S. Alves
ÍNDICE
Introdução..................................................................................................................1
Capítulo 1 – Problemas 1D......................................................................................3
1.1 – Filtros de regularização....................................................................................4
1.2 – Convolução Discreta.......................................................................................7
1.3 – Transformada de Fourier Discreta..............................................................11
Capítulo 2 – Problemas 2D....................................................................................13
2.1 - Representação algébrica de uma imagem.................................................... 13
2.2 - Transformações sobre a imagem..................................................................14
2.2.1 - Transformações que preservam a dimensão da matriz................. 15
a) Transformações pontuais..........................................................................15
b) Transformações locais...............................................................................25
2.2.2 - Transformações que alteram a dimensão da matriz.......................33
INTRODUÇÃO
Com o novo paradigma da digitalização, o armazenamento de dados de som e
imagem passou a ser efectuado de forma quantificada, em forma de bits. O
primeiro desenvolvimento que se tornou popular foi no som, nos anos 80,
onde rapidamente os CD’s relegaram para um segundo plano o
armazenamento convencional em vinil, realizado analogicamente. Pouco
depois, nos anos 90, o mesmo desenvolvimento foi aplicado a fotografias, e
mais recentemente a filmes, que são actualmente comercializados em DVD’s.
Numa fase inicial, este armazenamento ocorreu de forma directa, com uma
conversão directa dos valores para a forma digital, sem cuidados especiais em
termos de optimização de espaço de armazenamento. Por exemplo, em
imagem, o armazenamento no formato BMP (bitmap) não estava sujeito a
nenhuma compressão. No entanto, cedo se percebeu que poderiam ser
utilizadas técnicas numéricas de compressão de dados para diminuir o espaço
de armazenamento, sem grande compromisso ao nível da resolução final. Em
imagem, começaram a aparecer os formatos GIF e JPEG, onde a compressão
era significativa, em som apareceu o formato MP3, e para filmes o formato
MPEG4.
Neste trabalho iremos estudar alguns aspectos do tratamento de imagem,
começando por apresentar técnicas de regularização para o caso
unidimensional, no Capítulo 1. No Capítulo 2, são abordados os aspectos da
representação algébrica de uma imagem e são aplicados diversos algoritmos
desenvolvidos em linguagem Mathematica, para ilustrar estas aplicações.
1
C a p í t u l o 1 - P r o b l e m a s 1 D
Eliminação do ruído numa funçãoVamos começar por definir e utilizar métodos para remover o ruído de
funções periódicas unidimensionais.
Considere-se a seguinte função com ruído f: ℜ→ℜ :
-4 -2 2 4
0.1
0.2
0.3
0.4
O valor da função com ruído é dado pela seguinte expressão:
∫ℜ∗=−= ))(()()()( xfdkkxkfxf δδ ,
onde δ(x – k) representa uma translação do delta de Dirac, definido da
seguinte forma: )0()( fx =δ , ou mais informalmente:
≠=∞
=.0,0
0,)(
xx
xδ
Uma vez que estamos interessados em eliminar o ruído e obter uma função
regularizada (chamemos-lhe g), fazemos a discretização do integral e
consideramos funções h, denominadas filtros, ao invés do delta de Dirac:
∑∞
− ∞=
−=k
kxhkfxg )()()( .
3
A expressão anterior corresponde à convolução discreta entre a função f e o
filtro h:
)()()( xgxfxg ∗= .
Vejamos na secção seguinte, com mais detalhe, como utilizar esses filtros.
1.1 – Filtros de regularização
Exemplos de filtros de regularização simples e bastante utilizados são:
h1(x) =
>
≤
ε
εε
xse
xse
,0
,21
e h2(x) =
>
≤−
ε
εε
ε
xse
xsex
,0
,2 .
No primeiro caso, h1, a aplicação do filtro a um determinado ponto de uma
função corresponde a fazer uma média dos valores. Aplicando o filtro a todos
os pontos definidos de uma função, obtemos a função regularizada, isto é,
sem ruído.
O seguinte código em linguagem Mathematica, mostra uma forma de se
implementar o processo acima descrito, adaptado ao caso discreto, através da
função seguinte, que recebe como argumentos uma lista com os valores de y e
o valor de ε (número de pontos).
FunctionA8ys, ¶<,k= Length@ysD;r= ys;i = 1;WhileAi£ k,rPiT =
Új=i-¶i+¶ If@j> 0, If@j£ k, ysPjT, ysPj- kTD, ysPj- 1TD
2¶ ;i= i+ 1E;rE
4
Exemplo 1.1.1: Veja-se um exemplo de aplicação desta rotina à função
23 )cos()sin()( xxxf += , à qual foi adicionado 10% de ruído:
1 2 3 4 5 6
-1
-0.5
0.5
1
Figura 1.1: Função f com ruído
Utilizando ε=5, verificam-se ainda algumas perturbações, mas utilizando
ε=20 já se obtém um resultado bastante satisfatório.
1 2 3 4 5 6
-1
-0.5
0.5
1
Figura 1.2: Função f regularizada, com ε=5.
5
1 2 3 4 5 6
-1
-0.5
0.5
1
Figura 1.3: Função f regularizada, com ε=20.
Ao utilizar um valor de ε muito grande, como por exemplo ε=100, perde-se
o aspecto original do gráfico, desaparecendo as oscilações iniciais.
1 2 3 4 5 6-0.2
0.2
0.4
0.6
0.8
Figura 1.4: Função f regularizada, com ε=100.
O segundo filtro, h2, permite o cálculo da derivada da função que se pretende
regularizar.
h2’(x) =
>
≤<−−
≤<
ε
εε
εε
xse
xse
xse
,0
0,1
0,1
2
2
,
6
Segue-se a sua implementação na linguagem Mathematica: FunctionA8ys, ¶, escal<,k= Length@v2D;r= ys;i = 1;WhileAi£ k,rPiT = -
HÚj=i-¶i If@j > 0, If@j£ k, ysPjT, ysPj- kTD, ysPj-1TDL escal
¶2+
HÚj=i+1i+n If@j> 0, If@j£ k, ysPjT, ysPj- kTD, ysPj- 1TDL escal¶2
;i= i+ 1E;rE;
Exemplo 1.1.2: Retome-se o exemplo da função 23 )cos()sin()( xxxf +=
com ruído. Através da utilização desta última rotina é possível aproximar
)(' xf e obter o seguinte gráfico:
1 2 3 4 5 6
-2
-1
1
2
Figura 1.5: Aproximação da derivada de f, com ε=50.
1. – Convolução Discreta
Embora a utilização dos filtros tal como em 1.1 dê bons resultados
numéricos, em termos de eficiência computacional já não se pode dizer o
mesmo. É possível ultrapassar esse problema calculando directamente a
convolução discreta entre o filtro e a função com ruído. A linguagem
7
Mathematica possui uma rotina predefinida que calcula a convolução entre
duas listas – ListConvolve.
A convolução discreta é dada pela seguinte expressão:
∑ −=∗k
kxhkfxhf )()())(( ,
onde f é a função que se pretende regularizar e h o filtro.
Para calcular a convolução vamos representar os filtros através de listas, de
comprimento igual ao comprimento da lista com os valores de y da função
ruidosa.
Exemplo 1.2.1: Veja-se o caso do filtro h2 (definido em 1.1). Considere-se
xx eexg −+
= 2)( , com 10% de ruído:
-6 -4 -2 2 4 6
0.2
0.4
0.6
0.8
1
Figura 1.6: Função g com ruído.
Seja ys a lista dos valores de y desta função. Para calcular o filtro do tipo h2,
pode-se correr a seguinte rotina da linguagem Mathematica:
h2[ys_,n_]:=( comp=Length[ys]; filtro=0*ys; Do[filtro[[k]]=(n-(k-1))/n^2; filtro[[comp-(k-1)]]= (n-(k-1))/n^2, {k,1,n}]; filtro );
8
onde n corresponde ao valor de ε, e cuja representação gráfica se pode ilustrar
na figura seguinte:
200 400 600 800 1000 1200
0.001
0.002
0.003
0.004
0.005
0.006
Figura 1.7: Filtro h2, com ε=150.
Nota: O “desenho” do filtro encontra-se dividido em dois, uma vez que ele
está centrado em x=0.
Calculando então a convolução dada por
ListConvolve[h2[ys,150],ys,1];
obtém-se a função g regularizada.
-6 -4 -2 2 4 6
0.2
0.4
0.6
0.8
1
Figura 1.8: Função g regularizada, através da convolução com h2.
9
Exemplo 1.2.2: Veja-se agora o caso do filtro h2' para a mesma função g do
exemplo anterior.
O filtro h2' pode ser calculado pela seguinte rotina:
h2'[ys_,n_]:=( comp=Length[ys]; filtro=0*ys; Do[filtro[[k]]=-1/n^2; filtro[[comp-(k-1)]]= 1/n^2, {k,1,n}]; filtro );
200 400 600 800 1000 1200
-0.00004
-0.00002
0.00002
0.00004
Figura 1.9: Aspecto gráfico do filtro h2', com ε=150.
Calculando então a convolução dada por
ListConvolve[h2'[ys,150],ys,1];
obtém-se a aproximação da derivada de g:
-6 -4 -2 2 4 6
-0.4
-0.2
0.2
0.4
10
Figura 1.10: Aproximação da derivada de g, através da convolução com h2'.
1. – Transformada de Fourier Discreta
A convolução, ainda assim, é uma operação cara quando a matriz é muito
grande. Torna-se mais eficiente, nesses casos, utilizar a transformada de
Fourier, dispensando assim o cálculo da convolução. Tal é possível devido à
seguinte propriedade da transformada de Fourier (F):
)()()( gFfFgfF ⋅=∗ ,
em que ∫∞
∞−
= dtetffF ti ωω
π)(
21)( )( (definição da transformada de
Fourier).
No caso discreto, podemos utilizar a função Fourier, predefinida na linguagem
Mathematica. Assim, calculam-se as transformadas de Fourier do filtro e da
função. Em seguida, procede-se ao cálculo da inversa da transformada de
Fourier da multiplicação daqueles dois. Em Mathematica, este procedimento é
descrito da seguinte forma: InverseFourier[Fourier[h]* Fourier[y]];
onde h representa o filtro e y a lista das ordenadas da função em causa.
Exemplo 1.3.1: Retome-se o exemplo da função g, dada por
xx eexg −+
= 2)( , com 10% de ruído.
11
Seja h2 o filtro (tal como definido em 1.2) a utilizar e seja ys a lista com os
valores de )(xg . Aplicando a inversa da transformada de Fourier, tal como
descrito acima, obtém-se o seguinte resultado (com ε=150):
-6 -4 -2 2 4 6
0.2
0.4
0.6
0.8
1
Figura 1.11: Função g regularizada utilizando a transformada de Fourier.
Apliquemos agora o filtro h2’ com ε=150. O resultado obtido é:
-6 -4 -2 2 4 6
-0.4
-0.2
0.2
0.4
Figura 1.12: Aproximação da derivada de g utilizando a transformada de
Fourier.
12
C a p í t u l o 2 - P r o b l e m a s 2 D
2.1 – Representação algébrica de uma imagem
Neste trabalho iremos considerar uma imagem como uma matriz de atributos
de cores, onde cada entrada da matriz corresponde a um pixel. As dimensões
da matriz são N: número de linhas, M: número de colunas.
Para uma imagem a preto e branco (escala de cinzentos), a matriz P tem NM
entradas com valores entre 0 e 2C-1, onde C define a resolução de contrastes
da imagem.
No caso de uma imagem puramente a preto e branco temos C=1, e o espaço
de armazenamento, antes de qualquer compressão é de NM bits. Quando
C=8, valor habitual, passamos a ter NM bytes.
No caso de imagens a cores, temos uma representação na forma RGB (red,
green, blue), em que cada entrada pode ser vista como um vector
tridimensional, onde cada componente tem valores que variam também entre
0 e 2C-1, onde o valor habitual também é C=8. Ou seja,
P = [Pnm ]N×M , com Pnm = (PnmR , Pnm
G , PnmB ),
em que Pnmα ∈{0, …, 2C-1}.
A matriz de vectores P pode ser também encarada como três matrizes de
dimensão N×M, em cada uma das matrizes Pα tem as componentes Pnmα, ou
como um tensor de dimensões N×M×3.
A figura seguinte mostra um exemplo de uma imagem armazenada como um
tensor P, de dimensão 254×338×3:
13
Figura 2.1: Imagem armazenada como um tensor.
2.2 - Transformações sobre a imagem
Podemos distinguir dois tipos de transformações sobre a matriz que contém a
imagem:
1. Transformações que preservam a dimensão da matriz:
a. Transformações pontuais – elemento a elemento, ou seja, pixel a
pixel;
b. Transformações locais ou globais – que aplicam de um conjunto de
elementos num elemento.
2. Transformações que alteram a dimensão da matriz:
a. Transformações que aumentam ou reduzem a matriz,
mantendo as características da matriz original (por exemplo,
os efeitos de zoom: zoom in, zoom out);
b. Transformações que cortam ou concatenam partes da
imagem original.
14
Vamos então ver alguns exemplos de transformações usuais nos softwares de
imagem.
2.2.1 - Transformações que preservam a dimensão da matriz
a) Transformações pontuais
- Luminosidade e contraste
Uma das transformações mais comuns é o controlo de luminosidade duma
imagem. De facto, trata-se de uma transformação bastante simples: basta
adicionar a cada pixel uma constante k > 0, para aclarar, ou k < 0 para
escurecer:
T(Pnm ) = (PnmR + k, Pnm
G + k , PnmB + k) 256mõd ,
em que
<>
≤≤=
00255255
2550
256
nsense
nsenmõdn .
Nota: Esta operação é feitas automaticamente no Mathematica.
Esta transformação pode ser implementada em linguagem Mathematica através
da seguinte função: t= Function[P,Map[(#+k)&, P, {2}]];
Figura 2.2: Imagem aclarada e imagem escurecida, com k=100 e k=-100,
respectivamente.
15
Outra transformação muito usual é o controlo do contraste de uma imagem.
Mais uma vez, trata-se de uma expressão simples dada pela seguinte fórmula:
T(Pnm ) = (m PnmR ^ k, m Pnm
G ^ k , m PnmB ^ k) 256mõd ,
que em Mathematica é dada pela função:
t=Function[P,Map[(m*#+k)&, P, {2}]];
Figura 2.3: Maior contraste com m=1.5 e menor contraste para m=0.5.
- Manipulação das cores RGB
É possível alterar os níveis de uma ou mais cores RGB (vermelho, verde e
azul, respectivamente), através da soma de uma constante para cada cor em
separado:
T(Pnm ) = (PnmR + r , Pnm
G + g , PnmB + b) 256mõd .
Em linguagem Mathematica, tal transformação é calculada pela função
c=Function[P, Map[(#+{r,g,b})&,P,{2}];
16
Figura 2.4: Aumento do nível de vermelho (r=100), verde (g=100) e azul
(b=100), respectivamente, aplicando a função c.
Esta transformação pode ser utilizada para corrigir o tom da imagem. Por
exemplo, de modo a tornar mais reais as cores da imagem fotográfica seguinte
(que ficou com um notório tom avermelhado), aumentaram-se os valores de
verde e azul.
Figura 2.5: Imagem original Figura 2.6: Imagem transformada
17
É também muito comum fazer-se a passagem de uma imagem colorida para
uma imagem em escala cinza, ou seja, a preto e branco. Tal transformação é
conseguida se ambos os valores de R, G e B forem iguais, isto é, possuírem a
mesma intensidade. Assim, basta aplicar:
T(Pnm ) = (PnmR + Pnm
G + PnmB )/3 × (1 , 1 , 1),
que em Mathematica é dada pela função:
pb=Function[P, Map[Apply[Plus,#]/3*{1,1,1}&, P, {2}]];
Figura 2.7: Imagem em escala de cinzentos.
Outra transformação de cores interessante é a passagem a negativo de uma
imagem, dada pela expressão
T(Pnm ) = (-PnmR , -Pnm
G , -PnmB ) (mod 2C-1)
=(2C -1-PnmR , 2C -1-Pnm
G , 2C -1-PnmB ),
calculada pela seguinte função na linguagem Mathematica:
negativo=Function[P, Map[(255 - #)&,P,{2}]];
18
Figura 2.8: Imagem após aplicação da função negativo.
Histogramas
Cada matriz P pode ser decomposta em matrizes de cores usando as funções
PR = Map[#[[1]]{1,0,0}&, P,{2}]];
PG = Map[#[[2]]{0,1,0}&, P,{2}]];
PB = Map[#[[3]]{0,0,1}&, P,{2}]];
Podemos fazer uma análise dos histogramas para cada uma das cores (ver
Figura 2.12) em que consideramos a seguinte função
Hist=Function[Q, Count[Flatten[Q],#]&/@Range[0,255]];
19
50 100 150 200 250
500
1000
1500
2000
2500
50 100 150 200 250
500
1000
1500
2000
50 100 150 200 250
500
1000
1500
2000
Figura 2.12: Histogramas com as ocorrências entre 0 e 255 para as várias
cores. A curva a preto é uma aproximação regularizada aplicando um filtro.
Observando os histogramas, podemos verificar que existe uma concentração
em determinados valores, pelo que há alguma redundância na apresentação da
imagem com toda a resolução.
− Restrição das cores
É possível restringir a gama de cores, alterando o valor “comum” de c=8,
para um valor mais baixo.
20
Aplicando as seguintes funções da linguagem Mathematica,
val=Union[Range[0,255, Round[255/r]]];
f=Function[p, flag=False; i=1; While[ibLength[val]&&flag!=True, If[p>=Round[val[[i]]/2],p2=val[[i]], flag=True]; i=i+1; ]; p2];
ag=Function[P, Map[f,P,{3}]];
obtiveram-se as seguintes imagens (onde r é o número de valores da gama
restringida):
Figura 2.9: Gama de cores restringida, com r=10.
Figura 2.10: Gama de cores restringida, com r=3.
21
Escolhendo c=1, obtém-se uma imagem puramente a preto e branco. A
expressão da transformação de uma imagem colorida numa imagem
puramente a preto e branco obtém-se à custa da média de todos os valores
das cores da imagem colorida:
FP
FPm
FP
ii
#
#
1∑
==, onde FP é a matriz P “alisada”, e #FP o seu cardinal.
×≥=
..,0255)(
ccmkPsePT
inmi
nm , onde k é uma constante escolhida de
forma a optimizar o resultado pretendido.
Nota: Se a média for maior que 128, a imagem denota uma tendência para
uma imagem clara. Caso contrário, essa tendência será para uma imagem
escura.
Vejamos as funções em linguagem Mathematica para calcular a média e a
transformação:
media=Function[P,Apply[Plus, Flatten[P]]/Length[Flatten[P]]];
ib=Function[P,Map[If[Max[#]>k*m,255,0]*{1,1,1}&,P,{2}]];
Figura 2.11: Imagem resultado de aplicar a função ib, com k=1.
22
- Outras transformações
Um exemplo interessante é a aplicação de uma textura a uma imagem, que
resulta da combinação de duas imagens com as mesmas dimensões. Seja Q a
matriz que representa a imagem da textura. Então tem-se:
T(Pnm , Qnm) = (1 – t) Pnm + t Qnm ,
onde t é o nível de nitidez da textura. Na linguagem Mathematica esta
transformação é dada por:
comb=Function[{P,Q,t},(1-t)P+t*Q];
Figura 2.14: Resultado da aplicação de uma textura, com t=0.4.
Na verdade, aplicando esta transformação várias vezes, fazendo variar o valor
de t de k em k unidades, obtém-se uma passagem gradual da imagem dada
pela matriz P à imagem dada pela matriz Q. Por exemplo, fazendo k=1/3,
obtêm-se 4 imagens (ver figura 2.15), com as quais se pode criar uma imagem
dinâmica, armazenada por exemplo em formato GIF.
23
b) Transformações locais
- Regularização
O exemplo mais comum de uma transformação local, consiste na
regularização da imagem por média com os pixeis vizinhos. Podemos
considerar diferentes tipos de vizinhança, por exemplo, quatro pontos
adjacentes ou 9 prontos adjacentes, como ilustrado na figura seguinte:
Figura 2.16: Tipos de vizinhança de um pixel.
Veja-se um exemplo do primeiro caso, através da transformação
T(Pnm ) = (Pn+1,m + Pn-1,m + 4 Pnm + Pn,m+1 + Pn,m-1 )/8. (i)
Neste caso, é considerada uma média ponderada, em que é atribuída maior
importância ao valor inicial do pixel central.
No segundo caso, podemos aplicar a transformação
T(Pnm ) = (Pn-1, m-1 + Pn,m-1+ Pn+1,m-1 + Pn-1,m + Pn,m + Pn+1,m + Pn-1,m+1 + Pn,m+1 +
Pn+1,m+1)/9, (ii)
que atribui o mesmo peso a cada pixel, ou então, por exemplo, a
transformação
T(Pnm ) = (Pn-1, m-1 + 2Pn,m-1+ Pn+1,m-1 + 2Pn-1,m + 4Pn,m + 2Pn+1,m + Pn-1,m+1 +
2Pn,m+1 + Pn+1,m+1)/16, (iii)
25
que atribui pesos diferentes a cada pixel.
Nota: À priori, estas transformações só estão bem definidas para os
elementos internos da matriz, mas podem ser definidas para todos os
elementos considerando que os valores não definidos Pn,M+1 , PN+1,m , Pn,-1 ,
P-1,m , são nulos ou iguais aos valores com índice definido por aplicação de
igualdade modular (mod 255).
A aplicação das transformações descritas acima corresponde à convolução
entre a matriz da imagem (matriz P) com o respectivo filtro (matriz H).
Podemos agora escrever as transformações (i), (ii) e (iii) à custa da
convolução:
PHPT k ∗=)( (na linguagem Mathematica, T=ListConvolve[H,P];)
=
010141010
81
)(iH ,
=
111111111
91
)(iiH ,
=
121242121
161
)(iiiH
Podemos generalizar mais e calcular a média dos n pixeis mais próximos com
n >9. Vejamos um exemplo de regularização de uma imagem por uma
transformação uniforme, ou seja, do tipo (ii), que provoca quase um
desaparecimento de alguns detalhes da imagem:
Figura 2.17: Imagem antes e após a regularização, com n=16.
26
Para um valor de n bastante grande, obtém-se um efeito de imagem
desfocada. Por exemplo, para n=25, o filtro fica:
=
1111111111111111111111111
251
)(iiH , e a imagem obtida é:
Figura 2.18: Imagem resultante da aplicação de um filtro de média, utilizando
uma vizinhança de 25 pixeis.
− Detecção de contornos
A detecção dos contornos de uma imagem é feita através da derivada, ou seja,
através da convolução de um filtro de derivada.
Um filtro básico para o cálculo da primeira derivada é dado por:
( )101 −=xH e Txy HH = .
27
Com estes dois filtros podemos calcular a magnitude do gradiente, definido
como:
22yx TT + , onde PHT xx ∗= e PHT yy ∗= .
Calculando magnitude do gradiente, obtém-se a figura seguinte:
Figura 2.19: Contornos de uma imagem, calculados pela primeira derivada.
− Detecção de contornos 2
Podemos ainda calcular o Laplaciano discreto para obter os contornos de
uma imagem. Neste caso, o filtro mais simples é:
−=
010141010
, yxH
Calculando a segunda derivada obtém-se então a seguinte imagem:
28
Figura 2.20: Contornos de uma imagem, calculados pela segunda derivada.
− Realçar detalhes
Após encontrar a matriz que corresponde à imagem dos contornos da
imagem original (chamemos-lhe Q), estamos em condições de calcular a
matriz que corresponde a uma imagem que resulta de realçar os detalhes da
imagem original. Seja P a matriz da imagem original, então:
T(P) = P + k × Q,
onde k é um valor tal que quanto maior for k, maior é o realce dos detalhes.
29
Figura 2.21: Realce dos detalhes, com k=2.
− Relevo
Para criar um efeito de relevo considere-se a o seguinte filtro:
−=
000010001
kH , onde k maior que 1, para acentuar mais o relevo.
Podemos colocar o valor “-1” estrategicamente, consoante a direcção que se
pretende para o relevo. Por exemplo, neste caso, o resultado obtido é o
ilustrado na figura seguinte, (onde foi adicionado 50% da figura original):
30
Figura 2.22: Relevo de uma imagem, com k=2.
- Outras transformações
Combinando as imagens anteriores, obtêm-se efeitos muito interessantes. As
figuras seguintes ilustram alguns exemplos:
Figura 2.23: Soma da matriz da figura 18 com k vezes a matriz da figura 19, e
k=1.5.
31
Figura 2.24: Soma da matriz da figura 18 com k vezes a matriz da figura 20, e
k=5.
Figura 2.25: Subtracção da matriz da imagem não regularizada com k vezes a
matriz da figura 19, e k=1.
32
2.2.2 - Transformações que alteram a dimensão da matriz
- Corte
O corte de uma imagem é uma transformação tal que:
T : PN×M → P(x2-x1)×(y2-y1)
onde (x1,y1) e (x2,y2) são as coordenadas que definem qual a parte da
imagem com que se pretende ficar, após o corte.
Veja-se um exemplo onde se utilizou (x1,y1) = (50,85) e (x2,y2) = (290,300) e
se obteve a imagem da figura tal, fazendo uso da função em linguagem
Mathematica seguinte:
corte=Function[{M,x1,x2,y1,y2}, M2=Take[M, {y1,y2},{x1,x2}]];
Figura 2.26: Corte na imagem da figura 2.1.
33
- Zoom in
O “zoom in” pode ser obtido de duas formas:
− através da replicação de pixeis;
− através do cálculo da de uma média dos pixeis vizinhos.
No primeiro caso, se pretendermos, por exemplo, fazer zoom para o dobro
do tamanho, cada pixel corresponderá na nova imagem a 4 pixeis:
Figura 2.27: Cada pixel vai corresponder a 4 pixeis na nova imagem.
Nesse caso, considere-se a seguinte função em Mathematica:
f=Function[l, ex=l; Do[ ex=Insert[ex,ex[[2*n-1]], 2*n], {n,1,Length[ex]}]; ex];
A função f aumenta o tamanho da matriz da imagem para o dobro, repetindo
cada pixel ao longo das linhas e depois ao longo das colunas. O resultado
obtido é o seguinte:
34
Figura 2.28: “Zoom in” de uma imagem para o dobro e para o quádruplo.
Como se pode observar pela figura 2.28, ao fazer a replicação dos pixeis, a
imagem aumentada fica “pixelizada”. Tal problema pode ser contornado,
fazendo uma média com os pixeis adjacentes em vez de repetir valores.
Este processo pode ser feito da seguinte forma: em primeiro lugar, aumenta-
se o tamanho da matriz adicionando zeros ao longo das linhas e ao longo das
colunas. Em seguida, calcula-se uma média entre pixeis adjacentes da mesma
35
linha e depois entre pixeis adjacentes da mesma coluna. Este procedimento é
ilustrado na figura seguinte:
1371
00005.0123
00005.3741
25.05.015.15.0123
24325.3741
Figura 2.29: Exemplo de procedimento para aumentar uma imagem
Este procedimento equivale a calcular a convolução na direcção horizontal e
depois vertical com o filtro 1D:
=
211
21
1DH .
Para obter o filtro 2D basta calcular o produto externo de DH1 com ele
próprio e obtém-se:
=
41
21
41
211
21
41
21
41
2DH
Aplicando esta transformação, obtém-se uma imagem maior e sem se esta se
encontrar “pixelizada”, como se ilustra na figura seguinte.
36
Interpolar linhas
Interpolar colunas
Figura 2.30: Aumento da imagem utilizando regularização, eliminando assim o
problema da “pixelização” da imagem.
37
- Zoom out
A operação de “zoom out” é a operação inversa do “zoom in”, ou seja, por
exemplo no caso de redução do tamanho da imagem para metade, cada 4
pixeis vao corresponder a um só pixel na nova imagem.
Tal como no caso do “zoom in”, existem duas formas de obter esta
transformação: através do corte “grosseiro” de pixeis, em que cada pixel
remanescente não sofre qualquer transformação, ou através do cálculo de
uma média, onde cada pixel remanescente corresponde à média com os seus
pixeis adjacentes.
Figura 2.31: Diminuição da imagem através do corte “grosseiro” de pixeis .
Figura 2.32: Diminuição da imagem, utilizando regularização.
38
Como se pode observar pelas imagens 2.31 e 2.32, a diferença entre as
imagens obtidas pelos dois métodos é praticamente imperceptível ao olho
humano.
39