Cercando di capire il formato PNG.Cercando di estrarre i valori dei pixel da una determinata immagine PNG
considerare questo PNG Image:
L'immagine è tratta dal here
In Hex Editor, sembra che questo:
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
caratteri equivalenti:
‰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 stesso è mostrato nelle seguenti Schermata del Editor HEX:
sto cercando di decodificare questa immagine per estrarre la parte di intestazione ed i valori dei pixel RGB. Ho letto su PNG e anche su here, e finora ho notato quanto segue su questa immagine:
Il chunk IHDR deve apparire PRIMO. 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
Sotto sto iniziando la lettura dei dati HEX in sequenza:
1- primi 8-byte: Questa è la firma a 8-Byte
89 50 4E 47 0D 0A 1A 0A
Equivalentemente questo è:% PNG come si può vedere in HEX Editor
Un'immagine PNG valida deve contenere un IHDR pezzo, uno o più blocchi IDAT e un blocco IEND.
2- Chunk: Lunghezza
00 00 00 0D
3-Chunk: Chunk Tipo
49 48 44 52
Che è IHDR.
http://www.w3.org/TR/PNG-Chunks.html
4- Chunk: larghezza dell'immagine (in decimale 128)
00 00 00 80
5- Chunk: Altezza dell'immagine (in decimale 68)
00 00 00 44
6- Chunk: BIT DEPTH (1 byte)
08
7- Chunk: Tipo Colore
02
8- Metodo di compressione
00
9- Metodo di filtraggio:
Metodo10- interlacciato:
00
11- Qual è i seguenti dati?
C6 25 AA 3E 00 00 00 C2
12-- IDAT
13- cosa fa questi dati (dopo 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 37 8C DB 68 03 20 FB DE 96 65 00 00 00 00
14- IEND:
49 45 4E 44
15- ultimi 4 byte
AE 42 60 82
Cosa sono?
Qualcuno può aiutarmi a capire i punti 11, 13 e 15 sopra? E dove sono i valori di Pixel? L'immagine sta avendo (128 x 68 pixel)
Scopo di conoscere questi dettagli:
Una volta che so questi dettagli, ho genererà la mia immagine PNG a 16 bit. Ho già valori di pixel, quindi il mio compito sarebbe quello di introdurre intestazioni ecc.
Non so se esiste un software in grado di eseguire questo lavoro.
UPDATE
capisco subito a causa della compressione, non sarei in grado di individuare i valori dei pixel.
Mi è venuta l'idea di poter scrivere un file in OpenCV e salvarlo come png. Bene, ora la mia domanda diretta è: ho un file binario binario con valori di 16 bit di pixel in scala di grigi. Posso scrivere questo in OpenCV come PNG a 16 bit?
Mi sono appena accorto della compressione, quindi non avrei ottenuto i valori precisi di Pixel. Ma puoi dirmi dell'11 e del 15? – gpuguy
Grazie, la tua risposta mi è molto utile. Lo testerò e quindi pubblicherò il risultato. – gpuguy
+1 Ma non sono completamente d'accordo con "Hai appena perso tempo". L'apprendimento delle parti interne di PNG potrebbe non essere necessario per il tuo compito attuale, ma è comunque l'apprendimento. – leonbloy