#include #include #include #include #include #include "lib.h" IMAGE gaussiana(IMAGE img1,int N) { int a,b,i,j,t,x,npixels,temp; int aux, aux1, aux2, aux3, div; IMAGE img2; float sigma; float *matgaus,soma=0.0; int ct=0; int cont=0, divisao=0; float S = 0; npixels = img1->info->nc * img1->info->nr; img2=img1; divisao = (int) N / 2; sigma=(N-1)/4.0; matgaus = (float *) calloc(N,sizeof(float)); for(i=0;iinfo->nr; i++) { for(j=0; j < img2->info->nc; j++) { aux = j - divisao; aux1 = j + divisao; if(aux>=0 && aux1info->nc) { S = 0.0; ct = 0; for(t=aux;t<=aux1;t++) { S = S + matgaus[ct] * img1->data[i][t]; ct++; } S = S / soma; img2->data[i][j] = S; } } } S=0.0; //varredura vertical for(i=0; i < img2->info->nr; i++) { for(j=0; j < img2->info->nc; j++) { aux = i - divisao; aux1 = i + divisao; if(aux>=0 && aux1info->nr) { S = 0.0; ct=0; for(t=aux;t<=aux1;t++) { S = S + matgaus[ct] * img2->data[t][j]; ct++; } S = S / soma; img2->data[i][j] = S; } } } return (img2); } /*********************** main ********************/ int main( int argc, char** argv ){ IMAGE im=0,img2; double tempo; if (argc != 4) { printf("Uso: convol entrada.p2 filtro.txt saida.p2\n"); printf("entrada.p2 : Imagem de entrada.\n"); printf("filtro.txt : filtro.\n"); printf("saida.p2 : Imagem de saida.\n"); exit(0); } /* Ler imagem de entrada */ im=Input_PBM(argv[1]); if (im == 0) { printf ("Nao ha arquivo de entrada('%s')\n", argv[1]); exit (2); } /* Aplica Gaussiana */ MarkTime(NULL); img2=gaussiana(im,atoi(argv[2])); MarkTime(&tempo); /* Grava imagem de saida */ Output_PBM(img2,argv[3]); ShowTime(tempo); printf("\n"); }