#include #include #include #include #include #include "lib.h" IMAGE mediana(IMAGE img1,int N) { int a,b,i,j,t,x,npixels,temp; int aux, aux1, aux2, aux3, div,ile,auxiliar; IMAGE img2; int *lista_elem,c; int centro_masc_x=0, centro_masc_y=0, cont=0, divisao; long int S = 0; npixels = img1->info->nc * img1->info->nr; /* Aloca espaco para a imagem de saida */ if (img2->data == NULL) exit(-1); /* Aloca espaco para a tabela de linhas e inicializa a tabela */ /* aplica mediana */ img2=img1; divisao = (int) N / 2; lista_elem = (int *) calloc(N*N,sizeof(int)); for(i=0; i < img2->info->nr; i++) { for(j=0; j < img2->info->nc; j++) { aux = i - divisao; aux1 = j - divisao; aux2 = i + divisao; aux3 = j + divisao; if(aux>=0 && aux1>=0 && aux2info->nr && aux3info->nc) { ile=0; for(t=aux; t <= aux2; t++) { for(x=aux1; x <= aux3; x++) { lista_elem[ile]=img1->data[t][x]; ile++; } } //ordena lista de elementos for(t=0; tdata[i][j] = lista_elem[c]; } } } 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 mediana imagem */ MarkTime(NULL); img2=mediana(im,atoi(argv[2])); MarkTime(&tempo); /* Grava imagem de saida */ Output_PBM(img2,argv[3]); ShowTime(tempo); printf("\n"); }