• Lunes 16 de Diciembre de 2024, 00:42

Autor Tema:  Matrices Tridimensional En C  (Leído 2010 veces)

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Matrices Tridimensional En C
« en: Miércoles 8 de Junio de 2005, 19:55 »
0
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.

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Matrices Tridimensional En C
« Respuesta #1 en: Jueves 9 de Junio de 2005, 19:27 »
0
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.

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Matrices Tridimensional En C
« Respuesta #2 en: Viernes 10 de Junio de 2005, 16:46 »
0
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

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Matrices Tridimensional En C
« Respuesta #3 en: Sábado 11 de Junio de 2005, 21:16 »
0
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.