Procesamiento de imagenes PNG

Iniciado por ixak1, 19 Junio 2012, 05:51 AM

0 Miembros y 1 Visitante están viendo este tema.

ixak1

Hola buenas noches(o dias) a todos!, soy nuevo en este foro y hoy decido registrarme para formar parte de su comunidad, me gusta mucho la información técnica que hay aquí.
Bueno, ahora si al punto. la idea es hacer poder procesar imagenes en formato PNG desde luego en blanco y negro y poder transformarlas a caracteres pequeños.

A grandes rasgos tengo la idea de hacer una estructura que contenga los niveles de negro, gris y blanco y de alguna forma hacer un conteo de bits o reconocimiento de pixel por pixel. 
No se que tan loca sea la idea y NO QUIERO que me resuelvan la vida pero esto es nuevo para mi y nisiquiera se como buscarlo en google pues nisiquiera se como se llama la tecnica. aun así ya lo hice y al parecer se necesitan librerias externas etc etc..  bueno lo quiero hacer un poco más basico para leer PNG.

La plataforma desde la que programo es UBUNTU con gcc.

se podrá usar fopen() para abrir la imagen? como hago ese reconocimiento?.


Si la riego en algo con confianza digan que onda =).

do-while

¡Buenas!

Sobre como leer los datos de la imagen... No se si habra librerias ya escritas (¡tiene que haberlas!), yo estas cosas las hago a pelo, me busco en internet la especificacion del formato, y luego me pongo a trabajar en ello (si no es muy complicado). Tengo entendido que un png es una imagen sin compresion (o con compresion pero sin perdida de datos...), por lo que lo logico seria que tuviese algun tipo de encabezado describiendo ancho, alto, profundidad del color, compresion, inicio de la imagen dentro del fichero... y luego estuviese la informacion de la imagen en bruto, por ejemplo por filas (y en formato RGB, referencias a una paleta o algo parecido), de tal forma que ya podrias leerla para procesarla.

El tema de como pasarla a ASCII, si quieres hacerlo tu... no se. Podrias intentar hacer comparaciones con fuentes de tamaño (altura,anchura) fijo. Mides en la fuente la proporcion blanco/negro y tendras una tabla de referencia, tendras que tener una funcion que te evalue en la imagen un pixel o una zona del tamaño del caracter a un valor que puedas comparar con el del caracter, y asi escogerias la letra que mas te convenga...

No se si sera un buen metodo, solo es uno, supongo que tendras muchas formas de hacerlo. Unas mas fieles al original y otras mas rapidas...
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

ixak1

Pues por ahí voy iniciando, buscando la descripción del formato, comenzaré con blanco y negro ( para no complicarme la vida ), y como tu dices do-while, tiene encabezado, ancho y alto e información sobre los colores, bueno eso en teoría, pues todavía no se como obtener esa información desde el código de C, empleando funciones compatibles con gcc.
Sobre el reconocimiento de caracteres, habrá alguna normativa de como hacer un análisis de la profundidad del negro y comparar con el área negra de cada carácter ?.

Ya comienzo a verle luz a este proyecto. =).

ixak1

Bueno voy avanzando, espero el martes de la prox semana tener algo de codigo ya hecho, igual para quien le interese.

1.- lee información de la imagen en forma binaria.
2.- se copia la información binaria a memoria.
3.- la matriz tridimensional se reduce a pares para sumar 4 pixeles RGB
4.- esos 4 pixeles se promedia sus niveles RGB y se obtiene un tono de gris
5.- El tono de gris tiene un valor numérico, ese valor numérico, valorado en un rango.
6.- el valor del carácter ascii escogido previamente será comparado con el valor numérico del gris de nuestro nuevo "super pixel"
7.- Se van colocando esos promedios, que a su ves los cambia por caracteres y se va formando la nueva matriz, se va guardando.


practicamente se va a convertir una imagen a escala de grises y se va a pixelar, cada super pixel se cambia por un caracter y asi se obtiene un lindo dibujo ascii =).

Si alguien tiene una mejor idea pues bien recibida.

BlackZeroX

Revisa estas especificaciones.

http://www.iso.org/iso/catalogue_detail.htm?csnumber=29581
http://www.libpng.org/pub/png/spec/1.1/           <-- recomendada.

P.D.: Google no muerde.

Dulces Lunas!¡.
The Dark Shadow is my passion.