1 / 10

Trabalho de Imagem

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.

Télécharger la présentation

Trabalho de Imagem

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

  3. 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;

  4. 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;

  5. 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.

  6. 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.

  7. 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.0 floatgaussianfilter[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)};

  8. Voidapplygaussian(void) int i,j,ii,jj; double r,rr,g,gg,bb,b,gbuffer[3]; RgbImageImagem_final(filename); unsignedchar *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]); } }

  9. 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)};

  10. voidapplysobel(void) { inti,j,ii,jj; double r,rr,g,gg,bb,b,gbufferx[3],gbuffery[3],GX,GY; RgbImageImagem_final(filename); unsignedchar *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])); } } }

More Related