INTRODUÇÃO A MÉTODOS NUMÉRICOS PARA …calves/AN/lmac/Projecto/... · utilizadas técnicas...

45
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écnico Universidade Técnica de Lisboa 2007 Orientador: Carlos J. S. Alves

Transcript of INTRODUÇÃO A MÉTODOS NUMÉRICOS PARA …calves/AN/lmac/Projecto/... · utilizadas técnicas...

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

2

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

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

Figura 2.15: Combinação convexa de duas imagens

24

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

40

BIBLIOGRAFIA

Farid, Hany, Fundamentals of Image Processing. http://www.cs.dartmouth.edu/farid/tutorials/fip.pdf

W. Smith, Steven, The Scientist and Engineer's Guide to Digital Signal Processing, California Technical Publishing, 1997.

41