/*Realiza a media usando uma matriz NxN */ #define MAX #include "lib.h" #include <math.h> IMAGE media(IMAGE x,int n) { int i,j,d,k,m ; IMAGE newImage; d=n/2; newImage=newimage(x->info->nr,x->info->nc); for (i= 0; i< n; i++) for (j= 0; j < x->info->nc; j++) { newImage->data[i][j] = x->data[i][j]; newImage->data[x->info->nr-1-i][j] = x->data[x->info->nr-1-i][j]; } for (i= 0; i < x->info->nr; i++) for (j= 0; j < n; j++) { newImage->data[i][j] = x->data[i][j]; newImage->data[i][x->info->nc-1-j] = x->data[i][x->info->nc-1-j]; } for (i= 0; i< newImage->info->nr-1-n; i++) for (j= 0; j < newImage->info->nc-1-n; j++){ m=0; for (k=0;k<n*n;k++){ m+=x->data[i+(k/n)][j+(k % n)]; } newImage->data[i+d][j+d] = m/(n*n); } return newImage; } main (int argc, char *argv[]) { IMAGE x=0; IMAGE medImage=0; int n; if (argc < 3) { printf ("Modo de usar: \n media <image> <n> \n"); exit (1); } sscanf (argv[2], "%d", &n); if ((n/2)*2 == n) { printf(" o parametro <n> deve ser um numero impar!\n"); exit(2); } x = Input_PBM (argv[1]); if (x == 0) { printf ("Arquivo Invalido: ('%s')\n", argv[1]); exit (2); } printf("Calculando a media usando uma matriz %dx%d\n",n,n); medImage=media(x,n); Output_PBM (medImage, "media.pgm"); printf ("Imagem de saida gravada no arquivo: 'media.pgm'\n"); }