Você está na página 1de 37

1

INTRODUO A VISO COMPUTACIONAL USANDO MATLAB


Tutorial Nielsen Castelo Damasceno 1 TIPOS DE IMAGENS Imagens de Intensidades: uma Matriz de dados cujos valores representam as intensidades em cada ponto. Se os elementos de intensidade forem da classe uint8 seus valores estaro no intervalo [0, 255]. Se forem da classe uint16 seus valores variaro no intervalo [0, 65535]. Se os elementos forem da classe double, seus valores por conveno estaro no intervalo [0,1]. Imagens Binrias: um arranjo lgico de zeros e uns onde os dados so da classe logical. Imagens Indexadas: Requerem duas Matrizes. Uma matriz (X) contm um valor numrico que um ndice para uma segunda matriz (map) formada pelas quantidades de cores R(Red Vermelho) G(Green Verde) B(Blue Azul) para o pixel correspondente. Imagens RGB: So compostas por trs matrizes separadas para cada cor R, G e B, normalizadas no intervalo [0,1]. 1.1 Convertendo uma Matriz para uma Imagem de Intensidades Sintaxe: I = mat2gray(A,[amin amax]) I = mat2gray(A) Descrio: I = mat2gray(A,[amin amax]) Converte a Matriz A para a Imagem de Intensidades I. A Matriz A deve ser double. A Matriz I conter valores entre 0 (preto) e 1 (branco). Os Parmetros amin e amax so os valores na Matriz A que correspondero a 0 e 1 na Imagem I. I = mat2gray(A) Estabelece os valores de amin e amax como o mnimo e mximo dos valores da Matriz A.

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

Exerccio Converter as Matrizes A, B, C, e D para Imagens de Intensidades e observar os resultados. A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]

B = [ 16 3 2 4 20 30 4 4 5 6 7 8]

C = [ 20,30 40; 50,40,10 80 20 15]

D = [ 1,2,3,4;5 6 7 8 9999 8,8,8,8; 4 5,9 4]

IA = mat2gray(A) IB = mat2gray(B, [2,30]) IC = mat2gray(C, [10,40]) ID = mat2gray(D, [0,10])

1.2 Mostrando uma Imagem de Intensidades. Sintaxe: imshow(I,n) imshow(I,[low high])

Descrio: imshow(I,n) Mostra a Imagem de Intensidades I com n nveis discretos de cinza Se o valor de n for omitido, imshow usa 256 nveis de cinza em sistemas de 24-bits, ou 64 nveis de cinza em outros sistemas.

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

imshow(I,[low high]) Mostra a Imagem I em nvel de cinza, especificando os limites dos valores de branco e preto. O parmetro low (e qualquer valor menor do que ele) corresponde ao preto; o parmetro high (e qualquer valor maior do que ele) mostrado como branco. Valores intermedirios so mostrados em escala de cinza, usando o nmero padro de nveis. Se usado uma matriz vazia entre colchetes([]) para os parmetros [low high], a funo imshow usa [min(I(:)) max(I(:))]; ou seja, o menor valor em I mostrado como preto e o maior valor em I mostrado como branco. Exerccio Mostrar a imagem dada observar os resultados. E = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25] IE = mat2gray(E) imshow(IE) 1.3 Convertendo uma Imagem de Intensidades para uma Imagem Indexada. Sintaxe: [X,map] = gray2ind(I,n) Descrio: gray2ind coloca em escala e arredonda uma Imagem de Intensidades I produzindo uma Imagem Indexada equivalente. [X,map] = gray2ind(I,n) pela Matriz E em escala de cinza e

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

converte a Imagem de Intensidades I para uma Imagem Indexada X, com um mapa de n cores, indexada pelo parmetro map. Se n for omitido, o default 64. O valor de n deve ser um inteiro entre 1 e 65536. 1.4 Convertendo uma Imagem de Intensidades para uma Imagem Binria. Sintaxe: G = im2bw(f,T)

Descrio: Gera uma Imagem Binria atravs de Limiarizao (Thresholding). Os valores sero zero para intensidades menores que T e um para os outros pixels. O valor especificado para T deve estar no intervalo [0,1] independente da classe dos dados de entrada. A Imagem Binria de sada ser da classe logical. (Se T for omitido ser considerado T=0.5)

Ler e mostrar imagens verificando informaes sobre elas. (Obs: Se o arquivo no estiver no diretrio de trabalho preciso informar o caminho, ou salvar a imagem no diretrio de trabalho) f = imread(chestxray_gray.jpg); (Obs: o ponto e vrgula (;) impede que os valores sejam mostrados na Janela de Comando do MatLab) Verificar o nmero de linhas e colunas da imagem: size(f) Atribuir os valores das linhas e colunas s variveis M e N: [M,N] = size(f) Mostrar as informaes da Matriz (Imagem): whos f Mostrar a Imagem: imshow(f) Ler uma segunda imagem de arquivo e mostrar as duas imagens lidas: g = imread(rose_gray.tif); whos g imshow(f), figure, imshow(g)

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

Verificar o valor dos nveis nas coordenadas e a distncia entre dois pixels: pixval (Obs: clicar com o boto direito do mouse sobre um pixel da figura, manter seguro e posicionar sobre outro pixel qualquer. O valor obtido a distncia entre os dois pixels).

Gravando Imagens em Arquivos. Sintaxe: imwrite(f, arquivo.tipo) Descrio: A imagem f salva em disco, no arquivo.tipo. Se a funo no contiver o caminho, o arquivo salvo no diretrio de trabalho.

Uma sintaxe da funo imwrite, aplicvel somente a imagens JPEG, : imwrite(f, arquivo.jpg, quality, q) onde q um inteiro entre 0 e 100. Quanto menor o valor de q maior a degradao devido compresso JPEG. Exerccio Salvar Imagens JPEG em arquivos e calcular a Taxa de Compresso. h = imread('bubbles.jpg'); imshow(h) imfinfo bubbles.jpg

O Nmero de Bytes da imagem original computado multiplicando-se Width x Height x BitDepth e dividindo-se o resultado por 8. A Taxa de Compresso da imagem obtida dividindo-se o Nmero de Bytes da imagem original pelo parmetro FileSize.

a) Salvar a imagem bubbles.jpg com o nome de bubbles5.jpg , com q=5. b) Ler a imagem bubbles5.jpg e gerar a informao sobre ela atravs da funo imfinfo bubbles5.jpg c) Mostrar as duas imagens, calcular a Taxa de Compresso de cada uma delas e concluir sobre o tamanho dos arquivos e sobre a qualidade de cada imagem.

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

