Você está na página 1de 85

Prof Kesede R Julio

Prof Kesede R Julio


kesedejulio@gmail.com

A C P

postila de

omputao e

rfica

rocessamento de magem

verso 2011

Computao Grfica e Processamento de Imagem

Prof Kesede R Julio

ndice

Captulo 1.Introduo..............................................................................................................3 1.1.Breve Histrico 3 1.2.Contextualizao 7 1.3Aplicaes 7 1.4Dispositivos Grficos 8 1.5Resoluo Grfica 9 1.6Sistemas de Coordenadas 10 1.1Exerccios 11 Captulo 2.Converso Matricial de Curvas...........................................................................13 2.1.Objetivo 13 2.2Primitivas de Sada Grfica 13 2.3.Algoritmo de Ponto Mdio (Bresenham)24 2.1. Exerccios 30 Captulo 3.Transformaes Geomtricas..............................................................................31 3.1Transformaes 2D 31 3.2 Laboratrio TG 2D em MatLab 33 3.1 Transformaes 3D 37 3.4 Coordenadas Homogneas 38 3.5 Composio de Transformaes 40 Captulo 4.Modelagem Geomtrica......................................................................................42 4.1 Wireframe 45 4.2 Instanciamento Primitivo 45 4.3 Varredura 46 4.4 Decomposio 46 4.5 GSC Geometria Slida Construtiva 47 4.6 Fronteira 48 Captulo 5 Curvas e Superfcies..........................................................................................50 Captulo 5 .1 Curvas.............................................................................................................50 Captulo 6.Fundamentos de Cor............................................................................................55 6.1 Conceitos Bsicos 55 6.2.Sistemas de Cores Primrias 56 Captulo 7 Processamento de Imagem.................................................................................58 7.1 Representao Digital de Imagem 58 7.2 Quantizao 61 7.3 Amostragem 66 7.4.Histograma 68 7.5.Thresholding 69 5.6 Filtros 72 5.7 Morfologia Matemtica 77 5.8 Estudo de Casos 82 5.9 Reconhecimento de Padres 86

Computao Grfica e Processamento de Imagem

Prof Kesede R Julio

1.Introduo

1.1.Breve Histrico
A histria da Computao Grfica (CG) remonta a histria dos computadores. Daremos, no entanto, um breve histrico de como tudo comeou. 1950-1960 :- Primeiros pontos, linhas e figuras visualizadas em tubos de raio catdicos (CRT).

1960-1970 :- Primeiros jogos utilizando CG: SpaceWar (1961 - estudantes do MIT), Odyssey (primeiro video game comercial). fundada a Evans & Sutherland, primeira empresa de CG da histria. Em 1968, o primeiro comercial de televiso utilizando grficos vetoriais. Primeiros simuladores de Realidade Virtual (RV).

Computao Grfica e Processamento de Imagem

Prof Kesede R Julio


SpaceWars- Alm de ter sido o primeiro jogo eletrnico, foi tambm a primeira simulao de computador a exibir uma representao grfica. Desenvolvido em 1961, no MIT, por um hacker chamado "Slug" Russell, funcionava num computador do tipo mainframe, o PDP-1, da empresa DEC. Ano de lanamento: 1961 Instituto: MIT Gnero: Arcade (?) Grfico: Duas cores Som: Nenhum Comportamento: Regras Espao Restart P - Pause Ao Atira Acelera Gira sentido horrio Gira sentido horrio Nave Gorda V C X Nave Magra . , M N

anti- Z

1970-1980 :- Os jogos tornam-se o centro das atenes comerciais. Grande uso da CG em filmes tendo como principal estrela, Star Wars (1977).
Pong: Primeiro game a ter uma distribuio de massa, o Pong foi inspirado no osciloscpio, um instrumento eletrnico que permite observar sinais eltricos num tubo de raios catdicos, como a TV e as telas de computador. Depois que a General Instruments lanou o primeiro chip barato, foi possvel construir um sistema completo de Pong com poucos componentes externos. Uma indstria inteira foi criada e centenas de fabricantes lanaram sua prpria linha do produto. Ano de lanamento: 1972 Empresa: Atari Gnero: Arcade Grfico: Duas cores Som: 1 bit Comportamento: Regras

1980-1990 :- Surgiram os computadores domsticos com interface grfica. Aumento significativo do uso de CG em filmes de Holywood, videoclipes (Dire Straits-1985), curta-metragens de animao digital.

Computao Grfica e Processamento de Imagem

Prof Kesede R Julio

IBM PC (Personal Computer), is a trade mark of IBM. The predecessor of the current personal computers and progenitor of the IBM PC compatible hardware platform, it was introduced in August 1981. The original model was designated the IBM 5150. It was created by a team of 12 engineers and designers under the direction of Don Estridge of the IBM Entry Systems Division. The introduction of the PC changed the world of IBM in 1981.

1990-2000 :- Grandes produes cinematogrficas usando CG (Jurrassic Park, Independence Day, Godzilla, Men in Black etc). Primeiro longa-metragem de animao digital (Cassiopia (Brasil), Toy Story(EUA)).

Computao Grfica e Processamento de Imagem

Prof Kesede R Julio

Cassiopdia 1992 - Primeiro longa-metragem Toy Story 1995 Primeira animao longatotalmente computadorizado metragem totalmente computadorizada feita pela Disney. Diferentemente do Cassiopia, usaram massas como modelos.

2000-atual :- Tendncia na produo de atores digitais (Aki Ross em Final Fantasy). Biometria. RV. Atores Digitais. Dr. Aki Ross a atriz digital do filme Final Fantasy produzido em 2001. Ela a primeira atriz fotorealstica gerada por computador.

Biometria. O uso de biometria digital na Disney World.

Computao Grfica e Processamento de Imagem

Prof Kesede R Julio Realidade Virtual. O modelo de uma rua da cidade de Nova York.

1.2.Contextualizao
Modelagem Geomtrica Viso Computacional Anlise de Imagens DADOS Sntese de Imagens Computao Grfica

IMAGENS Processamento de Imagens

1.3Aplicaes
As aplicaes de CG so inmeras e eu diria at infinitas, as possibilidades. Indo desde a rea mdica, passando pelo entretenimento e chegando as indstrias. Podemos citar algumas destas aplicaes, como: medicina, animao digital, simulao visual, multimdia na web etc

1.4Dispositivos Grficos
Os dispositivos grficos se dividem em dois: Vetorial e Matricial. Os Vetoriais se utilizam de um tipo de varredura chamada Randon Scan, que significa que os desenhos so apresentados aleatoriamente, ou seja, apenas os pontos que representaro a figura so acessados. Este processo se utiliza de um Display List armazenado na memria, o qual armazena todos os comandos e informaes (coordenadas x,y) para o desenho das figuras. O Computao Grfica e Processamento de Imagem 7

Prof Kesede R Julio principal problema destes dispositivos que a permanencia da figura de aproximadamente 40 microsegundos apenas, por isso esta lista (Display List) deve ser acessada vrias vezes, afim de executar o refresh e manter a figura sendo exibida por mais tempo. Quando o tempo de refresh maior que a persistncia do fsforo (elemento qumico que aceso em cada ponto do dispositivo) temos o que chamamos de flickering (piscada) de tela. quase impossvel para estes dispositivos o preenchimento de reas. Abaixo vemos um exemplo do desenho de um tringulo.

J os Matriciais se utilizam de uma tcnica de rastreamento chamada Raster Scan, onde todas as posies endereaveis do dispositivo so percorridas (de cima para baixo e da esquerda para direita). A medida que h o rastreamento a figura desenhada nas posies onde se encontram. Todo o display armazenado atravs de uma matriz de pixels (pontos do video) em um frame buffer (memria de video), por isso no h Display List, ficando muito mais fcil a execuo do refresh. Um grande problema deste tipo de dispositivo o desenho de linhas, principalmente quando fora dos eixos simtricos. Apesar deste problema, estes dispositivos se tornaram populares com o evento dos computadores domsticos em meados de 1980, devido a grande reduo de custo das memrias e apesar dos dispositivos Randon Scan terem melhor resoluo que os Raster Scan. A figura abaixo mostra um exemplo de Raster Scan.

Computao Grfica e Processamento de Imagem

Prof Kesede R Julio

A qualidade de um dispositivo raster dada por vrios fatores inerentes as suas dimenses fsicas e grficas.

1.5Resoluo Grfica
Todos os dispositivos grficos possuem uma grade (matriz) lgica capaz de enderear cada uma de suas interseces e, assim, representar pontos de visualizao. Ao nmero de pontos endereveis na vertical e na horizontal damos o nome de resoluo grfica. Existem 4 parmetros bsicos para o clculo desta resoluo: NDH -> nmero de posies (dots) endereveis horizontalmente NDV -> nmero de posies endereveis verticalmente WIDTH -> largura fsica (em milmetros) da rea enderevel HEIGHT -> altura fsica (em milmetros) da rea enderevel Atravs destes valores podemos conhecer algumas caractersticas importantes dos dispositivos. Resoluo Horizontal -> ResHoriz = NDH/WIDTH Tamanho do ponto na horizontal -> TamPtHoriz = WIDTH/NDH Resoluo Vertical -> ResVert = NDV/HEIGTH Tamanho do ponto na vertical -> TamPtVert = HEIGTH/NDV Total de pontos endereaveis -> NDV*NDH Aspect Ratio Grfico -> AspRatGraf -> TamPtVert/TamPtHoriz Aspect Ratio Fsico -> AspRatFis -> HEIGTH/WIDTH

Computao Grfica e Processamento de Imagem

Prof Kesede R Julio

1.6Sistemas de Coordenadas
1.6.1.Coordenada de Dispositivo Quando uma imagem visualizada em um dispositivo, um modelo do mundo real est ali sendo representado. Bem, ambientes diferentes, coordenadas diferentes. Toda visualizao em qualquer dispositivo deve ser dimensionada e posicionada de acordo com as dimenses do prprio dispositivo, localizao da imagem no visor e claro, do zoom de imagem que se pretende aplicar. Tudo isso requer transformaes e converses nas medidas reais daquilo que se quer representar. Verificaremos agora, como transformar medidas do mundo real para medidas de dispositivo. A visualizao em dispositivos grficos matriciais realizada atravs de uma matriz de pixels, Cada pixel possui uma coordenada x,y, onde x e y so nmeros inteiros (pois no conseguimos enderear meio pixel). Portanto: 0 dcx ndhm1 0 dcy ndvm1 Onde: dcx dcy -> coordenada x (coluna) do dispositivo -> coordenada y (linha) do dispositivo

ndhm1 -> numero de pontos(dots) na horizontal menos 1 ndvm1 -> numero de pontos(dots) na vertical menos 1 Devemos considerar que o primeiro pixel enderevel (0,0) est no canto inferior esquerdo do retngulo de visualizao. 1.6.2Coordenadas Normalizadas Devido a grande variedade de dispositivos existentes e cada um ter a sua representao de coordenadas, o uso das coordenadas normalizadas de dispositivos (NDC) tornaram-se imprescindveis. Estas coordenadas variam de 0 a 1. Logo: 0 ndcx 1 0 ndcy 1 Onde: ndcx -> coordenada de dispositivo normalizada x ndcy -> coordenada de dispositivo normalizada y Considere que a posio NDC(0,0) corresponde a DC(0,0) e NDC(1,1) corresponde a DC(ndhm1,ndvm1). A transformao das coordenadas do mundo em coordenadas normalizadas, faz com que a discusso de posicionamento fique independente do dispositivo de

Computao Grfica e Processamento de Imagem

10

