Trabalho de Imagem

10
Trabalho de Imagem Felipe Baldino Moreira Prof: Marcelo Gatass. Disciplina Fundamentos de Computação Gráfica

description

Trabalho de Imagem. Felipe Baldino Moreira Prof : Marcelo Gatass . Disciplina Fundamentos de Computação Gráfica. Comandos para utilizar o programa. Esc – Sai ‘o’ - Recarrega a imagem original ‘b’ – Converte a imagem em Puro Preto e Branco 'g‘ – Converte a Imagem em Tons de Cinza. - PowerPoint PPT Presentation

Transcript of Trabalho de Imagem

Page 1: Trabalho de Imagem

Trabalho de Imagem

Felipe Baldino MoreiraProf: Marcelo Gatass.

Disciplina Fundamentos de Computação Gráfica

Page 2: Trabalho de Imagem

Comandos para utilizar o programa

• Esc – Sai • ‘o’ - Recarrega a imagem original • ‘b’ – Converte a imagem em Puro Preto e

Branco• 'g‘ – Converte a Imagem em Tons de Cinza.• 'G‘ – Aplica o Filtro de Gauss• 's‘ – Aplica o Filtro de Sobel• 'i‘ – Inverte as cores da Imagem

Page 3: Trabalho de Imagem

Converte a imagem em Puro Preto e Branco

• A imagem é decomposta em tons de cinza e então, caso o pixel tenha a cor maior que um threshold (que no caso foi utilizado 0,25) o pixel fica Branco e Preto caso contrário.

Segue o Algoritmo aplicado a cada pixel: r=r*0.299; g=g*0.587; b=b*0.144; r=r+g+b; if (r<0.25) r=0.0; else r = 1.0;g=r;b=r;

Page 4: Trabalho de Imagem

Inverte as cores da Imagem

• A imagem tem suas cores invertidas como se fosse um negativo.

• Cada cor que compõe o pixel tem seu valor subtraído de um.

Segue o Algoritmo aplicado a cada pixel: r=1-r; g=1-g; b=1-b;

Page 5: Trabalho de Imagem

Converte a imagem Tons de Cinza• É feita uma correlação entre as cores, de modo que elas

somadas representem o tom de cinza esperado para o pixel.

Neste caso, o vermelho (r) é multiplicado por 0.299, o Verde (g) por 0.587 e o azul (b) por 0.144.

r=r*0.299; g=g*0.587; b=b*0.144; r=r+g+b;Após esta correção não é possível mais se visualizar as cores, e todas

parecem como tons de cinza.

Page 6: Trabalho de Imagem

Converte a imagem Tons de Cinza• É feita uma correlação entre as cores, de modo que elas

somadas representem o tom de cinza esperado para o pixel.

Neste caso, o vermelho (r) é multiplicado por 0.299, o Verde (g) por 0.587 e o azul (b) por 0.144.

r=r*0.299; g=g*0.587; b=b*0.144; r=r+g+b;Após esta correção não é possível mais se visualizar as cores, e todas

parecem como tons de cinza.

Page 7: Trabalho de Imagem

Filtro de Gauss

• É feita aplicação da matriz gaussinana na imagem e seu resultado é que a imagem fica borrada. Segue a definição da Matriz gaussiana :

#define det 4.0float gaussianfilter[3][3]={(1.0/det,2.0/det,1.0/det),

(2.0/det,4.0/det,2.0/det),(1.0/det,2.0/det,1.0/det)};

Page 8: Trabalho de Imagem

Void applygaussian(void) int i,j,ii,jj; double r,rr,g,gg,bb,b,gbuffer[3]; RgbImage Imagem_final(filename); unsigned char *img; img= (unsigned char *) Imagemoriginal->ImageData(); for(i=1;i<Imagemoriginal->GetNumRows()-1;i++) { for(j=1;j<Imagemoriginal->GetNumCols()-1;j++) {

gbuffer[0]=0.0f; gbuffer[1]=0.0f; gbuffer[2]=0.0f; for (ii=0;ii<3;ii++) { for(jj=0;jj<3;jj++) {

Imagemoriginal->GetRgbPixel(i+ii-1,j+jj-1,&rr,&gg,&bb); gbuffer[0]=gbuffer[0]+gaussianfilter[ii][jj]*rr; gbuffer[1]=gbuffer[1]+gaussianfilter[ii][jj]*gg; gbuffer[2]=gbuffer[2]+gaussianfilter[ii][jj]*bb; } } Imagem_final.SetRgbPixelf(i,j,gbuffer[0],gbuffer[1],gbuffer[2]); } }

Page 9: Trabalho de Imagem

Filtro de Sobel

• É um filtro utilizado para detectar contornos. • Este filtro ressalta os contornos das imagens. • Utiliza duas matrizes, uma para o eixo X e

outra para o eixo y listadas abaixo.

float Gx[3][3]={(1.0,0.0,-1.0),(2,0,-2),(1.0,0,-1.0)},Gy[3][3]={(1.0,2.0,1.0),(0,0,0),(-1.0,-2.0,-1.0)};

Page 10: Trabalho de Imagem

void applysobel(void){ int i,j,ii,jj; double r,rr,g,gg,bb,b,gbufferx[3],gbuffery[3],GX,GY; RgbImage Imagem_final(filename); unsigned char *img; img= (unsigned char *) Imagemoriginal-

>ImageData(); for(i=1;i<Imagemoriginal->GetNumRows()-1;i++) { for(j=1;j<Imagemoriginal->GetNumCols()-1;j++) {gbufferx[0]=0.0f; gbufferx[1]=0.0f; gbufferx[2]=0.0f; gbuffery[0]=0.0f; gbuffery[1]=0.0f; gbuffery[2]=0.0f; for (ii=0;ii<3;ii++) { for(jj=0;jj<3;jj++)

{ Imagemoriginal->GetRgbPixel(i+ii-1,j+jj-1,&rr,&gg,&bb); gbufferx[0]=gbufferx[0]+Gx[ii][jj]*rr; gbufferx[1]=gbufferx[1]+Gx[ii][jj]*gg;

gbufferx[2]=gbufferx[2]+Gx[ii][jj]*bb; gbuffery[0]=gbuffery[0]+Gy[ii][jj]*rr; gbuffery[1]=gbuffery[1]+Gy[ii][jj]*gg;

gbuffery[2]=gbuffery[2]+Gy[ii][jj]*bb; } for(jj=0;jj<3;jj++) { gbufferx[jj]=gbufferx[jj]*gbufferx[jj]; gbuffery[jj]=gbuffery[jj]*gbuffery[jj]; }

} Imagem_final.SetRgbPixelf(i,j,sqrt(gbufferx[0]-gbuffery[0]),sqrt(gbufferx[1]-gbuffery[1]),sqrt(gbufferx[2]-

gbuffery[2])); } }}