Uma Varivel de Estrutura pode ser usada para armazenar as informaes da funo imfinfo e assim calcular a Taxa de Compresso. Cada campo de informao associado Varivel de Estrutura atravs de um ponto (.). Por exemplo, se a Varivel de Estrutura for K, as informaes de altura e largura da imagem sero K.Heigth e K.Width . Assim, a Taxa de Compresso da imagem pode ser calculada por: K = imfinfo(bubbles.jpg); image_bytes = K.Width*K.Height*K.BitDepth/8; compress_ratio = image_bytes/K.FileSize

Uma sintaxe da funo imwrite, aplicvel somente a imagens TIF, : imwrite(f, arquivo.tif, compression, parameter, resolution, [colres rowres]) onde: parameter pode ter um dos seguintes valores: none - indicando no compresso. packbits - indicando compresso do tipo packbits (default para imagens no binrias). ccitt - indicando compresso tipo ccitt (default para imagens binrias).

O array (1x2) [colres rowres] contm dois inteiros que fornecem a resoluo das colunas e das linhas em dpi (dots-per-inch). Os valores defaults so [72 72]. Por exemplo, se as dimenses da imagem so em polegadas, colres o nmero de pixels (ou pontos) por polegadas (dpi) na direo vertical, e rowres a dpi na direo

horizontal. Exerccio Salvar Imagens TIF em arquivos, alterando a resoluo espacial. O arquivo circuit.jpg uma imagem em nvel de cinza de 8 bits, 72 dpi de resoluo espacial, tamanho de 450 x 450 pxels em uma dimenso de 6,25 x 6,25 polegadas. (res = 450/6,25 = 72 dpi)

Ler a imagem e verificar suas caractersticas: f = imread('circuit.jpg'); imfinfo circuit.jpg


Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

Salvar a imagem no formato TIF, sem compresso, reduzindo sua dimenso para 2,5 x 2,5 polegadas e mantendo seu tamanho em 450 x 450 pxels. Logo, a nova resoluo espacial dever ser: res2 = 450/2,5 = 180 dpi Verificar suas caractersticas.

imwrite(f, circuit.tif, compression, none, resolution, [180 180]) imfinfo circuit.tif

Mostrar as duas imagens e responder: a) O que aconteceu com as dimenses das imagens? b) Explicar o que Resoluo Espacial da imagem. c) Qual o tamanho dos dois arquivos em bytes?

1.5 Indexando Imagens

Como imagens so matrizes, os esquemas de indexao de matrizes podem ser usados diretamente nas imagens.

Exerccio Alterar imagens atravs da indexao. O arquivo rose_gray.tif uma imagem em nvel de cinza de 8 bits, classe uint8, tamanho de 263 x 264 pxels. Digitar os comandos e verificar o que cada esquema de indexao faz.

f = imread(rose_gray.tif); imshow(f) whos f fp = f(end:-1:1,:); fl = f(:,end:-1:1); imshow(f), figure, imshow(fp), figure, imshow(fl) fc = f(65:198, 65:198); fs = f(1:2:end, 1:2:end); imshow(f), figure, imshow(fc), figure, imshow(fs)
Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

plot(f(132,:))

2 HISTOGRAMA

Compreender o que so, como funcionam, e se familiarizar com os histogramas so provavelmente os passos mais importantes para trabalhar com imagens de uma cmera digital. Um histograma pode dizer se a imagem foi exposta corretamente, se o tipo de luz era dura ou suave e quais ajustes funcionam melhor em sua cmera. Esse conhecimento no s melhora as suas habilidades no computador, mas como fotgrafo tambm. Cada pixel de uma imagem tem uma cor que foi produzida por uma combinao de cores primrias (vermelho, verde e azul, ou RGB). Cada uma dessas cores pode ter um brilho que varia de 0 a 255 em uma imagem digital com profundidade de bits de 8-bits. Um histograma RGB produzido quando o computador varre a imagem em cada um desses valores de brilho RGB e conta quantos pixels h em cada nvel de 0 a 255. Outros tipos de histogramas existem, mas todos tm mais ou menos a mesma representao da figura 1:

Figura 1 Histograma de uma imagem RGB. 2.1 Tons

A regio onde a maioria dos valores tonais se encontra chamada de "gama tonal". A gama tonal pode variar drasticamente de uma imagem para outra, ento desenvolver uma intuio em relao a como os nmeros se transformam em valores de brilho crtico -- ambos antes e depois da foto ser tirada. No h um "histograma ideal" ao qual as imagens devem seguir; o histograma deve simplesmente seguir a gama tonal que o fotgrafo deseja transmitir.

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

Figura 2 Informaes sobre os tons da imagem.

A figura 2 um exemplo que contm uma gama tonal bem ampla, com marcadores que ilustram onde regies na cena representam os nveis de brilho no histograma. Essa cena costeira contm poucos meios-tons, mas tem grandes regies de sombras e altas-luzes no canto inferior esquerdo e no superior direito, respectivamente. Isso resulta num histograma que tem uma alta contagem de pixels nos extremos esquerdo e direito. A luz normalmente no to extrema quanto no exemplo anterior. Condies de luz normal e bem distribuda, quando combinadas com um sujeito bem exposto, normalmente produzem um histograma cujo pico encontra-se no centro e que gradualmente diminui em direo s regies de alta e baixa luzes aos lados. Com exceo da luz do sol refletida diretamente no topo do prdio e algumas janelas, a cena com o barco ao lado possui luz bem distribuda. A maioria das cmeras no encontrar problemas para reproduzir automaticamente uma imagem que possui histograma similar ao mostrado abaixo.

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

10

Figura 3 Histograma com condies de luz normal.

2.2 Imagens com 'low key' e 'high key'

Apesar da maioria das cmeras, quando no modo automtico, produzirem histogramas com pico no meio-tom, a distribuio dos picos num histograma depende da gama tonal da imagem. Imagens onde a maioria dos tons est na regio das baixas luzes (ou sombras) so chamadas de 'low key' (uma traduo literal seria 'chave baixa', mas o termo normalmente no traduzido), enquanto que imagens com 'high key' (chaves altas) tm a maioria dos tons nos brilhos.

Figura 4 Imagem Low key.

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

11