Prof Kesede R Julio visualizao. Claro que quando do momento da visualizao estas coordenadas devem ser transformadas para dispositivo. Portanto: dcx=round(ndcx.ndhm1) dcy=round(ndcy.ndvm1) 1.6.3Coordenada Fsica ou do Objeto Neste caso, cada objeto a ser representado, torna-se seu prprio sistema de coordenada. Suas medidas podem ser dadas em milmetros ou polegadas. Sua representao dada por PC(pcx,pxy), onde: pcx -> a distncia fsica ao longo do eixo x a partir do extremo esquerdo do retngulo de visualizao at a posio em referncia. pcy -> a distncia fsica ao longo do eixo y a partir do extremo inferior do retngulo de visualizao at a posio em referncia. A transformao de PC para DC dada por: dcx = trunc(ndhm1. (pcx/width)) dcy = trunc(ndvm1. (pcy/heigth)) Repare que a diviso retorna um valor em percentual a ser multiplicado pela quantidade de pontos endereveis, tanto na horizontal quanto na vertical. O valor deve ser truncado, pois a medida em milmetros deve ser convertida em pixel. 1.6.4Coordenada do Usurio ou do mundo Tem seus limites e unidade de medida definidos pelo usurio, ou seja, dependero da aplicao. Para fins de exerccios consideraremos uma representao no plano cartesiano. Ser representado por UC(x,y). xmin x xmax ymin y ymax ndcx = (x-xmin) / (xmax-xmin) ndcy = (y-ymin) / (ymax-ymin) Note que no denominador temos a medida exata da janela (horizontal e vertical) e no numerador temos a distncia do ponto inicial da janela at o ponto que queremos converter. O resultado desta diviso uma proporo, bem prprio da coordenada normalizada.

1.1Exerccios

Computao Grfica e Processamento de Imagem

11

Prof Kesede R Julio 1.1.1.Faa uma pesquisa sobre 3 diferentes aplicaes de CG, diferentes das apresentadas anteriormente. Defina qual a rea especfica (Viso Computacional, Processamento de Imagem etc) de cada aplicao, exemplificando com imagens, videos etc. 1.1.2.Faa uma pesquisa das caractersticas de resoluo de 3 modelos diferentes de fabricantes diferentes e mostre um relatrio da sua pesquisa. 1.1.3.Escreva funes (em qualquer linguagem) de todas as converses possveis de coordenadas. Crie um pequeno aplicativo que se utilize destas funes.

Computao Grfica e Processamento de Imagem

12

Prof Kesede R Julio

2.Converso Matricial de Curvas


Um estudo das tcnicas para implementao de algoritmos de converso Matricial (Scan Converting Algorithms ) de curvas de um modo geral (linhas, circunferncias, elipses).

2.1.Objetivo
Quais pixels devem ser alterados para garantir uma visualizao contnua de linhas, curvas e objetos.

Ilustrao 1Eixos de Simetria

Ilustrao 2Reflexo sem deformao

2.2Primitivas de Sada Grfica

Procedimentos que tomam a coordenada de entrada, e invocam algoritmos de display para construir uma forma geomtrica em localizaes designadas em um dispositivo de sada. Os componentes geomtricos mais simples de um quadro so pontos e linhas. Outros tipos de primitivas de sada so reas poligonais, figuras curvas e linhas de caracteres. Para cada tipo de primitiva de sada, consideramos as tcnicas bsicas e algoritmos para mostrar as primitivas em diferentes tipos de sistemas grficos, tais como sistemas vetoriais e raster. A plotagem de pontos implementada num pacote grfico pela converso das coordenadas de informao de um programa de aplicaes com instrues para o equipamento de sada em uso.

2.2.1Desenho de linhas Equao da reta: y = m.x + b

Computao Grfica e Processamento de Imagem

13

Prof Kesede R Julio

onde: m a inclinao da linha (coeficiente angular) e b a interceptao de y (coeficiente linear). Dados dois pontos (x1, y1) e (x2, y2), temos: m = (y2 y1 )/(x2 x1) = D y / D x b = y1 m . x1 b = y1 (D y / D x ) . x1 y y2

y1

x1

x2

Afim de escolher qual pixel plotar quando do traado de uma reta, podemos levar em considerao vrios critrios de escolha. Estudaremos estes critrios a partir de um modelo de reta localizado no primeiro octante (0 o < inclinao < 45o). Por isso, no teremos problemas em escolher a coordenada x, a qual ser sempre escolhido a cada interseco, porm a coordenada y exige um estudo de critrios, os quais possuem vantagens e desvantagens. Critrio 1 :- Seleciona-se o pixel imediatamente abaixo e acima do ponto de interseco do segmento em cada vertical, exceto quando o ponto de interseco coincide com um pixel (ponto enderevel). Problemas: linhas densas Critrio 2 :- Seleciona-se o pixel atravs do arredondamento do valor da coordenada. Problemas: com segmentos no ponto mdio da vertical, cria-se linhas densas. Critrio 3 :- Seleciona-se o pixel mais prximo do ponto de interseco do segmento com o eixo vertical. Vantagens: aparncia leve e continuidade Critrio 4 :- Seleciona-se o pixel mais prximo do ponto de interseco do segmento com o eixo horizontal. Problemas: descontinuidade

Computao Grfica e Processamento de Imagem

14

Prof Kesede R Julio

Caractersticas de um bom conversor. 1. Linearidade:- aparncia de reta 2. Preciso:- Evitar gaps no incio ou final do segmento 3. Espessura uniforme:- Intensidade e espessura constante em todo o segmento 4. Intensidade independente da inclinao:- no caso de segmentos com diferentes inclinaes 5. Continuidade:- Segmento sem interrupo (gaps internos) 6. Rapidez no traado dos segmentos:- Velocidade tima em qualquer inclinao. De todos os critrios que estudamos, o terceiro critrio nos parece a melhor soluo. Seja um segmento de reta definido por seus extremos P(x1, y1) e P(x2, y2). Supondo que este segmento se encontra no primeiro octante, vale as relaes: 0 < x1 < x2 0 < y1 < y2 y2 - y1 < x2 - x1

Computao Grfica e Processamento de Imagem

15

Prof Kesede R Julio Nestas condies o segmento corta um maior numero de verticais que horizontais Exemplos de resultados pelo critrio 3

Neste estudo estamos desconsiderando:


Linhas grossas e estilos diferentes Cantos de polgonos arredondados

Afim de exercitarmos o que vimos, segue abaixo o cdigo em C que implementa a teoria, utilizando biblioteca Allegro e outro exemplo usando a biblioteca OpenGL. Equao da reta: y=y1+m (x-x1) Onde: m = (y2-y1) / (x2-x1)
Exemplo 2.1: Este cdigo traa qualquer linha no primeiro octante. Estaremos usando a biblioteca Allegro instalada no Dev-Cpp. Nas opes de parmetros de linker (Tools/Compiler Options) deve ser setado (-lalleg) // Tracado de reta no primeiro quadrante #include <allegro.h> #include <iostream.h> void traca(float x1, float x2, float y1, float y2); int main(){ float x1,x2,y1,y2; cout <<"Entre com o valor de x1: "; cin >>x1; cout <<"Entre com o valor de y1: "; cin >>y1; cout <<"Entre com o valor de x2: "; cin >>x2; cout <<"Entre com o valor de y2: "; cin >>y2; cout <<"\n"; traca(x1,y1,x2,y2);

Computao Grfica e Processamento de Imagem

16

Prof Kesede R Julio


} void traca( float x1, float y1, float x2, float y2){ float m; float x,y; allegro_init(); install_keyboard(); set_gfx_mode(GFX_AUTODETECT_WINDOWED,640,480,0,0); m=(y2-y1) / (x2-x1); cout<<"valor de m: "<<m<<"\n\n"; for(x=x1; x<=x2; x++){ y= (y1 + m * (x-x1)); putpixel(screen,(int)x, 500-(int)y, makecol(255,255,0)); } readkey(); } END_OF_MAIN()

Exemplo 2.2: Este cdigo traa qualquer linha no primeiro octante. Estamos usando aqui a biblioteca Opengl no ambiente do Dev. Este codigo deve ser criado dentro de um projeto (.dev) e nas opes de parmetros de linker do projeto deve ser setado (lopengl32 -lglut32 -lglu). A Glut tambem deve estar instalada. #include <GL/glut.h> #include <stdlib.h> // prototipos das funcoes void init(void); void display(void); void keyboard(unsigned char key, int x, int y); // funcao principal int main(int argc, char** argv){ glutInit(&argc, argv); e modo de //cores janela glutInitWindowSize (256, 256); // especifica as dimensoes da // inicializa o glut glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);// especifica o uso de buffer

Computao Grfica e Processamento de Imagem

17

Prof Kesede R Julio


glutInitWindowPosition (100, 100); // especifica aonde a janela aparece na // cria a janela

tela

glutCreateWindow ("Desenhando uma linha"); init(); pelo GLUT glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } // definicao de cada funcao void init(void){ glClearColor(0.0, 0.0, 0.0, 1.0); glOrtho (0, 256, 0, 256, -1 ,1); ortogonal } void display(void){ GLfloat m,x1,x2,y1,y2,y,x; glClear(GL_COLOR_BUFFER_BIT); // apaga tela // cor de fundo

// funcao que sera redesenhada // funcoes de teclado // mostra todas as janelas criadas

// define os eixos do modo de projecao

// define pontos iniciais e finais para a reta no primeiro octante x1=10; y1=50; x2=280; y2=100; m=(y2-y1)/(x2-x1); for(x=x1;x<=x2;x++){ y=(y1+m*(x-x1)); glBegin(GL_POINTS); glVertex2f(x,y); glEnd(); } glFlush(); // descarrega na tela tudo o que foi traado } void keyboard(unsigned char key, int x, int y){ switch (key) { case 27: exit(0); break; } } // tecla Esc (encerra o programa) // calcula inclinacao // traa reta incrementando x de 1 em 1 e y sendo calculado

Computao Grfica e Processamento de Imagem

18

Prof Kesede R Julio

2.2.1Desenho de Circunferncias Os parmetros bsicos que definem uma circunferncia so as coordenadas do centro e o raio r. Podemos expressar a equao de uma circunferncia de vrias formas, usando parmetros de coordenadas Cartesianas ou Polares. Coordenadas Cartesianas :- ( x - xc )2 + ( y - yc )2 = r2 Coordenadas Polares :x = xc + r . cos y = yc + r . sen Onde: xc a coordenada x do centro da circunferncia yc a coordenada y do centro da circunferncia r o raio da circunferncia

o ngulo de x e de y, respectivamente
Exemplo 2.3: Traa uma circunferncia usando o Allegro. // Traca circunferencia #include <allegro.h> #include <stdio.h> #include <math.h> void circ(float xc,float yc,float r); int main(){ float xc, yc, raio; printf("Entre com o valor de xc: "); scanf("%f",&xc);

Computao Grfica e Processamento de Imagem

19

Prof Kesede R Julio printf("Entre com o valor de yc: "); scanf("%f",&yc); printf("Entre com o valor do raio: "); scanf("%f",&raio); circ(xc,yc,raio); } END_OF_MAIN()

void circ(float xc,float yc,float r){ float ang,ang_rad,x,y; allegro_init(); install_keyboard(); set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0);

// traa circunferencia incrementando o ngulo (ang) de 1 em 1. // o ngulo tambem est sendo convertido para radianos. for(ang=1;ang<=360;ang++){ ang_rad=(ang*3.14)/180; x = xc + (r * cos (ang_rad)); y = yc + (r * sin (ang_rad)); putpixel(screen,(int)x, 600-(int)y, makecol(0,255,0)); } readkey(); }

