Esempio n. 1
0
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);
}
Esempio n. 2
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;
}