Figura 5 Imagem High key. Antes de tirar uma foto, til determinar se o sujeito se qualifica como 'low' ou 'high key'. J que as cmeras medem a luz refletida, elas so incapazes de dizer o brilho absoluto dos sujeitos da imagem. Como resultado, muitas cmeras possuem algoritmos avanados para esquivar essa limitao, e estimar quanto brilho a imagem deve ter. Essas estimativas normalmente produzem imagens cujo brilho mdio encontra-se nos meios-tons. Isso , frequentemente, aceitvel, mas cenas com 'low' ou 'high key' pronunciados necessitam de ajustes de exposio manuais do fotgrafo para corrigir o palpite da cmera. Uma boa regra para ter em mente : voc normalmente precisa ajustar a exposio quando quer que o brilho mdio das suas imagens esteja mais escuro ou mais claro que os meios-tons. O seguinte grupo de imagens (Figura 6 e 7) o resultado obtido automaticamente pela cmera para as fotos mostradas anteriormente. Note como a mdia de contagem de pixels trazida para os meios-tons.

Figura 6 Imagem com mdia de contagem de pixel tendendo para meiostons.

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

12

Figura 7 Imagem High key trazida para meios-tons

A maioria das cmeras digitais so melhores reproduzindo cenas com 'low key' pois elas previnem que qualquer regio da imagem tenha brilho suficiente para se tornar branco puro, independente de quo escuro o resto da imagem possa resultar. Cenas com 'high key', por outro lado, normalmente resultam em imagens significativamente sub-expostas. Mas mais fcil lidar com regies sub-expostas do que com as super-expostas (apesar disso comprometer a razo entre o sinal e o rudo). O detalhe no pode ser recuperado caso a regio esteja super-exposta a ponto de ser branco puro. Quando isso ocorre a alta luz dita estar 'estourada' ou 'cortada'.

Figura 8 Figura com alta-luz cortada.

O histograma uma boa ferramenta para saber se o corte ocorreu, j que possvel ver diretamente se o brilho est empurrado para um dos lados do grfico. Um pouco de corte pode ser normal em regies como reflexes especulares na gua ou meta, ou quando o sol ou outras fontes luminosas muito fortes esto enquadradas. Em ltima anlise, a quantidade de corte depende do fotgrafo e o que ele deseja transmitir.

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

13

2.3 Contraste

Um histograma tambm pode descrever quanto contraste h numa imagem. Contraste uma medida da diferena de brilho entre as reas claras e escuras de uma cena. Histogramas largos so tpicos de cenas com bastante contraste, enquanto histogramas estreitos so de imagens com menos contraste e que podem aparentar achatadas ou sem graa. Isso pode ser causado por uma combinao de fatores de luz e sujeito. Fotos tiradas em condio de neblina ou fumaa tero baixo contraste; fotos tiradas sob sol forte, por outro lado, tero contraste muito mais alto.

Figura 9 Imagens com alto contraste e baixo contraste.

O contraste pode ter um impacto visual muito grande ao enfatizar texturas, como mostrado na imagem acima. O alto contraste da gua tem sombras mais profundas e brilhos mais pronunciados, criando texturas que saltam aos olhos de quem as observa. O contraste tambm pode variar de acordo com a regio de uma mesma imagem se houver diferentes condies de luz e sujeito nela. Podemos dividir a imagem do barco mostrada anteriormente em trs regies -- cada uma com um histograma diferente.

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

14

Figura 10 Imagens com diferentes contrastes. A regio no topo da figura 10 contm mais contraste que as outras trs pois a imagem criada a partir de luz que reflete diretamente dos objetos. Isso produz sombras mais profundas logo abaixo do barco e brilhos mais fortes nas reas acima e expostas. As regies do meio e de baixo so inteiramente produzidas por luz difusa, luz refletida da superfcie da gua e, por isso, tm menos contraste; como se a foto fosse tirada sob neblina. A regio de baixo tem mais contraste do que a do meio -- apesar de apresentar um cu com um s tom de azul -- isso porque ela contm uma combinao de sombra e luz intensa do sol. As condies de luz na parte de baixo criam brilhos mais pronunciados, mas mesmo assim ela no apresenta as sombras profundas da regio do topo. A soma dos histogramas das trs regies produz o histograma geral mostrado anteriormente.

Exerccio Ler a imagem mammogram.bmp e gerar seu histograma. f = imread('mammogram.bmp'); imfinfo mammogram.bmp imshow(f) imhist(f)

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

15

3 TRANSFORMAO DE INTENSIDADES

As tcnicas de processamento no domnio espacial operam diretamente nos pixels da imagem. A expresso geral para a Funo de Transformao nos nveis de cinza pode ser dada por:

g ( x, y ) = T [ f ( x, y )]
onde f ( x, y ) a imagem de entrada e g(x,y) a imagem de sada ou imagem processada. T um operador em f. A funo do MatLab que realiza transformaes de intensidade nos nveis de cinza de uma imagem a imadjust que tem a seguinte sintaxe: g = imadjust(f, [low_in high_in], [low_out high_out], gamma)

Exerccio Mostrar graficamente a Funo de Transformao de Intensidades T[f(x,y)] e a imagem gerada em cada um dos exemplos. a) g1 = imadjust(f, [0 1], [1 0]) b) g2 = imadjust(f, [0.5 0.75], [0 1]) c) g3 = imadjust(f, [ ], [ ], 2)

4 EQUALIZAO DO HISTOGRAMA

A equalizao de histogramas no MatLab implementada atravs da funo:

g = histeq( f , nlev)
onde f a imagem de entrada e nlev o nmero de nveis de intensidades especificados para a imagem de sada. Exerccio Equalizar a imagem polem.bmp g = imread('polem.bmp'); figure, imshow(g) figure, imhist(g) ylim('auto') geq = histeq(g,256);

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

16

figure, imshow(geq) figure, imhist(geq) ylim('auto')

A Funo de Transformao da Equalizao de Histograma a Soma Cumulativa dos valores do histograma normalizado. Esta Funo de Transformao transforma uma estreita faixa de nveis de intensidade de entrada em uma escala completa de nveis de intensidade de sada.

