bool DimensionesImagenFichero(const char *fich, int& ancho, int& alto) { GRF_Imagen img = LeerImagen(fich); ancho = alto = 0; if (img!=0) { ancho = img->w; alto = img->h; LiberarImagen(img); } return (img!=0); }
int main(int argc, char **argv) { printf("Realiza las tareas del ejercicio 1 del guion 8.\n"); printf("NOTA: Solo trabaja con imagenes PGM.\n\n"); if (argc!=3) { fprintf(stderr, "Parametros incorrectos.\nUso: %s <fichero original> <fichero comprimido>\n",argv[0]); exit(EXIT_FAILURE); } unsigned char *comprimida, *reconstruida, *original; char buf[100]; double snr, snrdb; enum FORMATO fmt; int alto, ancho, planos, tam, i; original = LeerImagen(argv[1], &ancho, &alto, &fmt, &planos); comprimida = LeerImagen(argv[2], &ancho, &alto, &fmt, &planos); tam = alto*ancho; // Primer apartado del ejercicio, reconstruye los valores con +10 reconstruida = (unsigned char*)malloc(sizeof(unsigned char)*tam); for (i=0;i<tam;i++) reconstruida[i] = comprimida[i]+10; strcpy(buf, argv[2]); strcat(buf, "-1"); printf("Ejercicio 1\n===========\n"); EscribirImagenPGM(buf, reconstruida, ancho, alto); calcularSNR(original, reconstruida, tam, &snr, &snrdb); printf("Escrita la imagen reconstruida sumando 10 a cada pixel en el fichero '%s'\n", buf); printf("SNR(RMS): %f\tSNR(DBS): %f\n\n",snr,snrdb); // Semilla aleatoria srand(time(NULL)); for (i=0;i<tam;i++) reconstruida[i] = comprimida[i]+(unsigned char)(20.0*rand()/(RAND_MAX+1.0))-10; strcpy(buf, argv[2]); strcat(buf, "-2"); EscribirImagenPGM(buf, reconstruida, ancho, alto); calcularSNR(original, reconstruida, tam, &snr, &snrdb); printf("Escrita la imagen reconstruida sumando o restando 10 a cada pixel aleatoriamente en el fichero '%s'\n", buf); printf("SNR(RMS): %f\tSNR(DBS): %f\n\n",snr,snrdb); free(original); free(comprimida); free(reconstruida); return EXIT_SUCCESS; }