Exemplo 2.4: Troque a funo display() do exemplo 2.2 por esta. void display(void){ GLfloat m,xc,yc,r,ang,ang_rad,x,y;

Computao Grfica e Processamento de Imagem

20

Prof Kesede R Julio

glClear(GL_COLOR_BUFFER_BIT); // apaga tela // define ponto central e raio xc=80; yc=80; r=50; // traa circunferencia incrementando o ngulo (ang) de 1 em 1. // o ngulo tambem est sendo convertido para radianos. for(ang=1;ang<=360;ang++){ ang_rad=(ang*3.14)/180; x = xc + (r * cos (ang_rad)); y = yc + (r * sin (ang_rad)); glBegin(GL_POINTS); glVertex2f(x,y); glEnd(); } glFlush(); // descarrega na tela tudo o que foi traado } 2.2.3Elipses O Algoritmo de desenho de circunferncias pode ser estendido para traar elipses. Uma circunferncia uma elipse, onde tanto o raio maior como o raio menor so iguais. No caso, quando vamos determinar a equao da elipse, determinamos dois raios diferentes, r1 chamado de raio maior e r2 chamado de raio menor, o centro est no ponto (xc, yc). Logo, temos que: Coordenadas cartesianas:- ( x xc / r1 )2 + ( y yc / r2 ) 2 = 1 Coordenadas polares :x = xc + r1 . cos y = yc + r2 . sen

Computao Grfica e Processamento de Imagem

21

Prof Kesede R Julio Estas implementaes de traado de curvas so experimentais. Existem vrios outras propostas para traarmos estas primitivas de forma mais otimizada. Exemplo 2.5 : Traa elipse usando Allegro // Traca circunferencia #include <allegro.h> #include <stdio.h> #include <math.h> void circ(float xc,float yc,float r1,float r2); int main(){ float xc, yc, raio1, raio2; printf("Entre com o valor de xc: "); scanf("%f",&xc); printf("Entre com o valor de yc: "); scanf("%f",&yc); printf("Entre com o valor do raio 1: "); scanf("%f",&raio1); printf("Entre com o valor do raio 2: "); scanf("%f",&raio2); circ(xc,yc,raio1,raio2); } END_OF_MAIN()

void circ(float xc,float yc,float r1, float r2){ float ang,ang_rad,x,y; allegro_init(); install_keyboard(); set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0);

Computao Grfica e Processamento de Imagem

22

Prof Kesede R Julio

// traa circunferencia incrementando o ngulo (ang) de 1 em 1. // o ngulo tambem est sendo convertido para radianos. for(ang=1;ang<=360;ang++){ ang_rad=(ang*3.14)/180; x = xc + (r1 * cos (ang_rad)); y = yc + (r2 * sin (ang_rad)); putpixel(screen,(int)x, 600-(int)y, makecol(0,255,0)); } readkey(); }

2.3.Algoritmo de Ponto Mdio (Bresenham)


O Algoritmo visto anteriormente tem o problema de ser muito lento para ser traado, uma vez que se utiliza de ponto flutuante para clculo de x e y (dependendo da inclinao). O algoritmo de Ponto Mdio, desenvolvido por Bresenham em 1965 tem a vantagem de eliminar o uso do ponto flutuante substituindo-o por inteiro. Este mtodo tambm chamado de "Incremental", uma vez que para calcular (xi+1, yi+1) usamos os valores j calculados de x i e yi. Este Algoritmo foi desenvolvido tanto para o desenho de linhas como para o desenho de circunferncias e elipses. A seguir veremos cada um deles. 2.3.1Ponto Mdio para Linhas O nosso problema sempre ser decidir qual pixel iremos escolher para continuar o traado. Considere, no traado de linhas, a figura abaixo.

Computao Grfica e Processamento de Imagem

23

Prof Kesede R Julio

NE yp+1 yp

I
M P=(xp,yp) xp E xp+1

Neste estudo, estaremos considerando um segmento cuja inclinao est entre 0 e 1 (primeiro octante) e x1 < x2 e y1 < y2 (o segmento comea na esquerda e segue para direita), as outras inclinaes podero ser feitas por simetria. Dado que o pixel P(xp,yp) foi escolhido, precisamos escolher qual o prximo pixel (E ou NE). Para proceder esta escolha verificamos onde se localiza o ponto M (Ponto Mdio) em relao a I (ponto de interseco da prxima vertical com a reta a ser traada). Caso este Ponto Mdio esteja acima da reta, o pixel E escolhido, caso esteja abaixo dela, o pixel NE escolhido. Dessa forma, o erro da escolha neste algoritmo ser sempre menor ou igual a . Precisamos agora de um mtodo matemtico para verificar de que lado (acima ou abaixo) M est em relao a reta. Considerando a equao da reta em termos de sua inclinao:
y =ax b ,

sendo

a=

dy dx

e dy = y 2 y 1

dx = x 2 x1

Substituindo na equao temos:


y= dy x b dx

Agora podemos igualar esta equao a zero, assim:

Computao Grfica e Processamento de Imagem

24

Prof Kesede R Julio y= y= y= dy x+ b dx dyx +b dx dyx + bdx dx ( multiplicao da frao por x / 1 ) ( divide pelo denominador e multiplica pelo numerador ) ( transporta o dx para a esquerda ) ( iguala a equao a zero )

dx y = dyx + bdx dyx dx y + bdx = 0

Agora, considere a equao implcita da reta: F x , y =ax by c =0 Atravs da equao da reta em termos de sua inclinao, conseguimos os termos da equao implcita, assim:

F x , y =dyx dxy Bdx =0


Logo, a = dy b =dx c =bdx Para pontos sobre a reta, teremos sempre F(x,y)=0, acima da reta F(x,y) < 0 (negativa) e abaixo dela teremos F(x,y)>0 (positiva). Para efetuar a verificao desta afirmao, escolha dois pontos quaisquer e, atravs da equao da reta, encontre pelo menos mais dois pontos. Agora, substitua qualquer desses pontos na equao implcita. Caso o ponto mdio pertena a reta, o clculo de F(M) = F(x p+1, yp+ ), ser 0 (zero) e ento podemos escolher E ou NE. Caso a funo seja positiva, significa que o ponto mdio est abaixo do segmento e, portanto escolhemos o pixel NE; caso seja negativa, o ponto est acima do segmento, e portanto escolhemos o pixel E. Como estaremos decidindo atravs de F(M), passaremos a cham-lo de varivel de deciso (d). Esta deciso definir a escolha do prximo ponto E ou NE. Portanto, se E for escolhido, incrementamos 1 em x; caso NE seja escolhido incrementamos 1 em x e tambm em y. Caso E seja escolhido, Computao Grfica e Processamento de Imagem 25

Prof Kesede R Julio


1 1 d novo= F x p 2, y p = a x p 2 b y p c 2 2

e
1 d anterior = a x p1 b y p c 2

Subtraindo danterior de dnovo obtemos a diferena incremental E. 1 ax p 2a by p bc 2 1 ax p a by p bc 2 = a E = a = dy Afim de eliminar a frao de b multiplicamos toda a equao por 2, o que no muda em nada no resultado que nos interessa que o seu sinal. Portanto: E=2dy. Caso NE seja escolhido,
3 3 d novo= F x p 2, y p = a x p 2 b y p c 2 2

e
1 d anterior = a x p1 b y p c 2

Subtraindo danterior de dnovo obtemos a diferena incremental NE. 3 ax p 2a by p bc 2 1 ax p a by p bc 2 = a b NE= a + b = dy - dx Aqui tambm afim de eliminar a frao de b multiplicamos toda a equao por 2. Portanto: NE=2(dy-dx).

Computao Grfica e Processamento de Imagem

26

Prof Kesede R Julio Com isso encontramos o incremento caso o ponto E seja escolhido e o incremento caso NE seja escolhido. Bem, agora precisamos da varivel dinicial , pois ela que ser incrementada. Sabendo que o ponto inicial (x 1, y1) um ponto da reta, podemos ento calcular o dinicial para escolha do primeiro E ou NE. Ento, 1 F M = d inicial =a x p 1 b y p c = 2 b = ax p a by p c = 2 b = ax p by p c a = 2 b = F x p , y p a = 2 b = a 2 Tambm afim de eliminar d inicial =2a b =2dy dx . a frao multiplicamos por 2, e portanto,

2.3.2 Ponto Mdio para Circunferncias Assim como para linhas, o objetivo do algoritmo para as circunferncias plotar o prximo ponto. Para isso, consideraremos a equao da circunferncia: F x , y = x y R
2 2 2

Trataremos do traado da circunferncia apenas para o segundo octante ( 0 x R 2 e R y R 2 ), todos os demais pontos podero ser traados por simetria. xp
P=(xp,yp)

xp+1
E M

yp yp-1

SE

Computao Grfica e Processamento de Imagem

27

Prof Kesede R Julio

Neste caso, dado um ponto P x p , y p , queremos traar o prximo ponto E ou SE. Novamente avaliamos o F(M) = d (varivel de deciso), afim de tomarmos a melhor deciso. O ponto inicial escolhido P(0,R), portanto o prximo ponto 1 mdio est em 1, R . Substituindo este ponto da equao, temos: 2
1 1 5 2 2 2 F 1, R =1 R R R = R 2 4 4

Para determinarmos os incrementos (E e SE), procedemos da mesma forma que no algoritmo da linha. Caso seja escolhido E, incrementamos 1 em x; caso seja SE incrementamos 1 em x e decrementamos 1 em y. Caso seja escolhido E, ento: 1 1 2 d anterior = F x p1, y p = x p 1 2 y p R2 2 2 1 1 2 d novo= F x p 2, y p = x p 22 y p R 2 2 2 Ao subtrairmos o danterior de dnovo, encontramos a diferena incremental de E. Podemos cancelar os dois ltimos termos e calcular apenas o primeiro, assim: d anterior= x p1 = x p 2x p 11 = x p2x p 1
2 2 d novo = x p 2 2 = x 2 p 2x p 2 2 = x p 4x p 4 2 2 2 2

E = 2x p 3 Caso SE seja escolhido, temos: 3 3 2 d novo= F x p 2, y p = x p 22 y p R 2 2 2 Desta forma, fazendo a subtrao com o d anterior , teremos SE. Como os terceiros termo so iguais, podemos cancel-los, calculando apenas o primeiro e o segundo termo. A subtrao do primeiro termo j foi calculada no E, assim podemos calcular apenas o segundo termo:

Computao Grfica e Processamento de Imagem

28

Prof Kesede R Julio 1 d anterior = x p 12 y p = 2 1 1 2 x p1 2 y 2 2 y = p p 2 2 1 x p1 2 y p2 y p 4 3 2 d novo = x p2 2 y p = 2 3 3 2 2 2 x p 2 y p 2y p = 2 2 9 x p2 2 y2p 3y p 4 E = 2x p3 2y p2 =2x p 2y p 5


2

2.1. Exerccios
2.4.1.Desenvolva mtodos para implementao destas curvas, utilizando qualquer linguagem de programao (Java, C++, C, pascal etc). 2.4.2.Desenhe um boneco utilizando apenas as primitivas vistas. O boneco deve possuir: cabea (circulo), olhos (elipse), braos, pernas e tronco (linhas). 2.4.3.Faa este boneco piscar os olhos. 2.4.4.Modifique a funo que desenha a reta, trocando-a pelo algoritmo de Ponto Mdio (Bresenham).

Computao Grfica e Processamento de Imagem

29

Prof Kesede R Julio

3.Transformaes Geomtricas
A Transformao Geomtrica (TG) nos permite modificar a dimenso de um objeto em uma cena, assim como mud-lo de posio ou menos gir-lo sob um determinado grau, a partir de um determinado ponto.

3.1Transformaes 2D
As Transformaes 2D so realizadas no plano cartesiano. Existem, basicamente, 3 transformaes possveis: translao, rotao e escala. As transformaes aqui apresentadas sero efetuadas em relao origem. 3.1.1 Translao O movimento de translao realizado atravs da soma de um deslocamento em x (tx) e/ou em y (ty). Dado um ponto P(x, y), podemos translad-lo em x, assim o novo ponto seria P'(x', y'). Para deslocarmos o ponto em y a regra a mesma. Ento x' x transladado de tx e y' o y transladado de ty. O deslocamento pode ser positivo ou negativo, dependendo do destino que se quer dar ao ponto. x' = tx + x y' = ty + y Podemos representar estes pontos e deslocamento em matriz, assim: P = x y P '= x' y' T = tx ty

[] [ ] []

Portanto, a equao em termos destes vetores, : P'= T + P Podemos transladar um objeto, transladando ponto a ponto da forma vista acima, no entanto isto torna-se caro computacionalmente. Ento podemos, por exemplo, para transladar um linha, transladar apenas o seu ponto inicial e o seu ponto final, retraando a linha no destino. Isto pode ser feito com polgonos atravs de seus vrtices. Veja o exemplo de um objeto translado em T(1,2).

Computao Grfica e Processamento de Imagem

30

Prof Kesede R Julio

y (2.5, 5)

(3.5, 7)

(2,4) (1,2) (4,2) x

(5,4)

Objeto na Posio inicial

Objeto Transladado

3.1.2Escala Podemos tambm, ao invs de transladar o objeto, escalon-lo afim de adequ-lo a uma determinada cena. Aplicamos, para isso, um fator de escala em x (sx) e um fator de escala em y (sy). Estes fatores devem ser multiplicados pelos valores de x e de y do ponto, respectivamente. x'= sx * x y' = sy * y E portanto, matricialmente, teramos: P ' = S P

[ ][

x' sx = y' 0

0 x sy y

][ ]
(1.25, 7.5) y

Aplicando um fator sx=0.5 e sy=1.5 no objeto abaixo, teramos: y (2.5, 5)

(0.5,3) (1,2) (4,2) x

(2,3)

Objeto na Posio inicial 3.1.3 Rotao

Objeto Escalonado

Computao Grfica e Processamento de Imagem

31

Prof Kesede R Julio A TG de rotao permite girarmos um objeto de acordo com um determinado ngulo () especificado. Para isso, precisamos aplicar fatores de rotao em x e em y. Matematicamente, teramos:

x ' = xcos ysen y ' = xsen ycos


e matricialmente, teramos:

P ' = RP x ' = cos sen x y' sen cos y

[ ][

][ ]
y

Aplicando uma rotao de 45o positivos no objeto abaixo, teremos a seguinte transformao:

y (2.5, 5)

(-2.9, 4.7 ) (0.3, 4.4 )

(1,2)

(4,2) x

(-1.1, 1.9 ) Objeto Rotacionado x

Objeto na Posio inicial

3.2 Laboratrio TG 2D em MatLab


Primeiramente precisamos construir a matriz de pontos do objeto a ser transformado. Trabalharemos com um quadrado 2x2, com o cse(2,4) e com o cid(4,2). Para plotarmos este objeto criaremos uma matriz de pontos P, onde a primeira linha representar o eixo x e a segunda linha o eixo y. O ltimo ponto deve ser igual ao primeiro para que o objeto seja fechado. Vamos l: No prompt do Matlab digite: >> P=[2 4 4 2 2;4 4 2 2 4] P= 2 4 4 4 4 2 2 2 2 4

Aqui construmos uma matriz 2x5, onde cada coluna representa um ponto (x,y) do objeto (sendo o ltimo igual ao primeiro afim de fechar o quadrado). Vamos plotar para visualizarmos o objeto. Digite: Computao Grfica e Processamento de Imagem 32

Prof Kesede R Julio

>> plot(P(1,:),P(2,:)), xlim([0 10]), ylim([0 10]), grid on Ser mostrado um quadrado em um plano cartesiano x,y com escala de 0 a 10. Agora mostraremos como efetuar as transformaes neste objeto. 3.2.1 Translao Vamos agora transladar o objeto com os fatores tx=2 e ty=1. Construa a matriz translao digitando: >> T=[2;1] T= 2 1 Como a transformao de translao aditiva e no multiplicativa, no podemos somar toda a matriz Ponto (P) com a matriz Translao (T), devido a inconsitncia da ordem das matrizes. Assim, devemos somar cada coluna da matriz Ponto com a matriz Translao, gerando cada coluna da matriz resultante Pt (Pontos transladados). No prompt do MatLab digite: >> Pt(:,1)=T+P(:,1) Pt = 4 5 >> Pt(:,2)=T+P(:,2) Pt = 4 5 6 5

>> Pt(:,3)=T+P(:,3) Pt = 4 5 6 5 6 3

Computao Grfica e Processamento de Imagem

33

Prof Kesede R Julio >> Pt(:,4)=T+P(:,4) Pt = 4 5 6 5 6 3 4 3

>> Pt(:,5)=T+P(:,5) Pt = 4 5 6 5 6 3 4 3 4 5

Com a matriz Pt pronta, podemos plot-la. Digite: >> hold on; >> plot(Pt(1,:),Pt(2,:)), xlim([0 10]), ylim([0 10]),grid on >> hold off; Pronto! Temos agora duas imagens do mesmo objeto, uma na posio inicial outra na final (transladada). Exerccios 1. Plote um tringulo P1(2,3) , P2(6,3) ,P3(4,5) e aplique a translao T(3, -2). 3.2.2 Escalonamento Construiremos uma matriz escala S, afim de escalonar o objeto com fator 0,5 em x e 1,5 em y. Digite: >> S=[0.5 0;0 1.5] S= 0.5000 0 0 1.5000

Computao Grfica e Processamento de Imagem

34

Prof Kesede R Julio Com a matriz escala S construda podemos multiplica-la pela matriz de pontos, afim de obter os novos pontos do objeto. Digite: >> Ps=S*P Ps = 1 6 2 6 2 3 1 3 1 6

Plotamos agora o objeto escalonado. Digite: >> plot(P(1,:),P(2,:)), xlim([0 10]), ylim([0 10]), grid on >> hold on; >> plot(Ps(1,:),Ps(2,:)), xlim([0 10]), ylim([0 10]); >> hold off; Perceba que o objeto teve uma diminuio em 50% em x e teve um aumento de 50% em sua dimenso em y. Exerccios 1. Plote um tringulo P1 (2,3) , P2(6,3) ,P3(4,5) e aplique um fator de escalonamento S(0.3,0.7). 3.2.3 Rotao Agora construiremos a matriz rotao R, assumindo que queremos rotacionar 17o19 positivos (0,3 em radianos). Digite: >> R=[cos(0.3) -sin(0.3); sin(0.3) cos(0.3)] R= 0.9553 -0.2955 0.2955 0.9553

Pronto! Com a matriz ponto P e a matriz rotao R construda, podemos fazer a multiplicao das duas para conseguirmos os novos pontos da matriz rotacionada Pr. Computao Grfica e Processamento de Imagem 35

Prof Kesede R Julio

>> Pr=R*P Pr = 0.7286 4.4124 2.6393 5.0034 3.2303 3.0928 1.3196 2.5017 0.7286 4.4124

Estes so os novos pontos do objeto rotacionado. Agora podemos plot-lo sobre o objeto em sua posio inicial para percebermos a rotao sendo realizada. >> plot(P(1,:),P(2,:)), xlim([0 10]), ylim([0 10]), grid on >> hold on; >> plot(Pr(1,:),Pr(2,:)), xlim([0 10]), ylim([0 10]); >> hold off; Para limpar a janela do grfico, digite: >> clf Exerccios 1. Crie uma matriz de pontos para um tringulo P1 (2,3), P2(6,3) , P3(4,5) e aplique uma transformao R-15. 3.3 Transformaes 3D A Transformao 3D acontece no espao (x, y, z) e obedece as mesmas regras das transformaes 2D. Para gerar suas matrizes basta acrescentar uma coluna e uma linha a cada uma delas. Assim:

Translao: tx T = ty tz

[]
Computao Grfica e Processamento de Imagem 36

Prof Kesede R Julio Escala: sx 0 0 S = 0 sy 0 0 0 sz Rotao: cos sen 0 R= sen cos 0 0 0 1

]
] ]