Executar e explicar o cdigo de MatLab abaixo tanto relativo ao resultado obtido como a funo de cada linha de comando. g = imread('polem.bmp'); figure, imshow(g) figure,imhist(g) ylim('auto') hnorm = imhist(g)./numel(g); cdf = cumsum(hnorm); x = linspace(0, 1, 256); figure,plot(x,cdf) axis([0 1 0 1]) set(gca, 'xtick', 0:.2:1) set(gca, 'ytick', 0:.2:1) xlabel('Valores de Intensidade de Entrada', 'fontsize', 9) ylabel('Valores de Intensidade de Sada', 'fontsize', 9) text(0.18, 0.5, 'Funo de Transfomao', 'fontsize', 9)

5 SUBTRAO DE IMAGENS Subtrair a imagem do fundo g1 = imread('Image2.bmp') g2 = imread('Image3.bmp') g3 = imabsdiff(g2,g1); g4 = imcomplement(g3); figure('Name', 'Imagem Original'),imshow(g1) figure('Name', 'Histograma da Imagem Original'), imhist(g1)
Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

17

figure('Name','Imagem do Fundo'), imshow(g2) figure('Name','Histograma da Imagem do Fundo'), imhist(g2) figure('Name', 'Imagem Diferena'), imshow(g3) figure('Name', 'Histograma da Imagem Diferena'), imhist(g3) figure('Name','Imagem resultado da subtrao complementada'), imshow(g4) figure('Name','Histograma da Imagem complementada'), imhist(g4)

6 FILTRAGEM ESPACIAL: FILTRO PASSA BAIXA E PASSA ALTA

O Toolbox de Processamento de Imagens do MATLAB implementa a Filtragem Espacial Linear atravs da funo imfilter que possui a seguinte sintaxe: g = imfilter(f,w, filtering_mode, boundary_options, size_options)

onde f a imagem de entrada, w a mscara do filtro e g a imagem resultante. Os outros parmetros podem ser observados utilizando o help do Matlab.

O filtro da Mediana pode ser implementado atravs da funo medfilt2 cuja sintaxe : g = medfilt2(f, [m n], padopt) Onde [m n] define a vizinhana para a Mediana e padopt a opo de borda da imagem (padopt = zeros - default, symmetric a imagem considerada simtrica em suas bordas, indexed a borad considerada 1 se f for da classe doubl e 0 caso contrrio). Exerccio Suavizao Lena_ruido.bmp. a) Filtr-la atravs da Mdia de Vizinhana 5x5, 7x7, 9x9, 25x25, 31x31 b) Filtr-la atravs da Mediana 5 x 5, 7x7 c) Filtr-la atravs Mdia dos k-vizinhos de 25 (fazer k= 9,15,20) Concluir a respeito das 3 metodologias. Filtragem espacial passa baixa. Para a imagem

O Toolbox de Processamento de Imagens do MATLAB implementa tambm filtros 2-D pr-definidos atravs da funo fspecial que gera uma mscara de filtro w atravs da seguinte sintaxe:
Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

18

w = fspecial(type, parameters) Onde type especifica o tipo do filtro e parameters so definidos pelo filtro especificado. Exerccio Laplaciano Filtro Passa Alta (Image Enhancement). Para a imagem da Moon.tif, aplicar o filtro Laplaciano e um filtro passa alta. f = imread('Moon.tif'); w4 = fspecial('laplacian',0); w8 = [1 1 1; 1 -8 1; 1 1 1]; f = im2double(f); g4 = f - imfilter(f, w4, 'replicate'); g8 = f - imfilter(f, w8, 'replicate'); imshow(f) figure, imshow(g4) figure, imshow(g8)

7 MDIA DE MLTIPLAS IMAGENS

Uma imagem pode ser corrompida com rudo. A funo do MATLAB que contamina uma imagem com rudo a imnoise que tem a seguinte sintaxe: fn = imnoise(f, type, parameters) Onde f a imagem original e type o tipo de rudo. Exerccio Mdia de Mltiplas Imagens. A partir da imagem original da ferramentas.bmp, contamin-la com rudo salt & pepper com 60% de probabilidade de ocorrncia e fazer a mdia das imagens ruidosas. k = imread('ferramentas.bmp'); f = im2double(k); f1 = imnoise(f,'salt & pepper', 0.6); f2 = imnoise(f,'salt & pepper', 0.6); f3 = imnoise(f,'salt & pepper', 0.6); f4 = imnoise(f,'salt & pepper', 0.6); f5 = imnoise(f,'salt & pepper', 0.6); f6 = imnoise(f,'salt & pepper', 0.6);
Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

19

f7 = imnoise(f,'salt & pepper', 0.6); f8 = imnoise(f,'salt & pepper', 0.6); f9 = imnoise(f,'salt & pepper', 0.6); f10 = imnoise(f,'salt & pepper', 0.6); fm = (f1 + f2 + f3 + f4 + f5 + f6 + f7 + f8 + f9 + f10)/10; subplot(2,3,1);imshow(f) subplot(2,3,2);imshow(f1) subplot(2,3,3);imshow(f2) subplot(2,3,4);imshow(f3) subplot(2,3,5);imshow(f4) subplot(2,3,6);imshow(f5) figure subplot(2,3,1);imshow(f6) subplot(2,3,2);imshow(f7) subplot(2,3,3);imshow(f8) subplot(2,3,4);imshow(f9) subplot(2,3,5);imshow(f10) subplot(2,3,6);imshow(fm) Imagens RGB Decompor a imagem Flor.bmp em suas trs componentes RGB. f = imread('Flor.bmp'); fR = f(:, :, 1); fG = f(:, :, 2); fB = f(:, :, 3); subplot(2,3,1);imshow(f) subplot(2,3,2);imshow(fR) subplot(2,3,3);imshow(fG) subplot(2,3,4);imshow(fB)

Gerar a imagem RGB a partir de suas trs componentes. g = cat(3, fR, fG, fB); subplot(2,3,1);imshow(fR) subplot(2,3,2);imshow(fG) subplot(2,3,3);imshow(fB)
Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

20

subplot(2,3,4);imshow(g)

Imagens Indexadas Uma Imagem Indexada no MATLAB tem dois componentes: a)Uma Matriz de Dados Inteiros (X); b)Uma Matriz de cor (map). A Matriz map um arranjo de m x 3 elementos de classe double contendo valores em ponto-flutuante no intervalo [0,1]. O comprimento m do map igual ao nmero de cores definido. Cada linha da Matriz map especifica o valor de R,G,B de uma cor na Matriz X. Ou seja, um Pixel de cor em X um ponteiro para sua cor RGB em map.

