/* MC919 - Prof. Neucimar */ /* Mauricio Caliggiuri Inforcati */ /* RA 981797 */ /* */ /* TP1. 17/03/03 */ /* 1. Filtragem da Media - Mascara nxn*/ #define MAX #include #include #include "lib.h" #include void filtroDaMedia(IMAGE x, int n); /* Função auxiliar: */ /* calcula a media da mascara */ /* nXn sobre o pixel (i,j) */ int media(IMAGE x, int i, int j, int n) { int min_i,max_i,min_j,max_j,ni, nj, valor = 0; min_i = (i - n/2); min_j = (j - n/2); max_i = (i + n/2); max_j = (j + n/2); for (ni = min_i; ni<=max_i; ni++) for (nj = min_j; nj<=max_j; nj++) //printf("(%d,%d) ",ni,nj); valor = valor + x->data[ni][nj]; return valor/(n*n); } /* Convolução da mascara nxn sobre a imagem */ /* A máscara do Filtro da Média */ /* é dada por (Ex. n=3) */ /* 1 1 1 */ /* h = 1/9 * 1 1 1 */ /* 1 1 1 */ void filtroDaMedia(IMAGE x, int n) { int i,j,lim; lim = n/2; for (i = lim; i < x->info->nr - lim; i++) for (j = lim; j < x->info->nc - lim; j++) x->data[i][j] = media(x,i,j,n); } main (int argc, char *argv[]) { IMAGE x=0; int n=0; if (argc != 3) { printf("Uso: fmedia n\n"); printf("('n' eh o tamanho da mascara utilizada (nxn))\n"); exit(1); } sscanf(argv[2], "%d", &n); if (n == 0) { printf("Mascara invalida.\nUtiliza um numero impar.\n"); exit(2); } x = Input_PBM(argv[1]); if (x == 0) { printf("Imagem invalida ('%s')\n", argv[1]); exit(3); } filtroDaMedia(x,n); Output_PBM(x, "fmedia.pgm"); printf("Arquivo de saida eh 'fmedia.pgm'\n"); }