Intentando comprender el formato PNG.Intentando extraer valores de píxeles de una imagen PNG determinada
consideran este PNG Image:
La imagen está tomada de here
En Hex Editor, que se parece a esto:
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 00 80 00 00 00 44 08 02 00 00 00
C6 25 AA 3E 00 00 00 C2 49 44 41 54 78 5E ED D4 81 06 C3 30 14 40 D1 B7 34 DD FF FF 6F
B3 74 56 EA 89 12 6C 28 73 E2 AA 34 49 03 87 D6 FE D8 7B 89 BB 52 8D 3B 87 FE 01 00 80
00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 04 00 80 00 00 10 00 00 02 00 40
00 00 08 00 00 01 00 20 00 00 00 D4 5E 6A 64 4B 94 F5 98 7C D1 F4 92 5C 5C 3E CF 9C 3F
73 71 58 5F AF 8B 79 5B EE 96 B6 47 EB F1 EA D1 CE B6 E3 75 3B E6 B9 95 8D C7 CE 03 39
C9 AF C6 33 93 7B 66 37 CF AB BF F9 C9 2F 08 80 00 00 10 00 00 02 00 40 00 00 08 00 00
01 00 20 00 00 04 00 80 00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 8C 37 DB
68 03 20 FB ED 96 65 00 00 00 00 49 45 4E 44 AE 42 60 82
caracteres equivalentes:
‰PNG........IHDR...€...D.....Æ%ª>...ÂIDATx^íÔ..Ã[email protected]Ñ·4Ýÿÿo³tVê‰.l(sâª4I.‡ÖþØ{‰
»R.;‡þ..€[email protected] ....€[email protected] ...Ô^jdK”õ˜|Ñô’\\>Ïœ?sqX_¯
‹y[î–¶GëñêÑζãu;湕.ÇÎ.9ɯÆ3“{f7Ï«¿ùÉ/.€[email protected] ....€[email protected] ..Œ7Ûh.
ûí–e....IEND®B`‚
Lo mismo se muestra en la siguiente captura de pantalla del editor hexadecimal:
Estoy tratando de realizar ingeniería inversa a esta imagen para extraer la parte de cabecera y los valores de los píxeles RGB. Leí acerca de PNG y también here, y hasta ahora he observado lo siguiente acerca de esta Imagen:
El fragmento IHDR debe aparecer PRIMERO. Contiene:
Width: 4 bytes
Height: 4 bytes
Bit depth: 1 byte
Color type: 1 byte
Compression method: 1 byte
Filter method: 1 byte
Interlace method: 1 byte
A continuación estoy empezando a leer los datos hexadecimales en secuencia:
1- Primero de 8 bytes: Esta es la firma de 8 bytes
89 50 4E 47 0D 0A 1A 0A
Equivalentemente esto es:% PNG como se puede ver en el editor HEX
Una imagen PNG válida debe contener un IHDR fragmento, uno o más fragmentos IDAT y un fragmento IEND.
2- Chunk: Longitud
00 00 00 0D
3-Chunk: Chunk Tipo
49 48 44 52
Cuál es IHDR.
http://www.w3.org/TR/PNG-Chunks.html
4- Chunk: ancho de la imagen (en decimal 128)
00 00 00 80
5- Chunk: Altura de la imagen (en decimal 68)
00 00 00 44
6- Trozo: BIT DEPTH (1 byte)
08
7- Chunk: Tipo Color
02
8- Método de compresión
00
9- método de filtro:
Método10- entrelazado:
00
11- ¿Qué son los datos siguientes?
C6 25 AA 3E 00 00 00 C2
12-- IDAT
13- ¿qué es esto de datos (después de IDAT):
78 5E ED D4 81 06 C3 30 14 40 D1 B7 34 DD FF FF 6F B3 74 56 EA 89 12 6C 28 73 E2 AA 34 49 03 87 D6 FE D8 7B 89 BB 52 8D 3B 87 FE 01 00 80 00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 04 00 80 00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 00 D4 5E 6A 64 4B 94 F5 98 7C D1 F4 92 5C 5C 3E CF 9C 3F 73 71 58 5F AF 8B 79 5B EE 96 B6 47 EB F1 EA D1 CE B6 E3 75 3B E6 B9 95 8D C7 CE 03 39 C9 AF C6 33 93 7B 66 37 CF AB BF F9 C9 2F 08 80 00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 04 00 80 00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 8C 37 DB 68 03 20 FB ED 96 65 00 00 00 00
14- IEND:
49 45 4E 44
15- últimos 4 bytes
AE 42 60 82
¿Qué es esto?
¿Puede ayudarme a entender, puntos 11, 13 y 15 arriba? ¿Y dónde están los valores de Pixel? La imagen está teniendo (128 x 68 píxeles)
fin de conocer estos detalles:
Una vez que sé estos detalles, que va a generar mi propia imagen PNG de 16 bits. Ya tengo valores de píxeles, por lo que mi trabajo sería introducir encabezados, etc.
No sé si hay software que pueda realizar este trabajo.
ACTUALIZACIÓN
entiendo ahora debido a la compresión, yo no sería capaz de localizar los valores de los píxeles.
me ocurrió la idea de que puedo escribir un archivo en OpenCV y guardarlo como PNG. Bueno, ahora mi pregunta directa es: Tengo un archivo binario que tiene valores de 16 bits en escala de grises. ¿Puedo escribir esto en OpenCV como PNG de 16 bits?
Me acabo de dar cuenta de la compresión, por lo que está bien, no obtendría los valores exactos de píxeles. ¿Pero me puedes decir acerca de 11 y 15? – gpuguy
Gracias, su respuesta es muy útil para mí. Lo probaré y luego publicaré el resultado. – gpuguy
+1 Pero no estoy totalmente de acuerdo con "Acabas de perder tu tiempo". El aprendizaje sobre las funciones internas de PNG puede no ser necesario para su tarea actual, pero de todos modos está aprendiendo. – leonbloy