Exerccio Converter uma imagem RGB em uma imagem Indexada. RGB = imread('peppers.png'); [X,map] = rgb2ind(RGB,256); figure imshow(X,map)

Para alterar o nmero de cores de uma imagem indexada pode-se usar a funo imapprox que tem a seguinte sintaxe: [Y, newmap] = imapprox(X, map, n) onde n o nmero de cores da nova imagem.

8 CONVERSO DE RGB PARA OUTROS ESPAOS DE CORES

RGB para o NTSC: A funo rgb2ntsc realiza esta converso e a funo ntsc2rgb faz a re-converso. Exerccio Converter a imagem RGB em NTSC e gerar separadamente as componentes de Luminncia, Matiz e Saturao. YIQ = rgb2ntsc(RGB); subplot(2,2,1);imshow(YIQ) subplot(2,2,2);imshow(YIQ(:,:,1))
Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

21

subplot(2,2,3);imshow(YIQ(:,:,2)) subplot(2,2,4);imshow(YIQ(:,:,3))

RGB para YCbCr: A funo rgb2ycbcr realiza esta converso e a funo ycbcr2rgb faz a re-converso. RGB para HSV: A funo rgb2hsv realiza esta converso e a funo hsv2rgb faz a re-converso. RGB para CMY: A funo imcomplement realiza a converso entre os dois espaos de cores. RGB para HSI: O Matlab no possui esta funo implementada em seu Toolbox. Para fazer esta converso copiar o arquivo rgb2hsi.p e hsi2rgb.p para o diretrio work .

9 FILTRAGEM ESPACIAL DE IMAGENS COLORIDAS Para aplicar um filtro em uma imagem RGB deve-se: 1) Extrair as trs componentes. R = RGB(:,:,1); G = RGB(:,:,2); B = RGB(:,:,3) 2) Filtrar cada componente individualmente RF = imfilter(R,w); GF = imfilter(G,w); BF = imfilter(B,w); 3) Reconstruir a imagem filtrada em RGB RGBF = cat(3,RF,GF,BF) Ou pode-se filtrar diretamente a imagem RGB como se esta fosse em escala de cinza. RGBF = imfilter(RGB,w)

10 TRABALHANDO DIRETAMENTE NO ESPAO VETORIAL RGB

Deteco de bordas em Imagens RGB. Copiar o arquivo colorgrad.p para o diretrio work. A funo colorgrad implementa o gradiente em imagens RGB com a seguinte sintaxe: [VG, A, PPG] = colorgrad(f, T) onde: f a Imagem RGB T um Threshold opcional no intervalo [0 1] o default zero. VG o Vetor Gradiente RGB (Magnitude) A o ngulo do vetor gradiente em radianos PPG o gradiente formado atravs da deteco de bordas nas componentes individuais. O detector utilizado o de Sobel.
Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

22

11 MORFOLOGIA MATEMTICA (Operaes Morfolgicas em Imagens Binrias) 11.1 Dilatao e Eroso

A funo do MatLab que realiza a Dilatao de uma imagem tem a seguinte sintaxe: A2 = imdilate(A,B) Onde A e A2 so imagens Binrias e B o elemento estruturante formado por uma matriz de zeros e uns.

Exerccio Dilatar estruturante:


0 1 0 B = 1 1 1 0 1 0

imagem

broken_text.tif

usando

seguinte

elemento

A = imread('broken_text.tif'); B = [0 1 0; 1 1 1; 0 1 0]; A2 = imdilate(A,B); subplot(1,2,1);imshow(A) subplot(1,2,2);imshow(A2)

A Eroso realizada pela funo imerode cuja sintaxe : IM2 = imerode(IM, SE) . Onde SE o elemento estruturante retornado pela funo strel, ou formado por uma matriz de zeros e uns. Exerccio Erodir a imagem da Figura circles.png usando um elemento estruturante em forma de disco de raio 11: Imagem_Original = imread('circles.png'); se = strel('disk',11); Imagem_Erodida = imerode(Imagem_Original,se); imview(Imagem_Original), imview(Imagem_Erodida)

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

23

11.2 ABERTURA E FECHAMENTO As operaes morfolgicas de Abertura e Fechamento so implementadas pelo MatLab atravs das funes imopen e imclose cujas sintaxes so: O =

imopen(A,B), C = imclose(A,B). Onde A uma imagem binria e B o elemento estruturante formado por uma matriz de zeros e uns ou gerado atravs da funo strel.

11.3 OPERAES MORFOLGICAS EM IMAGENS EM ESCALA DE CINZA As operaes morfolgicas em escala de cinza podem ser realizadas com um Elemento Estruturante flat, gerado para a funo strel, ou pode ser no-flat. A sintaxe para gerar um elemento no-flat em forma de bola : SE = strel('ball',R,H,N) Que cria um elemento estruturante elipsoide no plano X-Y com raio R e altura H. N um valor que gera a aproximao para o elemento; o default N=8. Outra forma de gerar um elemento estruturante no-flat gera-lo atravs da funo: SE = strel(NHOOD,HEIGHT) Onde NHOOD uma vizinhana binria de zeros e uns e HEIGHT uma matriz da mesma dimenso de NHOOD com os valores associados a cada valor no zero de NHOOD.

12 SEGMENTAO

O processo de segmentao de uma imagem digital consiste em subdividir uma dada imagem em regies ou objetos com base em caractersticas destas regies. Estas regies so compostas por um conjunto de pixels com propriedades semelhantes. O nvel de subdiviso determinado pela aplicao especifica.

12.1 Deteco de pontos isolados O prximo experimento apresenta 3 pontos brancos isolados na imagem points.tif quase imperceptveis que podem ser detectados com um filtro do tipo:
1 1 1 w = 1 8 1 1 1 1

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

24

Exerccio Detectar os pontos isolados da Imagem points.tif. f = imread('point.tif'); fg = rgb2gray(f) w = [-1 -1 -1; -1 8 -1; -1 -1 -1]; g = imfilter(fg,w); BW = im2bw(g); imview(fg) imview(BW)

12.2 DETECO DE LINHAS

Linhas Verticais, Horizontais ou em 45 o podem ser detectadas atravs da convoluo da imagem com templates do tipo:

Exerccio Detectar linhas em 45 da Imagem 'wirebond_mask.tif'.

f1 = imread('wirebond_mask.tif'); w = [ 2 -1 -1; -1 2 -1; -1 -1 2]; g1 = imfilter(double(f1),w); T = max(g1(:)); g1 = g1>=T-40 imview(f1, []) imview(g1)

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

