#define MAX #include "lib.h" #include #define Pi 3.14159 main (int argc, char *argv[]) { int i, j, M, N ; int conv, mi = 0, mj = 0, n, n1; float sigma, expyg,normal,round,sum,r; float masky[3][3]; IMAGE main_image=0; if (argc < 2) { printf ("Usage: gaussiano \n"); exit (1); } main_image = Input_PBM (argv[1]); if (main_image == 0) { printf ("No input image ('%s')\n", argv[1]); exit (2); } printf("Entre com sigma \n"); scanf("%f",&sigma); //printf("Entre com o valor de n: \n"); //scanf(" %d", &n) ; //printf("Para esse valor de n, tem-se sigma = %f\n",sigma); M = main_image->info->nr-1; N = main_image->info->nc-1; for(i=-1;i<=1;i++) { mj=0; for(j=-1;j<=1;j++) { //===========equação da função Gaussiana:================= r=(i*i)+(j*j); expyg=exp(-r/(2*sigma*sigma)); //======Calcula o fator e normaliza o valor:======== if(i==-1&&j==-1&&expyg!=0) normal=fabs(1/expyg); //fabs: valor absoluto r=(expyg*normal)/(sqrt(2*Pi))*sigma; //===============Arredonda o valor:================= //round=floor(r); if( ( (r-round)>0.5 ) || ( (r-round)<0 && (r-round)>-0.5 ) ) round++; //==============Escreve na máscara:================= masky[mi][mj]=r; sum=sum+round; mj++; } mi++; } //====================Convolui a figura com a Máscara Gaussiana:================== M = main_image->info->nr-3; N = main_image->info->nc-3; for(i=0;i<=M;i++) { printf("i %d \n",i); for(j=0;j<=N;j++) { conv=0; for(mi=0;mi<=2;mi++) { for(mj=0;mj<=2;mj++) { conv=conv+( masky[mi][mj]*main_image->data[i + mi][j + mj]); //multiplica e soma } } conv=conv/sum; //normaliza o valor main_image->data[i + 1][j + 1] = conv; } } Output_PBM (main_image, "FiltroGaussiano.pgm"); printf ("Arquivo de saída: 'FiltroGaussiano.pgm'\n"); }