imagenes PGM, histograma...

A ver, voy a intentar explicarme lo mejor posible.

Quiero saber si alguien sabe si esto se hace asi, porque es un lio:

Tengo que coger una imagen en formato PGM (con el bloc de notas se pueden editar), en formato ASCII, y realizar su histograma.

El caso, es que me gustaria saber si los pasos que voy a realizar son correctos o va a sobrar codigo y se puede hacer de una forma más fácil, ya que con esto me he liado e igual no he entendido como se hace un histograma de esos.

El caso es que el archivo es asi:

P2
#Ejemplo de archivo PGM
3 5 (indica la resolucion de la imagen)
255 (indica el numero de grises)
0 (numero 1)
0
255
23
53
63
2
...
24 (numero 15)


Y claro, para realizar esto el profesor nos ha dado dos "registros":
TipoImagen: almacena el alto, ancho, numero de colores y la imagen en una matriz
TipoHistograma: amacena el numero de pixeles de la imagen y luego en una tabla de 255 elementos se van guardando cuantos pixeles hay de cada una.

Aparte hay predefinidos dos nombres de subprogramas: crearHistograma(TipoImagen pImagen, TipoHistograma pHistograma)
salvarHistograma(String pFile, TipoHistograma pHistograma)

Se supone que el histograma se tiene que salvar como un archivo PGM de 258*101 (aunque tiene que tener un marco asi: |_|, se queda en 256*100)
Asi que se me ha ocurrido:
En el de crearHistograma:
1- Recorrer la imagen por filas e ir almacenando en la tabla cuantos pixeles hay de cada color
2- Crear el histograma (es decir, la imagen de 258*101) y ahi meterle los numeros que tenga cada tono.

Pero tengo una duda: ¿como "escalo" la imágen? Es decir, si tengo 9 pixeles de un tono de gris, siendo este el máximo, en la imagen de histograma tiene que haber en su fila 100 numeros 0(negro), y el resto de tonos tiene que ir en proporcion, pero no se me ocurre como proporcionar todo.
¿Alguna sugerencia?

Gracias, hasta luego.
La escala lineal es la más fácil, es decir, el máximo valor es 1 y el resto son proporciones normalizadas con respecto a ese.

Otra escala utilizada es la logarítmica. (http://en.wikipedia.org/wiki/Logarithmic_scale)

Implementa la lineal...

- ferdy
He decidido postear aqui en lugar de crear otro post, pero la duda ahora es sobre las listas ligadas:

Situación: a un subprograma se le pasan el primer elemento de una lista ligada, en la que cada elemento de esa lista tiene un registro con varios datos.
Aparte, se pasan otras tres listas mas.

Lo voy a hacer copiando el elemento que corresponda de la lista dada en la lista que le corresponda, pero la duda es:
¿Se tiene que copiar dato a dato o se puede hacer como describo abajo?

dato a dato:
lista1.registro.dato1 = lista.registro.dato1
lista1.registro.dato2 = lista.registro.dato2
...
...

de otra forma (creo que mal):
lista1.nodoquesea = lista.nodoquesea
lista1.nodoquesea = lista.otronodo (puede ser lista1, lista2 o lista3, cualquiera de las tres)

El problema que creo que de esta segunda forma se "rompe" el enlaze de la lista inicial, pero como estoy seguro, pregunto

Gracias, hasta luego.
Las dos formas son válidas, tu sabrás cual necesitas :)
3 respuestas