25

12.3 DETECO DE BORDAS O Toolbox de Processamento de Imagens do MatLab possui uma funo que realiza a deteco de bordas. A sintaxe desta funo : [ g, t ] = edge(f, method, parameters) Onde f a Imagem de entrada, g a Imagem de sada (arranjo lgico com 1 nas posies de bordas detectadas e 0 nas demais) e method corresponde ao tipo de detector utilizado. O valor de t opcional e corresponde ao Threshold que a funo utilizar para definir uma borda.

A sintaxe para o Detector de Sobel usando a funo edge : [ g, t ] = edge(f, sobel, T, dir)

onde T um Threshold especificado e dir d a direo preferencial das bordas detectadas (vertical, horizontal, ou both (default)). Se T especificado ento t = T. Se T no for especificado, a funo edge usa um Threshold automtico e retorna seu valor em t. Exerccio Aplicar o Detector de Bordas de Sobel na imagem e obter o valor de t.

f2 = imread('igreja.tif'); [g2,t]=edge(f2,'sobel'); imview(f2), imview(g2)

As sintaxes da funo edge, para os Detectores de Roberts e de Prewitt , so idnticas sintaxe do Detector de Sobel.

Repetir o exerccio anterior e utilizar os detectores de Roberts e de Prewitt. Comparar os resultados com o Detector de Sobel.

O detector de bordas LoG (Laplaciano da Gaussiana) tem a seguinte sintaxe usando a funo edge: [ g, t ] = edge(f, log, T, sigma),

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

26

onde sigma o desvio padro relacionado suavizao realizada pela Gaussiana. O valor default para sigma 2. T um Threshold especificado. Fazer T = 0 produz bordas em contornos fechados, caracterstica da metodologia LoG.

A sintaxe para o Detector de Bordas de Canny atravs da funo edge, : [ g, t ] = edge(f, canny, T, sigma), onde T um vetor T = [T1, T2] contendo os dois valores de Threshold e sigma o desvio padro do filtro de suavizao. O default para sigma 1.

12.4 TRANSFORMADA DE HOUGH (HT) No existe no Toolbox de Processamento de Imagens do MatLab uma funo que implemente diretamente a HT. O livro Gonzalez, R.C.; Woods,R.E.; Eddins,S.L. Digital Image Processing Using MATLAB publicou funes para realizar a HT para retas, facilitando inclusive a localizao dos segmentos de retas nas imagens gradiente. As funes hough.p, houghpeaks.p, houghpixels.p e

houghlines.p devem ser copiadas para seu diretrio de trabalho. A funo hough tem a seguinte sintaxe: [H, theta, rho] = hough(f, dtheta, drho) Computa a HT da imagem f gerando o Arranjo Acumulador H com espaamento entre as clulas dado por dtheta e drho. Se omitidos dtheta = 1 e drho = 1. Exerccio Calcular a HT na imagem obtendo as senides geradas no plano de parmetros. f2 = imread('pontos.tif'); figure, imshow(f2) [H, theta, rho] = hough(f2); imshow(theta, rho, H, 'notruesize') axis on, axis normal xlabel('\theta'), ylabel('\rho')

A funo que detecta os picos no Arranjo Acumulador gerado pela HT a houghpeaks que tem a seguinte sintaxe: [r, c, hnew] = houghpeaks( H, numpeaks, threshold, nhood),
Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

27

que detecta picos na matriz H (Arranjo Acumulador) . numpeaks especifica o mximo nmero de localizao de picos ( o default 1 ). Valores de H abaixo do threshold no sero considerados picos. nhood um vetor de 2 elementos especificando o tamanho da vizinhana de supresso, ou seja, o tamanho da vizinhana do pico encontrado que ser zerada aps a localizao de cada pico. hnew o Arranjo Acumulador com as vizinhanas de pico suprimidas. r e c so as coordenadas de linha(r) e coluna(c) dos picos identificados. Exerccio Marcar os picos do Arranjo Acumulador da HT realizada na imagem. f2 = imread('pontos.tif'); figure, imshow(f2) [H, theta, rho] = hough(f2); imshow(theta, rho, H, 'notruesize') axis on, axis normal xlabel('\theta'), ylabel('\rho') [r, c] = houghpeaks(H,6,3); hold on plot(theta(c), rho(r), 'linestyle','none','marker','s','color','b')

Como a HT determina as retas que passam pelos pontos determinados no Arranjo Acumulador, duas funes so utilizadas para calcular os segmentos de retas entre os pontos. Estas funes so a hougpixels e a houghlines. A sintaxe da funo houghlines (que usa a houghpixels) : lines = houghlines(f, theta, rho, rr, cc, fillgap, minlength) onde f a imagem gradiente original, theta e rho so os vetores retornados pela funo hough. rr e cc so vetores que especificam as linhas e colunas do Arranjo Acumulador para se procurar por segmentos de linhas. fillgap o intervalo entre as clulas do Arranjo Acumulador associados com a mesma reta e sero fundidas em um mesmo segmento de reta (default 20). Segmentos de linhas fundidos menores do que minlength (default = 40 pixels) so descartados. lines um arranjo de estrutura cujo comprimento igual ao nmero de segmentos fundidos encontrados. Cada elemento da estrutura tem os seguintes campos: point1 - Ponto-final do segmento de linha; vetor de dois elementos point2 - Ponto-final do segmento de linha; vetor de dois elementos
Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

28

length - Distncia entre o point1 e o point2 theta - ngulo em graus da clula da HT rho - Posio de rho na clula da HT Exerccio Detectar os segmentos de retas mais significativos na imagem atravs da Transformada de Hough (HT) implementadas pelas funes fornecidas.

f2 = imread('madeira.tif'); g2=edge(f2,'canny',[0.06 0.5], 1.5); imview(g2) [H, theta, rho] = hough(g2); imshow(theta, rho, H, 'notruesize') axis on, axis normal xlabel('\theta'), ylabel('\rho') [r, c] = houghpeaks(H,10,10); hold on plot(theta(c), rho(r), 'linestyle','none','marker','s','color','b') lines = houghlines(g2, theta, rho, r, c); figure,imshow(f2) hold on for k = 1:length(lines) xy = [lines(k).point1; lines(k).point2]; plot(xy(:,2), xy(:,1), 'LineWidth', 2,'color', 'b'); end