[ [

Na rotao em 3D, temos a opo de escolhermos qual dos eixos ficar fixo, ou seja, sobre qual eixo queremos que a rotao seja realizada. Por isso, teremos 3 matrizes possveis. Sobre o eixo z (no plano xy): cos sen 0 R= sen cos 0 0 0 1

Sobre o eixo x (no plano yz): 1 0 0 R= 0 cos sen 0 sen cos

[
[

]
]

Sobre o eixo y (no plano xz): R= cos 0 sen 0 1 0 sen 0 cos

3.4 Coordenadas Homogneas


As matrizes de Rotao e de Escala so aplicadas sobre a matriz de Pontos atravs de uma multiplicao, diferente da matriz Translao que tem um efeito aditivo sobre a matriz de pontos. Computao Grfica e Processamento de Imagem 37

Prof Kesede R Julio

Rotao Escala

: P = R * P : P = S * P

Translao : P = T + P A fim de possibilitar as mltiplas transformaes no ponto, utilizando composio de matrizes (rotao, escala e translao), temos que fazer com que as operaes das matrizes de transformao com os pontos sejam consistentes (todas devem ser multiplicativas em relao a matriz ponto). Vamos demonstrar isto com as matrizes no plano (2D), mas por extenso, pode ser aplicado as matrizes no espao (3D). Para que todas as operaes possam ser multiplicativas, devemos converter as coordenadas de cartesianas (x,y) para homogneas (x,y,W). Na realidade, isso significa que estaremos tratando pontos do plano (2D) atravs de trs coordenadas. A coordenada W poder ser dividida por x e y, voltando assim para sua representao cartesiana. Assim, P(2,3,5) tambm pode ser representada por P(2/5,3/5,1). Ao usarmos este tipo de representao temos tambm que modificar a forma de representao matricial. Desta forma, todo ponto teria o acrscimo da coordenada homognea representada pelo plano 1 do espao 3D. Abaixo apresentamos as novas matrizes de transformao. Translao: P = T * P x' 1 0 tx x P ' =TP y ' = 0 1 ty y 1 0 0 1 1 Escala: P = S * P x' sx P ' = SP y ' = 0 1 0 Rotao: P = R * P cos sen 0 x x' P ' = RP y ' = sen cos 0 y 1 0 0 1 1

[ ] [ ][ ]
0 0 x sy 0 y 0 1 1

[ ][
[ ][

][ ]

][ ]
38

Computao Grfica e Processamento de Imagem

Prof Kesede R Julio No sentido de aplicarmos vrias transformaes sobre uma matriz de pontos, podemos executar multiplicaes consecutivas sobre as matrizes, obedecendo a ordem de multiplicao da direita para a esquerda. P = R * S * T * P

3.5 Composio de Transformaes


As transformaes realizadas sobre um mesmo ponto podem ser combinadas em uma nica matriz, no intuito de aumentar a eficincia da transformao. Esta matriz chamada de Matriz Composio. At agora todas as transformaes foram realizadas a partir da origem, no entanto, podemos desejar uma transformao a partir de qualquer ponto. Para isso, podemos seguir os seguintes procedimentos: 1. Transladar a matriz de Pontos para a origem (To) 2. Aplicar as transformaes necessrias (R e/ou S e/ou T) na origem. 3. Transladar a matriz de Pontos de volta (Tv ) para sua posio original. MC = Tv * R * S * To P = MC * P Assim, se quisermos fazer uma rotao de 45 o negativa a partir do ponto (2,3), no quadrado p1(3,3), p2(6,3), p3(6,6) e p4(3,6), executaremos a seguinte seqncia de transformao: MC = T(2,3) * (R-45 * T(-2,-3)) P = MC * P

Computao Grfica e Processamento de Imagem

39

Prof Kesede R Julio

4.Modelagem Geomtrica
Modelagem geomtrica um conjunto de mtodos utilizados para descrever a forma e caractersticas de um objeto. A modelagem geomtrica de grande importncia devido ao barateamento do custo do processo industrial que as simulaes oferecem. mais barato construir, analisar, alterar e manipular modelos que objetos. As tcnicas de modelagem so fartamente utilizadas em sistemas de CAD (Computer Aided Design), animao, robtica etc. Os primeiros sistemas serviram indstria aeroespacial e automobilstica e estavam baseados em estudos matemticos desenvolvidos nas dcadas de 50 e 60. Estes sistemas eram chamados de modeladores de superfcie e eram computacionalmente caros devido as restries de hardware e algoritmos ainda no to bem otimizados. No fim dos anos 60, as pranchetas eram trocadas pelo monitor, atravs de sistemas CAD que permitia a gerao de linhas retas, arcos, alm de acrscimo de dimenses e informaes sobre o objeto desenhado, podendo ainda a impresso ser direcionada a uma ploter. Estes sistemas caracterizavam-se pela representao dos objetos atravs de suas vistas (elevao, planta, lateral), como na figura 4.1.

Computao Grfica e Processamento de Imagem

40

Prof Kesede R Julio

Figura 4.1: Vistas de uma pea

Em meados de 70, informaes de profundidade foram acrescidas s linhas, podendo o computador gerar um objeto unificado, chamado de objeto semitridimensional, desenhado por um conjunto de arestas no espao. A idia foi logo generalizada e foram gerados os primeiros modelos tridimensionais chamados de wireframe (fio de arame). Neste caso qualquer parte do objeto poderia ser representada em qualquer ponto de vista e qualquer projeo escolhida pelo usurio. Podemos ver um exemplo na Figura 4.2.

Computao Grfica e Processamento de Imagem

41

Prof Kesede R Julio

Figura 4.2: Modelo Wireframe

Como este modelo era composto por um conjunto de arestas, dependendo da complexidade do objeto e do ponto de vista do usurio, as arestas se confundiam e ficava difcil a interpretao. Faltava as informaes sobre as superfcies visveis e no-visveis para tornar o objeto mais compreensvel visualmente. Da surgiram os modeladores de slidos, unindo as vantagens do wireframe e a dos modeladores de superfcie. Agora os modelos poderiam conter informaes sobre faces do objeto (superfcies e arestas) visveis e escondidas, ou seja, informaes referentes as fronteiras do objeto, alm de detalhes sobre suas conectividades. Um grande ganho destes modelos o calculo de volume, massa momento de inrcia, interferncia entre componentes etc. Uma grande barreira at hoje para a modelagem de slidos a tecnologia de hardware e de software, que ainda so fatores limitantes para o bom desempenho dos sistemas. Este modelo permite, em princpio, o clculo de qualquer propriedade geomtrica do objeto modelado gerada pela sua capacidade de distinguir superfcie, interior e exterior do objeto. Estes clculos dependem da validao do objeto (o slido deve ser vlido) que devem satisfazer as seguintes propriedades:

Computao Grfica e Processamento de Imagem

42

Prof Kesede R Julio Rigidez: transformaes rgidas aplicadas sobre ele no podem modificar sua forma. Finitude: ocupar uma parte finita do espao Homogeneidade: no pode possuir objetos adendos a ele. Determinismo da fronteira: a fronteira, o interior e o exterior do objeto devem ser passveis de descrio. Finitude de descrio: um nmero finito de smbolos deve descrever o objeto. Fechamento sobre operaes: operaes geomtricas efetuadas sobre objetos vlidos devem resultar em um objeto vlido. Segundo Mortengen existem 6 mtodos diferentes de modelagem: Wireframe, Instanciamento primitivo, Varredura, Decomposio, Geometria Slida Construtiva (CSG-Constructive Solid Geometry), Fronteira (B-Rep ou Polygonal Representation).

4.1 Wireframe
Este modelo tambm conhecido como fio de arame. O grande problema deste mtodo a representao de objetos complexos, onde o traado de suas linhas pode gerar interpretaes ambguas. Figura 4.2

4.2 Instanciamento Primitivo


A representao dos slidos so gerados a partir da representao de slidos primitivos alterando-se os parmetros.

Computao Grfica e Processamento de Imagem

43

Prof Kesede R Julio

Figura 4.3: Modelo por Instanciamento Primitivo

4.3 Varredura
Neste modelo, o slido representado por uma regio bidimensional e um vetor diretor. O slido gerado pelo caminho feito pelo vetor diretor.

Figura 4.4: Modelagem por Varredura

4.4 Decomposio
Computao Grfica e Processamento de Imagem 44

Prof Kesede R Julio

O slido, neste modelo, representado por um conjunto de slidos primitivos que so unidos por uma operao de colagem. Na Figura 4.5 podemos ver um modelo por Decomposio utilizando a tcnica de Enumerao exaustiva (conjunto de slidos primitivos todos de mesmo tamanho). Esta abordagem aproximada, uma vez que suas curvas so aproximadas.

Figura 4.5: Modelagem por Decomposio

4.5 GSC Geometria Slida Construtiva


A representao aqui realizada por operaes e transformaes sobre slidos primitivos, ou seja, cone, cilindro, cubo e esfera para representar qualquer outro objeto. Aplicando transformaes geomtricas (rotao, translao e escala) e operaes booleanas (unio, interseco e diferena) sobre as formas primitivas podemos construir quaisquer outras formas de representao. Um grande problema deste mtodo o custo computacional, devido a grande quantidade de interseces (ray tracing) a serem calculadas. Alm disso, alguns objetos so impossveis de serem representados apenas com primitivas. Abaixo mostramos um exemplo desta representao em uma estrutura de rvore.

Computao Grfica e Processamento de Imagem

45

Prof Kesede R Julio

Figura 4.6: Modelagem por GCS

4.6 Fronteira
Os objetos aqui so representados por um conjunto de faces de polgonos planos, onde as fronteiras dos polgonos demarcam as curvas do objeto.

Computao Grfica e Processamento de Imagem

46

Prof Kesede R Julio

Figura 4.7: Modelagem por Fronteira

Este um mtodo de representao muito utilizado nos sistemas grficos atuais, porm sua construo complexa, uma vez que as curvas requerem muitas faces para represent-las. O efeito de suavizao pode ser feito atravs de sombreamento e a sua renderizao realizada atravs de programas embutidos no hardware.

Computao Grfica e Processamento de Imagem

47

Prof Kesede R Julio

5 Curvas e Superfcies 5 .1 Curvas


5.1.1 Conjunto de Pontos Uma curva representada, matematicamente, por um conjunto infinito de pontos. Claro que esta representao infinita impossvel de ser descrita analiticamente, portanto, um conjunto finitos de pontos deve ser escolhido para definir uma curva. Enfim, uma curva representada por uma sequncia de pontos no plano cartesiano (x, y). Exemplo: {(-2,8), (-1,3), (0,0), (1,-1), (2,0), (3,3), (4,8)}. Cada um destes pontos representam a distncia entre o ponto e a origem dos eixos x e y, respectivamente. Resultados de experimentos se utilizam deste forma de representao.

Dependendo da aplicao, apenas os pontos so suficientes para mostrar satisfatoriamente os dados, porm se queremos representar uma curva

Computao Grfica e Processamento de Imagem

48

Prof Kesede R Julio geomtrica e no pontos representativos de dados, precisaremos de mais pontos quanto mais acentuada for a curva. Exemplo:

5.1.2 Bzier Em meados de 1960, Pierre Bzier desenvolvendo um projeto para os automveis da Renault francesa, baseou suas curvas em pontos de controle, inclusive para o clculo da tangente dos pontos iniciais e finais. Os softwares mais populares do mercado (Corel Draw, 3D Max, Auto CAD etc) se utilizam deste conceito para o traado de curvas.

A curva paramtrica de Bzier definida por: P t = B i J n , i t


i= 0 n

0t 1

Onde:

Bi cada um dos pontos de controle da curva Jn,i (t) so as funes de combinao (blending functions) que influenciam todos os pontos de controle. Estas funes so definidas pelos polinmios de Bernstein:

J n , i t = n t i 1 t ni i Computao Grfica e Processamento de Imagem 49

Prof Kesede R Julio Onde: n o grau dos polinmios e n! n = i i ! n i !

i =0,1, ... n

so os coeficientes binomiais. Estas funes devem satisfazer as condies: J n , i t 0 e


n

para todo i entre 0 e 1, isto ,

0 i 1

J n , i t =1,
i=0

, 0 t 1

esta ltima condio fora a curva permanecer dentro do polgono convexo (convex hull) definido por todos os pontos de controle.
B2 B1 B4 Curva de Bzier B1 B2

B0 B5

B0

B3

B4

B3

Figura 5.4: Curva de Bzier contida no polgono formado pelos seus pontos de controle

Quando movemos qualquer ponto de controle na curva de Bzier, movemos toda a curva, pois eles esto relacionados pelo polinmio de Bernstein. A esta caracterstica damos o nome de controle global. Isto pode ser prejudicial quando queremos um ajuste fino na curva. Neste caso, teremos que aumentar o nmero de pontos para um maior controle. Quando aumentamos o nmero de pontos de uma curva, deixamos sua expresso muito complexa. Uma soluo para isto a diviso em vrias curvas de menor grau. Neste caso, para que haja continuidade das curvas, devemos definir trs pontos em uma mesma reta, ou seja, a reta ter seus pontos extremos definidos pelo penltimo ponto de uma das curvas e o segundo ponto da outra, sendo o ponto do meio da reta coincidentes s duas curvas. Veja a figura abaixo.

Computao Grfica e Processamento de Imagem

50

Prof Kesede R Julio

B2 B1 B3 B4 B0 B1 Figura 5.5: Curvas de menor grau conectadas B2 B3

B0

Podemos, como exemplo considerar o traado de uma curva com trs pontos de controle: B0, B1 e B2. Substituindo os polinmios de grau 2, na expresso da curva paramtrica de Bzier, teremos: P t = B 0 J 2,0 t B 1 J 2,1 t B 2 J 2,2 t Portanto, as funes de combinao (polinmios de Bernstein) seriam: J 2,0=
J 2,1=

2! 0 t 1t 2= 1t 2 =1 2t t 2 0!2!
2! 1 t 1t 1= 2t 1t = 2t 2t2 1! 1!

J 2,2=

2! 2 t 1t 0= t 2 2!0!

assim, substituindo estes resultados na expresso da curva, teremos: P t = 1t B0 2t 1t B1t B 2 Matricialmente, teremos: P t =[ 1t
2 2 2

2t 1 t

B0 t ] B1 B2
2

[]
51

podemos tambm separar t em uma matriz de potncia, assim:

Computao Grfica e Processamento de Imagem

Prof Kesede R Julio 1 2 1 B0 1 ] 2 2 0 B1 1 0 0 B2

P t =[ t

][ ]

Resumindo, poderamos ter a seguinte representao: P t =T Onde: T o vetor potncia MB so os coeficientes da matriz de Bzier CB so os pontos de controle. MB CB

Computao Grfica e Processamento de Imagem

52

Prof Kesede R Julio

6.Fundamentos de Cor
6.1 Conceitos Bsicos
As cores nada mais so que frequncias eletromagnticas, porm no so quaisquer frequncias, uma vez que a grande maioria delas no so visveis. Na verdade, o que os olhos humanos conseguem ver uma pequena faixa do espectro de frequncia eletromagntica conhecida. Esta faixa se localiza entre as radiao infravermelha e ultravioleta. A cada espectro visvel est associada uma cor, variando entre o vermelho, passando pelo amarelo, verde, azul e chegando ao violeta. As ilustraes abaixo mostram estas variaes.

Quando temos emisso de uma fonte de luz branca (emisso de todas as frequncias do espectro visvel), como o sol, por exemplo, parte desta luz refletida e parte absorvida pelos objetos expostos. Caso a parte refletida tenha dominncia de alta frequncia no escopo visvel, dizemos que o objeto tem cor vermelha; caso a dominncia seja de baixa frequncia dizemos que o objeto de cor violeta. Podemos chamar as frequncias dominantes refletidas de cor ou de matiz da luz. As caractersticas da luz so determinadas pela sua matiz, brilho e saturao. Usamos a matiz para dar nome a cor, o brilho determinado pelo nvel de luminncia de uma cor em relao a outra cor, e a saturao o nvel de pureza de um determinada cor. As cores branca, preta e cinza tem saturao uniforme em todos os comprimentos de onda e por isso, so diferenciadas apenas pelo seu Computao Grfica e Processamento de Imagem 53

Prof Kesede R Julio brilho. A propriedade de cromaticidade determinada pela saturao e pela matiz da cor.

6.2.Sistemas de Cores Primrias


Quanto falamos de Sistema de Cor, estamos falando de cores primrias, ou seja, cores que so utilizadas para visualizar outras cores. Existem vrios sistemas de cores primrias, porm falaremos apenas de dois deles: RGB (Red, Green, Blue) e HSV (Hue, Saturation, Value). Chamamos de espao de cor a rea formada pelas cores intermedirias das cores primrias de cada sistema. 6.2.1 RGB Este sistema est baseado na teoria de Young-Helmholtz, que diz que a percepo humana para cores acontece atravs da estimulao de 3 pigmentos presentes nos cones da retina, os quais tem seus picos de sensibilidade nos seguintes comprimentos de onda: 630 nm (Red), 530 nm (Green) e 450 nm (Blue). Os monitores CRT se utilizam deste sistema. Este modelo aditivo,o que significa que a contribuio individual de cada cor deve ser somada para obtermos a cor resultante. O sistema RGB pode ser representado por um cubo unitrio, onde a posio (0,0,0) representa a cor preta, a posio (1,1,1) a cor branca e a reta diagonal traada entre estes dois pontos, os nveis de cinza.

Green=(0,1,0)

Amarelo=(1,1,0)

Ciano=(0,1,1)

branco=(1,1,1 )

preto=(0,0,0) Red=(1,0,0)

Magenta=(1,0,1) Blue=(0,0,1)

Nveis de cinza

Computao Grfica e Processamento de Imagem

54

Prof Kesede R Julio

6.2.2.HSV (Hue, Saturation, Value) Neste sistema, a cor definida pelo seu espectro combinado com a quantidade de cor branca e de cor preta adicionados a ele. A representao do sistema realizada atravs de um cone de seis lados, derivado do cubo unitrio RGB.

Luminncia
Luminncia=1 (branco)

Verde

Amarelo Vermelho

Ciano Azul

Magenta

Luminncia=0 (preto)

Hue (Matiz) Saturao

Computao Grfica e Processamento de Imagem

55

Prof Kesede R Julio

7 Processamento de Imagem
Por muitos autores a rea de Processamento de Imagem uma sub-rea da Computao Grfica, seja como for, est longe de perder a sua importncia, uma vez que o reconhecimento intuitivo das informaes pelo olho humano realizado atravs de imagens. Processar a imagem significa manipular os valores que a representam de forma a torn-la adequada aos seus objetivos. Muita manipulao pode ser feita com imagens, porm precisamos antes de tudo entender o que imagem digital.

7.1 Representao Digital de Imagem


Qualquer imagem do mundo real representada no espao contnuo, quando digitalizamos esta imagem devemos, obrigatoriamente, discretizar o espao de representao. discretizao do espao ocupado pela imagem damos o nome de Amostragem e discretizao da sua luminosidade damos o nome de Quantizao. Veremos cada um deles adiante. Uma imagem digital, portanto, pode ser representada por uma matriz de dimenses definidas, onde cada posio representa a discretizao de uma rea da imagem (pixel = picture elements) e o valor atribudo a esta posio representa a discretizao da luminosidade naquele ponto. O canto superior esquerdo da matriz ser o pixel (0,0), que contem a intensidade de cor f(0,0). A origem da imagem se dar neste pixel, ou seja, o eixo X comear neste ponto ponto e caminhar no sentido horizontal para a direita, enquanto que o eixo Y, comear neste ponto e caminhar no sentido vertical para baixo. Por exemplo, uma imagem em branco e preto (binria) pode ser discretizada atravs de uma matriz 10x10, e a representao da luminosidade em cada pixel por valores 0s (preto) e 1s (branco). (0,0) x 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0 0 1 1 0 0 0 0 1 1 0 0 1 1 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 1 1 0 0 1 1 0 0 0 0 1 1 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 y Computao Grfica e Processamento de Imagem 56

Prof Kesede R Julio

A esta matriz poderamos chamar de imagem binria, uma vez que apenas dois valores so possveis para representar a cor do pixel (1 bit de profundidade). Poderamos tambm representar uma imagem em 256 nveis de cinza (8 bits de profundidade) onde cada nmero de 0 a 255 representaria na matriz uma determinada intensidade de cinza da imagem. Por exemplo, poderamos ter uma imagem gradiente representada na matriz:

0 30 60 90

0 30 60 90

0 30 60 90

0 30 60 90

0 30 60 90

0 30 60 90

0 30 60 90

0 30 60 90

0 30 60 90

0 30 60 90

120 120 120 120 120 120 120 120 120 120 150 150 150 150 150 150 150 150 150 150 180 180 180 180 180 180 180 180 180 180 210 210 210 210 210 210 210 210 210 210 240 240 240 240 240 240 240 240 240 240 255 255 255 255 255 255 255 255 255 255 Para compreendermos melhor, vamos trabalhar com algumas imagens pequenas, criadas por ns mesmos. 7.1.1 Laboratrio 1. Crie e mostre uma matriz gradiente. - Carregue o MatLab. - Crie um vetor com os valores de 0 a 255, com passo de 1. >> im=[0:1:255]; >> im Caso voc no coloque o ponto-e-vrgula o retorno imediato. Neste caso, foi criado uma matriz 1x256. Para gerar uma transposta de im, basta adicionar um apstrofo aps o nome da matriz (im').

Computao Grfica e Processamento de Imagem

57

Prof Kesede R Julio Agora voc deve criar uma matriz 256x256, repetindo os valores deste vetor nas diversas linhas da matriz >> im=repmat(im,256,1); >> im A funo repmat() replica o primeiro argumento em cada posio da matriz definida pelos argumentos 2 e 3. Desta forma, a matriz im replicada em 256 linha, mas apenas em uma coluna. Como a matriz tem 256 colunas, logo teremos como resultado uma matriz de 256x256. Mostre a matriz >> imshow(im, []) A funo imshow mostra o primeiro argumento como uma imagem. O segundo argumento desta funo permite assumir uma escala de cinza do menor at o maior elemento do primeiro argumento. 2. Crie uma lista de -15 a 18, variando de 3 em 3. >> a=[-15:3:18] a= -15 -12 -9 -6 -3 0 3 6 9 12 15 18

3. Modifique o vetor acima de forma que se torne uma matriz. Trabalhe com ordens diferentes e faa comentrios a respeito. >> a34=reshape(a,3,4) a34 = -15 -12 -9 a43 = -15 -12 -9 -6 -3 0 3 6 9 12 15 18 -6 -3 0 3 6 9 12 15 18

>> a43=reshape(a,4,3)

>> a26=reshape(a,2,6)

Computao Grfica e Processamento de Imagem

58

Prof Kesede R Julio a26 = -15 -12 -9 -6 -3 0 3 6 9 12 15 18

4. Mostre, como imagem, cada uma das matriz geradas. Caso cada valor aparea como um nico pixel, utilize o parmetro 'notruesize' na funo imshow 7.1.2 Relatrios 1) Crie e mostre duas imagens listradas (branco e preto), com tamanho mnimo de 50x50. Na primeira imagem, crie listras verticais e na segunda horizontais. Faa comentrios explicativos 2) Crie e mostre duas imagens xadrez (branco e preto), com tamanho mnimo de 50x50. Na primeira imagem, crie a primeira posio como preta e na segunda imagem como branca. Faa comentrios explicativos

