SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: i82maria en Miércoles 8 de Junio de 2005, 19:55

Título: Matrices Tridimensional En C
Publicado por: i82maria en Miércoles 8 de Junio de 2005, 19:55
Hola a todos, a  ver como explico yo esto, resulta que tengo que hacer una practica que va sobre matrices tridimensionales en C, pues bien, la reserva ya se como se hace, en este caso es asi:

byte reservaMatriz(byte ***imagen, int f, int c)
  {    int i;
 
      *imagen = (byte **)malloc((f)*sizeof(byte *));
      for(i=0; i< f; i++)
      {
         (*imagen) = (byte *) malloc(c* sizeof(byte));
      }
   
  }

La matriz se llama imagen,y la funcion para guardarla en un fichero es esta:
se le pasa el nombre del fichero, la matriz, el numero d efilas y columnas y el nivel de gris de la imagen.

void crearFicheroMixto(char *fichero, byte **imagen, int f, int c, int n_gris)
  {
   /*aqui la imagen se pasa como puntero doble pq ya no lo vamos a modificar*/
   
       char cadena[10]; //para el comentario de la cabecera
    FILE *pf;
    int i;
 
    pf = fopen(fichero, "w"); /*abrimos el fichero para escritura en modo texto*/   
    if(pf == NULL)
    {
       printf("\nError de apertura, del fichero %s \n", fichero);
      exit(-1);
    }
    fprintf(pf, "%s\n", "P5");
   fprintf(pf, "%d %d\n", c, f);
   fprintf(pf, "%d\n", n_gris);
   
   /*escribimos la parte binaria*/
   
   for(i=0; i<f; i++)
   {
     fwrite(imagen, sizeof(byte), c, pf);
   }
   fclose(pf); /*cerramos el fichero*/
}

Pues bien, mi problema esta, que no se muy bien como enfocar ahora esto, el proceso de binarizacion, si alguien sabe darme alguna idea, se lo agradeceria.Muchas gracias

Binarización
Consiste en trasformar una imagen de niveles de gris en una imagen binaria, esto es, en la que tan solo hay dos niveles de gris: 0 (negro) y 255 (blanco). La transformación se realiza según la función:
 0 siI(i, j)<=t

255 siI()i, j >t
Siendo I(i,j), el valor de luminosidad del pixel colocado en las coordenadas (i,j) de la imagen, y t el valor de umbral para la binarización.
Título: Re: Matrices Tridimensional En C
Publicado por: fuhrer en Jueves 9 de Junio de 2005, 19:27
Hola que tal.

Lo unico que debes hacer es pasar los datos a tu misma imagen o a otra, dependiendo de como lo quieras hacer. Por ejemplo, si tienes una imagen de 256X256, puedes hacer algo como esto:
Código: Text
  1.  
  2. void Binariza(int **I, int umbral){
  3.      int i, j;
  4.      for(i = 0;i &#60; 256;i++)
  5.         for(j = 0;j &#60; 256;j++)
  6.            if(I[i][j] &#60; umbral)
  7.              I[i][j] = 0;
  8.            else I[i][j] = 255;
  9.      }
  10.  
  11.  
Y eso es todo.

Hasta luego.
Título: Re: Matrices Tridimensional En C
Publicado por: i82maria en Viernes 10 de Junio de 2005, 16:46
Cita de: "fuhrer"
Hola que tal.

Lo unico que debes hacer es pasar los datos a tu misma imagen o a otra, dependiendo de como lo quieras hacer. Por ejemplo, si tienes una imagen de 256X256, puedes hacer algo como esto:
Código: Text
  1.  
  2. void Binariza(int **I, int umbral){
  3.      int i, j;
  4.      for(i = 0;i &#60; 256;i++)
  5.         for(j = 0;j &#60; 256;j++)
  6.            if(I[i][j] &#60; umbral)
  7.              I[i][j] = 0;
  8.            else I[i][j] = 255;
  9.      }
  10.  
  11.  
Y eso es todo.

Hasta luego.
Muchas gracias, eres muy amable, pero una pregunta, si segun creo el caso es que la imagen es una matriz tridimensional, habira que modificar un poco lo que tu me has escrito no?.

Saludos desde España. Maria
Título: Re: Matrices Tridimensional En C
Publicado por: fuhrer en Sábado 11 de Junio de 2005, 21:16
Claro que si.

Sólo deberas agregar otro ciclo for el cual recorera la tercera dimensión de la matríz.

Pero si lo que estas haciendo es con respecto a imágenes, me imagino que sera donde se almacenan los colores rojo, verde y azul; pero para la transformación de imágenes a color a blanco y negro, primero debes pasarlas a escala de grises con una determinada proporción y despues proceder a binarizarlas.

Si lo anterior no es muy importante para lo que debes realizar, entonces solo se corrige con la pequeña modificación que te mencione al principio.

Hasta luego.