12.5 THRESHOLDING (LIMIARIZAO) O MatLab possui uma funo que calcula o Threshold Automtico de uma imagem atravs do mtodo de Otsu. Esta funo tem a seguinte sintaxe: T = graythresh(I) Onde I a imagem de classe uint8, uint16, ou double e T o nvel de limiar calculado entre [0, 1].

Exercicio

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

29

Implementar o Algoritmo de Threshold Automtico (Gonzalez;Woods,2002) dado em classe, para a imagem:

f = imread('texto.bmp'); hf = imhist(f); figure, imshow(f), figure, plot(hf) T1 = 0.5*(double(min(f(:)))+double(max(f(:)))); done = false; while ~done g = f >= T1; T1next = 0.5*(mean(f(g)) + mean(f(~g))); done = abs(T1 - T1next) < 0.5; T1 = T1next; end T2 = T1/255 s1 = im2bw(f,T2); figure, imshow(s1)

12.6 CRESCIMENTO DE REGIO

O Toolbox de Processamento de Imagens do MatLab no possui uma funo para Crescimento de Regio. O livro (Gonzalez;Woods;Eddins,2004) tem uma funo para realizar o Crescimento de Regio ( regiongrow.p) cuja sintaxe : [g, NR, SI, TI] = regiongrow(f, S, T), onde f a Imagem de entrada, S o conjunto de Sementes e T o Threshold a ser aplicado na Imagem. Se S for uma Matriz, ela deve conter 1 nas coordenadas das Sementes e 0 no resto.Se S for um escalar ele define um valor de intensidade para as Sementes na imagem f. Se T for uma Matriz, ele deve conter o valor de Threshold em cada coordenada de f. Se T for um escalar ele define um Threshold Global para a imagem. O valor do Threshold T serve para verificar a diferena de intensidades entre o pixel 8-conectado e a Semente.

12.7 TRANSFORMADA WATERSHED

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

30

Implementar o programa abaixo e explicar em cada linha o que foi realizado e o porque, para gerar a Transformada Watershed que segmenta a imagem. f = imread('objetos1.bmp'); g = im2bw(f, graythresh(f)); gc = ~g D = bwdist(gc); L = watershed(-D); w = L == 0; g2 = g | w; subplot(2,2,1);imshow(f) subplot(2,2,2);imshow(g) subplot(2,2,3);imshow(gc) subplot(2,2,4);imshow(w) imview(g2)

13 REPRESENTAO E DESCRIO DE ESTRUTURAS BI-DIMENSIONAIS

13.1 Arranjo de Clulas e Estruturas no MatLab Um Arranjo de Clulas providenciam um meio para combinar um conjunto misto de objetos (ex: nmeros, caracteres, matrizes, outros arranjos de clulas) em um mesmo nome de varivel. Estas entidades dissimilares podem ser organizadas em uma nica varivel da seguinte maneira: C = { f, b, char_array} Onde as chaves { } designam o contedo do Arranjo de Clulas, f pode ser uma imagem de 512 x 512 pxels da classe uint8; b pode ser uma seqncia de

coordenadas na forma de um arranjo de 188 x 2 e char_array um outro Arranjo de Clulas com dois nomes, por exemplo, char_array = { area, centroide}.

Para enderear o contedo de um elemento do arranjo deve-se incluir a posio do elemento entre chaves. Exemplo: C{3} = area centroide. A funo celldisp do MatLab mostra os elementos do Arranjo de Clulas:

>> celldisp(C{3}) ans{1} =


Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

31

area ans{2} = centroide

Para trabalhar com um contedo especfico do Arranjo de Clulas, deve-se extrair a varivel do arranjo: f = C{1} extrai a imagem f (512x512) do arranjo. Exerccio Escrever a funo image_stats abaixo e salvar como arquivo m no diretrio de trabalho:

function G = image_stats(f) G{1} = size(f); G{2} = mean2(f); G{3} = mean(f,2); G{4} = mean(f,1); end

Obter os elementos independentes do Arranjo de Clulas image_stats aplicado sobre a imagem. f = imread('listras.bmp'); imview(f) G = image_stats(f); G{1} G{2} G{3} G{4}

13.2 ESTRUTURAS NO MATLAB (NO CONFUNDIR COM ESTRUTURAS BIDIMENSIONAIS)

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

32

As Estruturas so semelhantes aos Arranjos de Clulas com a diferena que ao invs de serem endereadas por nmeros, as Estruturas so endereadas por campos. Escrever a funo image_stats2 abaixo e salvar como arquivo m no diretrio de trabalho: function s = image_stats2(f) s.dim = size(f); s.AI = mean2(f); s.AIrows = mean(f,2); s.AIcols = mean(f,1); end Exerccio Obter os elementos independentes do Arranjo de Clulas image_stats aplicado sobre a imagem.

f = imread('listras.bmp'); imview(f) s = image_stats2(f); s.dim s.AI s.AIrows s.AIcols

14 MEDIDA DE DISTNCIA

A Distncia Euclidiana entre dois vetores n-dimensionais x e y definida como o escalar:

d e ( x, y ) = x y = y x = ( x1 y1 ) + L + ( x n y n )
2

2 1/ 2

A expresso anterior a Norma da diferena entre os vetores e pode ser computada atravs da funo do MatLab: d = norm(x y)

Exerccio

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

33

Considerar o Vetor de Caractersticas y = [53 23 44 55 02 13] padro gerado atravs do processamento de uma imagem e o Vetor de Caractersticas x = [53 23 43 55 02 13] padro este armazenado. Calcular a Distncia Euclidiana entre os dois padres.

Quando

existem

diversos

padres

armazenados

(por

exemplo,

representativos de uma base de imagens) estes podem ser descritos atravs de uma Matriz X ( pxn) , onde p o nmero de padres e n o nmero de caracterstica de cada padro.

Exemplo: A Matriz abaixo apresenta um conjunto de 10 Vetores de Caractersticas (Padres) referentes a 10 imagens de uma base. Cada vetor possui 6 caractersticas (ou descritores) extrados de cada uma das imagens.

X = [41 05 04 52 30 33; ... 09 39 37 49 43 41; ... 36 30 10 11 29 47; ... 06 59 42 27 01 05; ... 01 19 46 06 16 02; ... 19 40 07 13 22 47; ... 56 38 21 20 03 05; ... 53 17 38 04 47 37; ... 55 43 56 54 08 60; ... 25 04 18 57 21 38];