7.2 Quantizao
Como foi citado anteriormente temos em cada pixel o valor da luminosidade. A variao dos valores deste atributo depende da profundidade de cor da imagem. No caso de uma imagem binria, teramos uma profundidade de cor de 1 bit apenas. A tabela abaixo mostra a relao entre o nmero de cores e a quantidade de bits de profundidade de cor da imagem. Profundidade (bits) 1 2 3 4 5 6 7 8 Nr de cores 2 4 8 16 32 64 128 256

Considerando que o espao onde representamos a imagem o plano (x, y), podemos dizer que a intensidade de cor varia no eixo z (f(x,y)). Quando Computao Grfica e Processamento de Imagem 59

Prof Kesede R Julio quantizamos uma imagem discretizamos sua profundidade de cor. Isto significa que uma imagem no espao contnuo de cor pode ser representada no espao discreto de 256 cores (8 bits), que pode ser representada no espao de cor de 128 (7 bits), e assim por diante. A consequncia disso, ser a reduo da representao das cores da imagem, pois teremos menos bits para representlas, consequentemente, perda de detalhes. Na prtica, existem vrios mtodos de quantizao de imagens, uns mais, outros menos eficientes, dependendo da distribuio das cores na imagem. Mostraremos uma dessas formas. Podemos fazer a relao do valor do pixel da imagem com o nr de cores que queremos, isto seria um processo de proporo. Assim: valor do pixel atual valor do pixel quantizado = nr de cores atual nr de cores desejada Atravs da funo size() podemos identificar se estamos tratando com uma imagem RGB (3 camadas) ou nvel de cinza (1 camada). >> f=imread('lenina.ppm'); >> size(f) ans = 256 256 3

Para saber algumas informaes a respeito da imagem, inclusive profundidade de cor, podemos usar a funo imfinfo() com o nome do arquivo da imagem como parmetro. >> imfinfo('lenina.ppm') ans = Filename: 'lenina.ppm' FileModDate: '01-Nov-2005 12:22:16' FileSize: 196646 Format: 'PPM' FormatVersion: 'P6' Width: 256 Computao Grfica e Processamento de Imagem 60

Prof Kesede R Julio Height: 256 BitDepth: 24 ColorType: 'truecolor' FormatSignature: 'P6' Encoding: 'rawbits' MaxValue: 255 ImageDataOffset: 38 Neste caso temos uma imagem de 3 camadas (frames) de 8 bits de profundidade cada uma. Neste laboratrio o arquivo de imagem RGB, apenas visualizado como nvel de cinza. Logo, o valor do mesmo pixel em cada uma das camadas o mesmo. Por isso, eliminamos as camadas 2 e 3 (f(:,:,1)) afim de otimizar o algoritmo. 7.2.1 Laboratrio Em matlab, seria: >> f=imread('lenina.ppm'); >> imshow(f(:,:,1)); >> f64=floor(double(f(:,:,1))*64/256); >> imshow(f64,[]); >> f8=floor(double(f(:,:,1))*8/256); >> imshow(f8,[]); >> f2=floor(double(f(:,:,1))*2/256); >> imshow(f2,[]);

Computao Grfica e Processamento de Imagem

61

Prof Kesede R Julio

imagem Original

Imagem quantizada para 64 cores (6 bits)

Imagem quantizada para 8 cores (3 bits)

Imagem quantizada para 2 cores (1 bit)

Note que na imagem de 6 bits no percebemos os nveis de quantizao, na imagem de 3 bits os nveis so percebidos e na imagem de 1 bit a percepo das bordas de quantizao to grande que perdemos a visualizao da imagem. Ou seja, este mtodo de quantizao no eficiente para nveis muito baixos de quantizao. Afim de minimizar o problema, foi proposto um mtodo chamado Dithering (ou algoritmo de meio-tom). O mtodo toma por base que a percepo de detalhes em uma imagem depende, basicamente, de 3 coisas: distncia da imagem, densidade de resoluo da imagem e abertura do olho. A indstria grfica se utiliza deste mtodo para fabricao de jornais e revistas. O mtodo consiste em aglomerar, ordenadamente ou no, os pixels de forma a gerar iluses de meio-tom ao olho humano. Quanto mais aglomerado os pixels pretos, maior a iluso de intensidade mais escura, e portanto quanto menor a densidade dos pontos, maior a iluso de intensidade mais clara. Exemplo:

Computao Grfica e Processamento de Imagem

62

Prof Kesede R Julio

Vamos criar uma imagem binria da lenina usando dithering. >> fd=dither(f(:,:,1)); >> imshow(fd);

Podemos notar que, apesar de termos apenas duas cores, ganhamos muito mais detalhes visuais na imagem. Compare esta imagem com a quantizao de duas cores (imagem binria). 7.2.2 Relatrios 7.2.2.1 Faa os mesmos testes do laboratrio anterior, agora com uma foto sua. Os testes devem contemplar todos os nveis de quantizao de 8 a 1 bit, assim como a aplicao do dithering. Verifique em qual transio se d a perceptividade dos nveis de quantizao. Faa comentrios explicativos.

Computao Grfica e Processamento de Imagem

63

Prof Kesede R Julio

7.3 Amostragem
Alm do aumento ou diminuio dos nveis de cinza da imagem, a sua resoluo, como j foi citado, passa pela amostragem, ou seja, quantidade de pontos que representam a imagem.Se temos uma imagem de 256x256 de 8 bits (256 nveis de cinza), nem percebemos os efeitos da amostragem, porm ao diminuirmos a quantidade de pontos para 128x128, ou 64x64, comeamos a sentir falta de pontos que representem pixels intermedirios entre dois pontos. Dependendo da aplicao da visualizao da imagem, isto pode ser conveniente, pois quanto menor a representao, menor o espao ocupado e melhor performance dos algoritmos que sero executados sobre esta imagem. A funo imresize(), permite-nos verificar este efeito de amostragem. 7.3.2 Laboratrio Leia a imagem original >> f=imread('lenina.ppm'); Mostre a imagem >> image(f); Faa a amostragem da imagem original para 128x128 >> f128x128=imresize(f,[128 128]); Mostre a imagem >> image(f128x128); Faa a amostragem da imagem original para 64x64 >> f64x64=imresize(f,[64 64]); Mostre a imagem >> image(f64x64); Faa a amostragem da imagem original para 32x32 >> f32x32=imresize(f,[32 32]); Mostre a imagem >> image(f32x32);

Computao Grfica e Processamento de Imagem

64

Prof Kesede R Julio

Imagem Original (256x256)

Imagem amostrada (128x128)

Imagem amostrada (64x64)

Imagem amostrada (32x32)