Considerando que o Vetor de Caractersticas y deve ser verificado se existe na base ou se existe um Vetor na Base que mais se aproxima dele, pode-se calcular a Distncia Euclidiana entre o Vetor y e cada linha da Matriz X (Base X), da seguinte maneira: d = sqrt(sum(abs(X repmat(y, p, 1).^2,2)).

Exerccio

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

34

O arquivo dados_X.dat contm os dados de todos os vetores de caractersticas no formato de um vetor coluna de 60 elementos. Montar a Matriz (X) de vetores de caractersticas (Base X) no formato (10 x 6) (10 vetores x 6 caractersticas).

load dados_X.dat nx = numel(dados_X)/6; X1 = reshape(dados_X,6,nx); X = X1.';

Usando a funo dada, calcular a Distncia Euclidiana entre o Vetor de Caractersticas y1 = [09 43 37 49 41 39] e os padres armazenados na base X. Fazer o mesmo para o Vetor de Caractersticas y2 = [53 17 38 04 47 37]. Aplicar o mesmo clculo para o padro y3 = [25 05 19 57 20 38]. Verificar, em cada caso, se o padro pode ser dito como pertencente Base X ou no.

Descrever, utilizando o Help do MatLab, a operao completa realizada pelo clculo realizado no exerccio anterior.

Outro conjunto de 10 Vetores de Caractersticas formam a Base Y (10 x 6) que est armazenada no arquivo dados_Y.dat como um Vetor Coluna de (1 x 60).

Y=[14 21 26 29 36 48; ... 19 24 43 34 39 05; ... 58 48 52 47 12 06; ... 32 09 04 52 29 03; ... 29 35 19 57 42 55; ... 01 07 56 11 37 38; ... 20 22 11 19 48 42; ... 14 24 60 08 18 48; ... 10 57 28 03 05 21; ... 13 59 37 56 03 47];

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

35

Exerccio Carregar os arquivos referentes a cada uma das bases e gerar as Bases X e Y de populao de Vetores de Caractersticas no formato (10 x 6).

load dados_X.dat nx = numel(dados_X)/6; X1 = reshape(dados_X,nx,6); X = X1.';

load dados_Y.dat ny = numel(dados_Y)/6; Y1 = reshape(dados_Y,ny,6); Y = Y1.';

Para calcular a Distncia Euclidiana entre as duas populaes de Vetores (X de dimenso p x n) e (Y de dimenso q x n) pode-se utilizar a funo proposta em (Gonzalez;Woods:Eddins,2004) com a seguinte sintaxe: D = sqrt(sum(abs(repmat(permute(X, [1 3 2]),[1 q 1]) - repmat(permute(Y, [3 1 2]),[p 1 1])).^2,3));

Onde D(i,j) a Distncia Euclidiana entre a i-sima e a j-sima linhas da populao de vetores, ou seja, a Distncia Euclidiana entre X(i,:) e Y(j,:).

Exemplo: Considerando a populao de Vetores de Caractersticas a formada pela Base X, calcular a Matriz de Distncias Euclidianas entre cada Vetor e outro da Base. A Matriz de Distncias Euclidiana ter a diagonal formada por zeros equivalendo a distncia entre o Vetor e ele mesmo. A funo do MatLab que realiza esta operao tem a seguinte sintaxe:

DE = pdist(X,'euclidean');

Que calcula a Distncia Euclidiana entre cada linha da Matriz X e as outras, colocando o resultado em um Vetor de dimenso (1 x (n/2.(n-1)). Para gerar uma Matriz de Distncias Euclidianas deve-se utilizar a funo:
Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

36

MDE = squareform(DE); Que monta a Matriz de Distncias, matriz quadrada onde o MDE(i,j) significa a Distncia Euclidiana entre o Vetor i e o Vetor j da Base X.

A Distncia de Mahalanobis entre dois vetores n-dimensionais x e y definida como o escalar:


d m ( x, y ) = ( y x ) C x1 ( y x )
T

Onde C x a Matriz de Covarincia da populao de Vetores da Base X. A funo do MatLab que realiza esta operao tem a seguinte sintaxe: DM = pdist(X,mahalanobis); Que calcula a Distncia de Mahalanobis entre cada linha da Matriz X e as outras, colocando o resultado em um Vetor de dimenso (1 x (n/2.(n-1)). Para gerar uma Matriz de Distncias de Mahalanobis deve-se utilizar a funo: MDM = squareform(DM); Que monta a Matriz de Distncias, matriz quadrada onde o MDM(i,j) significa a Distncia de Mahalanobis entre o Vetor i e o Vetor j da Base X. A Distncia de Mahalanobis calculada entre os Vetores da base Y e o centride que representa os vetores da Base X (mdia de X ou prottipo de X) pode ser calculada como:
d m ( x, m x ) = ( y m x ) T C x1 ( y m x )

Onde mx ao centroide da populao de vetores da Base X. A funo do MatLab que realiza esta operao tem a seguinte sintaxe: DM = mahal(Y,X)

15 ANLISE DE AGRUPAMENTOS (CLUSTER ANALYSIS)

No MatLab a funo Z = linkage(Y,'method') computa uma rvore de agrupamento hierrquico usando o algoritmo especificado na varivel 'method'. O method pode ser:

'single'

Ligao Simples (default)


Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

37

'complete' 'average' 'weighted' 'centroid' 'median' 'ward'

Ligao Completa Ligao Mdia Ligao Mdia Ponderada Ligao Centride (Y deve conter Distncias Euclidianas) Ligao Centro de Massa Ponderado Ligao Distncia Quadrada Interna (algoritmo de mnima varincia)

Outra funo do MatLab, H = dendrogram(Z) plota um dendrograma do cluster hierrquico representado por Z, onde Z uma matriz (m-1) x 3 , gerada atravs de uma Funo de Ligao e m o nmero de objetos no conjunto de dados original. A sada H, um vetor que produz as linhas do dendrograma.

Procedimento Bsico para a Anlise Hierrquica atravs do MatLab: 1) Encontrar a similaridade ou dissimilaridade entre cada par de objetos no conjunto de dados. (funo pdist) 2) Agrupar os objetos em uma rvore Hierrquica de Grupos . (funo linkage) 3) Determinar onde dividir a rvore Hierrquica em grupos. (funo cluster)

Prof. M.Sc. Nielsen Castelo Damasceno www.ncdd.com.br E-mail: nielsen.tekla@gmail.com

Você também pode gostar