Pronto! Perceba que nas imagens amostradas existem bordas amostrais evidentes. 7.3.2 Relatrios 7.3.2.1 Faa os mesmos testes do laboratrio anterior, agora com uma foto sua. Os testes devem contemplar at 4 nveis do tamanho da imagem. Verifique em qual nvel de amostragem se d a perceptividade das bordas. Faa comentrios explicativos

Computao Grfica e Processamento de Imagem

65

Prof Kesede R Julio

7.4.Histograma
Histograma o grfico das intensidades de uma imagem. Ou seja, atravs dele podemos verificar como se distribui a intensidade de cada pixel na imagem. Cada ponto deste grfico representa a quantidade de pixels de uma determinada intensidade, portanto, o eixo x deste grfico indica a variao de intensidade e o eixo y indica a quantidade de pixels. Atravs do histograma da imagem podemos decidir sobre vrias operaes a serem realizadas e como realizar estas operaes. Um exemplo clssico a melhora de contraste da imagem atravs da equalizao do seu histograma. Equalizar um histograma significa distribuir todas as intensidades dos pixels da imagem entre os valores de intensidade mximo e mnimo da prpria imagem. Assim, temos:

Imagem original

Histograma da imagem original

Imagem equalizada

Histograma da imagem equalizada

Computao Grfica e Processamento de Imagem

66

Prof Kesede R Julio 7.4.1 Laboratrio Leia e mostre a imagem original. >> f=imread('lenina.ppm'); >> imshow(f); Extraia o histograma da imagem e guarde em outra varivel. Esta varivel ser um vetor unidimensional. Mostre este vetor afim de certificar-se disto. >> figure, imhist(f(:,:,1)) Note que os valores de intensidade da imagem no esto distribudos de maneira uniforme, ou seja, existem mais intensidades escuras que claras. Agora, melhore o contraste desta imagem atravs da equalizao de seu histograma. >> fhe=histeq(f(:,:,1)); >> figure, imshow(fhe); >> figure, imhist(fhe); Note que agora as intensidades dos pixels esto melhores distribudas no range de 0 a 255 e a imagem est mais clara, deixando os detalhes da imagem mais ntidos 7.4.2 Relatrios Refaa o laboratrio, agora utilizando sua foto. O que voc pode concluir pelo histograma? A equalizao melhora ou no a visualizao de detalhes? Faa comentrios explicativos.

7.5.Thresholding
O thresholding (limiarizao) a forma mais simples de segmentao de uma imagem. Claro que nem sempre suficiente, porm bastante utilizada quando queremos binarizar uma imagem, afim de separar uma determinada rea de interesse do restante da imagem. Os valores de intensidade que estiverem acima do limiar tornam-se brancos e os que estiverem abaixo pretos. O valor de thresholding deve ser decidido de acordo com o nosso interesse, nem sempre a mdia, por exemplo, um bom thresholding. Existem vrias tcnicas para decidir o seu valor, no entanto, faremos apenas alguns testes para entender o seu significado.

Computao Grfica e Processamento de Imagem

67

Prof Kesede R Julio 7.5.1 Laboratrio Leia e mostre a imagem >>> f=imread('lenina.ppm'); >>> imshow(f) Podemos converter a imagem de rgb para nvel de cinza usando a funo rgb2gray(), assim como extrair a mdia das intensidades atravs da funo mean2(), que no caso da lenina 61. Aplique o thresholding usando a mdia e mostre a imagem. >> fg=rgb2gray(f); >> mean2(fg) >> f61=fg>61; >> imshow(f61) Agora, aplicamos um limiar de 30. >>> f30=fg>30; >>> imshow(f30) E agora de 90. >>> f90=fg>90; >>> imshow(f90)

Imagem c/ Imagem c/ Imagem c/ trhesholding de 30 trhesholding de 61 trhesholding de 90 (mdia) Perceba que a imagem torna-se mais escura a medida que aumentamos o thresholding. O melhor caso, pelo menos em termos de resgate das

Imagem original

Computao Grfica e Processamento de Imagem

68

Prof Kesede R Julio caractersticas originais da imagem, o valor mdio, porm as vezes desejamos destacar uma determinada particularidade, mais escura ou mais clara. Podemos tambm usar vrios valores de thresholding em uma nica imagem, caso queiramos separar objetos de luminosidade diferentes. Nisto o histograma da imagem pode ser uma boa ferramenta de anlise para sabermos como esto distribudas as intensidades dos objetos na imagem. 7.5.2 Laboratrio Primeiramente lemos a imagem do disco, guardamos na varivel f e visualizamos a imagem. >> f=imread('keyb.pgm'); >> imshow(f) Convertemos a imagem para nvel de cinza. >> f=rgb2gray(f); Depois disto, extramos o histograma da imagem. >> figure,imhist(f); podemos observar uma concentrao de valores em torno dos intervalos 20-50 e 150-180 e tambm em torno do 255. Com isso, podemos entender que se passarmos thresholding por estes valores, partes significativas da imagem poder ser destacada. >> teclas=f>20 & f<50; >> imshow(teclas) claro que com alguns ajustes podemos melhorar aquilo que queremos destacar. >> fundo=f>150 & f<180; >> imshow(fundo) at mesmo intuitivamente podemos perceber que os valores 255 so os nmeros das teclas. >> nr=f==255; >> imshow(nr)

Computao Grfica e Processamento de Imagem

69

Prof Kesede R Julio

Imagem original Histograma Im. Orig

teclas

fundo

nmeros

7.5.2 Relatrio Escolha uma imagem com, pelo menos, dois objetos (gros de arroz e de milho, por exemplo) separveis pelo mtodo visto no laboratrio 7.5.2. Refaa o procedimento do laboratrio (usando o histograma para separar os objetos), agora considerando esta imagem. Faa comentrios explicativos sobre cada operao.

5.6 Filtros
A idia de filtro (mscara, template etc) executar uma operao sobre uma imagem afim de modific-la. Esta operao realizada utilizando-se a vizinhana de cada pixel da imagem, assim como uma matriz (mscara, geralmente 3x3) com um pixel central determinado, o qual ser a referncia para a operao de cada pixel da imagem. Os valores desta matriz que definir a imagem resultante. A vizinhana de um pixel depende da abordagem da operao. Podemos ter vizinhana 8 ou 4. Estes nmeros definem a quantidade de pixels que sero considerados na operao. Exemplo: Imagem 10 23 1 14 35 2 50 20 5 2 25 24 9 11 32 7 Filtro 1 2 -1 1 2 -1 1 2 -1

Computao Grfica e Processamento de Imagem

70

Prof Kesede R Julio A regra para o clculo do pixel central sempre a diviso da quantidade de colunas por 2 e a diviso da quantidade de linhas por 2, arredondando para cima as casas decimais. Logo, em um filtro de 3x3 teremos a posio (2,2) como centro, em um de 4x4, continuamos com a posio (2,2) como centro, e assim por diante. O fato que normalmente usamos uma matriz quadrada de ordem mpar (3x3, 5x5, 7x7 etc) para usarmos como filtro. Uma vez que o pixel central do filtro deve ser posicionado sobre cada pixel da imagem, a imagem ganha um contorno de valor zero (zero-padding) para que os pixels da borda da imagem possam ser processados. Assim, a imagem processada ser: 0 0 0 0 0 0

0 10 23 1 14 0 0 35 2 50 20 0 0 5 0 0 2 25 24 0 0 0 0 0 0 9 11 32 7 0

A rea cinza representa o filtro com seu centro localizado no primeiro pixel da imagem. Dessa forma, a combinao linear a ser processada seria: im(1,1)=1.0+2.0+(-1).0+1.0+2.10+(-1).23+1.0+2.35+(-1).2=65 Isto ocorrer em cada posio da imagem, pois o filtro percorre seu centro sobre cada pixel. Em uma imagem real, a imagem resultante pode ganhar um contorno indesejvel que pode ser contornado atravs do parmetro 'replicate' da funo imfilter do MatLab. Este parmetro gera o contorno atravs da replicao dos valores de borda da prpria imagem. 10 10 23 1 14 14 10 10 23 1 14 14 35 35 2 50 20 20 5 9 9 5 2 25 24 24 7 7 9 11 32 7 9 11 32 7

Atravs dos filtros podemos suavizar a imagem, eliminar rudos, melhorar contraste, detectar bordas ou mesmo realizar efeitos artsticos. Os filtros podem ser classificados em passa-alta, passa-baixa e passa-faixa. Os filtros passa-alta permitem que altas frequncias (mudana brusca em valores de pixels prximos) permaneam na imagem, eliminado as baixas frequncias.

Computao Grfica e Processamento de Imagem

71

Prof Kesede R Julio Os filtros passa-baixa permitem que baixas frequncias (pequena ou nenhuma mudana em valores de pixels prximos) permaneam na imagem, eliminado as altas frequncias. Os filtros passa-faixa permitem que faixas de frequncias permaneam na imagem, eliminado as que estiverem fora da faixa. Este tipo de filtro tem seu uso bem especfico. Cada tipo de filtragem requer mudanas dos valores e tamanho dos filtros. Mostramos abaixo alguns destes filtros. Filtro de Mdia (passa-baixa) Este tipo de filtro construdo atribuindo-se 1 para todos os coeficientes da mscara e dividindo-se cada um deles pelo total de coeficientes. Quanto maior a mscara maior a reduo do contraste e a perda da definio da imagem. Por exemplo, em uma mscara 3x3, seria: 1 1 1 1 h= . 1 1 1 9 1 1 1

[ ]

Filtro Gaussiano (passa-baixa) Este filtro uma aproximao digital da funo gaussiana. muito utilizado para reduzir rudos na imagem, pois preserva mais os contornos que o filtro de mdia. Um exemplo de um filtro gaussiano seria:

1 4 7 4 1 4 16 26 16 4 1 h= . 7 26 41 26 7 273 4 16 26 16 4 1 4 7 4 1 Filtro Sobel (passa-alta)

]
72

A aplicao deste filtro permite realar as bordas da imagem atravs de 2 filtros, um horizontal, outro vertical. O objetivo disto destacar altas frequncias nos dois sentidos. Os dois filtros, so: 1 2 1 hh = 0 0 0 1 2 1

]
Computao Grfica e Processamento de Imagem

Prof Kesede R Julio 1 0 1 hv = 2 0 2 1 0 1

Alm destes, diversos filtros poderiam ser construdos para aplicaes diferentes. O Matlab, atravs da funo fspecial(<filtro>), permite a construo de vrios deles: Filtro 'gaussian' 'sobel' 'prewitt' 'laplacian' 'log' 'average' 'unsharp' Descrio Gaussiano Sobel com enfase horizontal Prewitt com enfase horizontal Laplaciano Laplaciano do filtro Gaussiano Mdia Unsharp (aumento de contraste)

5.6.1 Laboratrio Vamos trabalhar primeiro com imagens pequenas para verificarmos melhor os efeitos do filtro nos valores da imagem. A funo magic cria uma matriz quadrada de nmeros aleatorios. Usaremos esta funo para simularmos nossa imagem. >> im=magic(4) Criamos agora um filtro h com valor negativo. >> h=[-1 0 1] Aplicamos o filtro a imagem. >> imf=imfilter(im,h) Para que voc confira seu entendimento, faa os clculos na mo de pelo menos um dos pixels e valide seus clculos com o resultado do imfilter. Em uma imagem real o tipo dos valores so considerados de forma que os valores negativos se tornem zero e os valores acima do range do tipo seja truncado. Por exemplo, se a imagem uint8 e os resultados forem fracionrios, os valores decimais sero desconsiderados. Leia a imagem do arquivo e mostre-a. >> f=imread('cookies.pgm'); >> imshow(f) Crie um filtro de mdia. Computao Grfica e Processamento de Imagem 73

Prof Kesede R Julio >> h=ones(3)/9 Aplique o filtro sobre a imagem >>fh=imfilter(f,h) Mostre as duas imagens em um mesmo figure. >> subplot(1,2,1),imshow(f),title('Imagem Original'),... subplot(1,2,2),imshow(fh),title('Imagem filtrada')

Im a g e m O r i g i n a l

Im a g e m fi l t r a d a

Para processar imagens coloridas (rgb) basta usar a mesma metodologia. Neste caso, o filtro passado em cada canal de cor.

5.6.2 Relatrios 1. Faa laboratrio acima (filtro de mdia) com uma imagem nvel de cinza (2D) e uma colorida (3D). 2. Escolha uma imagem com rudo e detecte suas bordas. Aplique o filtro Gaussiano e em seguida o filtro Sobel ou outro que melhor solucione seu problema.

5.7 Morfologia Matemtica


A morfologia pode ser aplicada para realce de imagens, esqueletizao, segmentao, filtragem etc. As operaes morfolgicas consistem na relao das imagens com formas menores e especificamente definidas chamadas elemento estruturante, atravs da teoria dos conjuntos. Temos duas operaes morfolgicas principais: dilatao e eroso. A dilatao (Unio) acrescenta uma rea na imagem atravs de uma forma padro (Elemento Estruturante). A eroso Computao Grfica e Processamento de Imagem 74

Prof Kesede R Julio (Interseco) exclui da imagem formas que no atendam a um determinado padro (Elemento Estruturante). Estas operaes podem ser realizadas sobre imagens binrias, tons de cinza ou coloridas, porm em cada uma delas o significado ser diferente. Veremos apenas operaes morfolgicas em imagens binrias e tons de cinza. 5.7.1 Dilatao A dilatao sempre aumenta o tamanho da imagem, pois a operao realizada de Unio. Abaixo ser mostrado o processo de dilatao binria. B = {(0,0), (1,0)}

A marcao do primeiro pixel na imagem denota a origem da imagem e a marcao do pixel no Elemento Estruturante denota o seu centro. 5.7.2 Eroso A eroso sempre diminui o tamanho da imagem, pois a operao realizada de interseco. Abaixo ser mostrado alguns exemplos de eroso.

Computao Grfica e Processamento de Imagem

75

Prof Kesede R Julio

O conjunto de pontos resultantes da eroso a o conjunto de pontos que interceptam totalmente A e B. 5.7.3 Abertura Uma Abertura Morfolgica uma eroso seguida imediatamente de uma dilatao com mesmo elemento estruturante. Ela tende a abrir pequenos espaos vazios entre objetos da imagem muito prximos. Tambm pode ser usada para eliminar rudos na imagem. Veja o exemplo abaixo.

5.7.4 Fechamento Um Fechamento Morfolgico uma dilatao seguida imediatamente de uma eroso com mesmo elemento estruturante. Ele tende a eliminar buracos na imagem, ou seja, fecha espaos vazios. Tambm pode ser usada para eliminar rudos na imagem. Veja o exemplo abaixo.

Computao Grfica e Processamento de Imagem

76

Prof Kesede R Julio

5.7.5 Morfologia em Tons de Cinza A idia aqui se modifica um pouco devido aos valores da imagem. O que Unio, passa a ser o valor mximo. O que Interseco passa a ser o valor mnimo. Abaixo esto algumas imagens nvel de cinza onde foram aplicadas cada operao morfolgica vista.

5.7.6 Laboratrio Vamos agora praticar o uso das ferramentas morfolgicas. Comecemos pela dilatao. Leia a imagem text.png. >> textobw = imread('text.png'); Agora crie um EE de linha vertical (90) de tamanho de 22 pixels. >> ee = strel('line',11,90); Use o EE criado para dilatar a imagem e mostre a imagem original e a dilatada. >> textobw2 = imdilate(textobw,ee); >> imshow(textobw), title('Original') >> figure, imshow(textobw2), title('Dilatado')

Computao Grfica e Processamento de Imagem

77

Prof Kesede R Julio


O r ig in a l D ila t a d o

Faa uma dilatao com a imagem cameraman.tif. Leia a imagem. >> fotografo = imread('cameraman.tif'); Crie um EE de uma bola de raio 5. >> ee = strel('ball',5,5); Faa a dilatao da imagem usando o EE criado. >> fotografo2 = imdilate(fotografo,ee); Mostre as duas imagens (original e dilatada). >> imshow(fotografo), title('Original') >> figure, imshow(fotografo2), title('Dilatada')
O rig in a l

D ila t a d a

Perceba que a imagem ficou mais claro, pois cada pixel da imagem visitado pelo centro do elemento estruturante, assumiu o maior valor de sua vizinhana (considerada pela forma do EE). Computao Grfica e Processamento de Imagem 78

Prof Kesede R Julio

Agora faremos uma eroso em uma imagem binria e depois em uma tom de cinza. Leia a imagem binria circles.png e mostre-a. >> circulosBW = imread('circles.png'); >> imview(circulosBW) Perceba que os crculos esto sobrepostos. A funo imview() uma outra forma de mostrar imagens (experimente as ferramentas da janela). Vamos agora construir o Elemento Estruturante atravs da funo strel(). Neste caso, construdo um disco de 11 pixels de raio. (Acesse o help do Matlab para verificar as diversas possibilidades de construo do EE atravs do strel()). Voc no precisa, necessariamente, usar o strel(). Voc pode construir seu EE atravs de uma matriz qualquer. ee = strel('disk',11); Vamos agora, erodir a image e mostr-las (original e erodida) para comparao. circErodBW = imerode(circulosBW,ee); imview(circulosBW), imview(circErodBW) Perceba que agora temos os crculos separados, o que facilita muito uma eventual anlise destes objetos.

Imagem (binria) original

Imagem Erodida

Experimente agora erodir uma imagem nvel de cinza utilizando o script abaixo: fotografo= imread('cameraman.tif'); ee = strel('ball',5,5); % constri uma bola de raio 5

Computao Grfica e Processamento de Imagem

79

Prof Kesede R Julio fotografo2 = imerode(fotografo,ee); imshow(fotografo), title('Original') figure, imshow(fotografo2), title('Erodida')
O r ig in a l

E ro d id a

Este script pode ser colocado dentro de arquivo .m e executado a partir do prompt do matlab. Faa isto. Perceba que a imagem ficou mais escura, pois cada pixel da imagem visitado pelo centro do elemento estruturante, assumiu o menor valor de sua vizinhana (considerada pela forma do EE).

5.8 Estudo de Casos


Aqui estaremos listando algumas aplicaes prticas de processamento de imagens. A idia que voc possa utilizar as ferramentas aqui descritas para as suas prprias aplicaes. 5.8.1 Anlise de gros de arroz Primeiramente vamos ler a imagem do disco e mostr-la em tela. Atravs do seu tamanho (size), podemos constatar ser uma imagem nvel de cinza. >> arroz=imread('rice.png'); >> imshow(arroz) >> size(arroz) Devido ao fundo da imagem ser irregular, podemos aplicar uma subtrao do fundo afim de equaliz-lo. Primeiramente, criaremos uma imagem sem os gros de arroz atravs de uma abertura morfolgica. >> fundo = imopen(arroz,strel('disk',15)); >> figure, imshow(fundo) Computao Grfica e Processamento de Imagem 80

Prof Kesede R Julio

A funo strel(), neste caso, cria uma imagem em forma de um disco de raio de 15 pixels. Este disco deve ser maior que os gros, de tal forma que no consiga ser colocado totalmente dentro de nenhum deles. Desta forma removemos os gros de arroz conforme mostra a imagem. Agora podemos subtrair o fundo da imagem original, ficando assim os gros de arroz sobre uma superfcie totalmente preta. >> arroz2 = imsubtract(arroz,fundo); >> figure, imshow(arroz2) Podemos ento melhorar o contraste desta imagem, usando a funo imadjust(). >> arroz3 = imadjust(arroz2); >> figure, imshow(arroz3) Apesar de estar bem destacado o que queremos (gros de arroz), ainda temos uma imagem nvel de cinza. Podemos agora binarizar esta imagem usando thresholding. A funo graythresh() calcula um valor apropriado para fazer a converso de nvel de cinza para binrio. A funo im2bw() binariza uma imagem nvel de cinza considerando o valor do limiar. >> limiar = graythresh(arroz3); >> arrozbw = im2bw(arroz3,limiar); >> figure, imshow(arrozbw) Na imagem binarizada podemos aplicar a funo bwlabel() que contar quantos componentes existem na imagem (numObjects), alm de rotular numericamente (arrozRot), cada um dos componentes. Estes resultados dependero de alguns fatores, como: 1) tamanho dos componentes; 2) componentes que se tocam formando um nico componente; 3) tipo de conectividade, neste caso, 4. >> [arrozRot,numObjetos] = bwlabel(arrozbw,4); >> numObjetos numObjetos = 101 Isto mostra que temos 101 gros de arroz na imagem. A imagem pode ser vista atravs da visualizao de cores sintticas para cada componente usando label2rgb(). >> pseudo_color = label2rgb(arrozRot, @spring, 'c', 'shuffle'); >> imshow(pseudo_color);

Computao Grfica e Processamento de Imagem

81

Prof Kesede R Julio Abaixo podemos ver as imagens geradas pela funo imshow() resultante de cada uma das operaes vistas at aqui.

Imagem original (imread())

Remoo dos gros de Imagem com fundo arroz (imopen()) regular (imsubtract())

Melhora de contraste (imadjust())

Imagem binarizada (imbw())

Imagem colorida sinteticamente (label2rgb())

Computao Grfica e Processamento de Imagem

82

Prof Kesede R Julio

Alm de contar componentes, podemos tambm extrair algumas informaes destes componentes, atravs da funo regionprops(), que retornar em uma estrutura, a rea (em pixels), o centro de massa e o retngulo que envolve (bounding box) cada um dos componentes. >> arrozDados = regionprops(arrozRot,'basic') arrozDados = 101x1 struct array with fields: Area Centroid BoundingBox Assim, para sabermos o valor da rea do 10 componente da imagem, seu centroid e o retngulo que o envolve, usamos: >>arrozDados(10).Area ans = 176 >> arrozDados(10).BoundingBox ans = 9.5000 86.5000 25.0000 17.0000 >> arrozDados(10).Centroid ans = 21.3693 95.9716 Dado o valor da rea de cada componente (arrozDados.Area), algumas questes estatsticos podem ser levantadas, como:

Computao Grfica e Processamento de Imagem

83

Prof Kesede R Julio Qual o tamanho do maior gro? >> max([arrozdados.Area]) ans = 404 Qual o gro de maior tamanho? >> maiorgrao = find([graindata.Area]==404) maiorgrao = 59 Qual a mdia dos tamanhos dos gros? >> mean([graindata.Area]) ans = 175.0396

5.9 Reconhecimento de Padres


O reconhecimento de Padres de imagem sugere a identificao de padres ou objetos dentro de uma determinada imagem. As tcnicas envolvidas permitem a classificao dos objetos determinando sua separabilidade. Um sistema de RP deveria ser capaz de extrair informaes a partir de um conjunto de informaes irrelevantes, aprender por exemplos e generalizar o conhecimento para outros contextos, inferir informaes a partir de informaes incompletas. Sabemos que nossa inteligncia tem esta capacidade, porm para um computador a tarefa fica mais difcil. Estas dificuldades acabam por gerar sistema super-especialistas. Podemos dividir a tarefa de identificao em processamento de trs nveis: baixo, mdio e alto. No nvel baixo temos a captura da imagem (fotografia, escaneamento, imagem por satlite etc) atravs de um sensor e um pr-processamento na imagem (contraste, rudo, ajustes etc) para melhorar a performance do sistema. No nvel mdio podemos aplicar processos de separao das reas de interesse (segmentao), assim como determinar sua representao (vetor, rvore etc). Esta fase pode exigir alguma inteligncia do sistema, como por exemplo, encontrar picos, texturas etc. J em alto nvel temos efetivamente o processo de reconhecimento atravs de comparao com padres pr-estabelecidos ou no (sistemas autmatos). Aqui

Computao Grfica e Processamento de Imagem

84

Prof Kesede R Julio os resultados so interpretados e mostrados ao usurio que poder aplicar uma validao para garantir a implantao ou no do sistema. A inteligncia do sistema nesta fase fortemente exigida, uma vez que quanto menos aplicada, menos automtico ser o reconhecimento. A figura abaixo mostra uma estrutura bsica de RP.
Nvel Mdio

Segmentao

Representao

Pr-processamento Base de conhecimento Problema Captura da imagem Reconhecimento Resultado

Nvel Baixo

Nvel Alto

Computao Grfica e Processamento de Imagem

85

Você também pode gostar