En essayant d'extraire les valeurs de pixels d'une image PNG

Essayer de comprendre le format PNG.

Considérer cette Image PNG:

En essayant d'extraire les valeurs de pixels d'une image PNG

L'Image est prise à partir de ici

Dans l'Éditeur Hexadécimal , il ressemble à ceci:

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

Équivalent caractères:

‰PNG........IHDR...€...D.....Æ%ª>...ÂIDATx^íÔ..Ã0.@Ñ·4Ýÿÿo³tVê‰.l(sâª4I.‡ÖþØ{‰
»R.;‡þ..€.......@....... ....€.......@....... ...Ô^jdK”õ˜|Ñô’\\>Ïœ?sqX_¯
‹y[î–¶GëñêÑζãu;湕.ÇÎ.9ɯÆ3“{f7Ï«¿ùÉ/.€.......@....... ....€.......@....... ..Œ7Ûh. 
ûí–e....IEND®B`‚

La même chose est illustré dans la Capture d'écran suivante de l'Éditeur HEXADÉCIMAL:

En essayant d'extraire les valeurs de pixels d'une image PNG

Je suis en train de désosser cette image pour en extraire la partie en-tête et les valeurs de pixels RVB. J'ai lu sur le PNG et aussi ici , et pour l'instant j'ai fait les observations suivantes à propos de cette Image:

La IHDR morceau doit apparaître en PREMIER. Il contient:

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

Ci-dessous, je commence la lecture de l'HEX de Données dans l'ordre:

1 - 8 Premiers octets: C'est l'Octet de 8 signature

 89 50 4E 47 0D 0A 1A 0A

De manière équivalente, c'est : %PNG comme on peut le voir dans l'Éditeur HEXADÉCIMAL

Valide PNG image doit contenir un IHDR morceau, un ou plusieurs IDAT morceaux, et un IEND morceau.

2 - Bloc: Longueur

 00 00 00 0D

3-Morceau: Morceau Type

 49 48 44 52

Qui est IHDR.

http://www.w3.org/TR/PNG-Chunks.html

4 - Chunk: Largeur de l'Image (en Décimal 128)

00 00 00 80

5 - Bloc: Hauteur de l'image (en Décimal 68)

00 00 00 44

6 - Morceau: la PROFONDEUR de BITS (1 octet )

08

7 - Chunk: Type De Couleur

02

8 - méthode de Compression

00

9 - méthode du Filtre:

00

10 Entrelacé méthode:

00

11 - qu'est-Ce que les données suivantes?

C6 25 AA 3F 00 00 00 C2

12-- IDAT

49 44 41 54

13 - qu'est-Ce que ces données (après IDAT):

78 5E ED D4 81 06 C3 30 14 40 D1 B7 34 JJ 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 EE D1 EC 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 - 4 Derniers octets

 AE 42 60 82

Quelles sont-elles ?

Certains peuvent m'aider à comprendre, points 11, 13 et 15 ci-dessus? Et où sont les valeurs de Pixel? L'Image est d'avoir (128 x 68 pixels)

But de connaître ces détails:

Une fois que je sais que ces détails, je générer mon propre 16 bits d'image PNG. J'ai déjà les valeurs de pixel, donc, mon travail serait d'introduire en-têtes, etc.
Je ne sais pas si il existe un logiciel qui peut effectuer ce travail.

Mise à JOUR

Je comprends maintenant, à cause de la compression, je ne serais pas en mesure de localiser les valeurs des pixels.

J'ai eu l'idée que je puisse écrire un fichier dans OpenCV et l'enregistrer en png. Eh bien maintenant, ma question est: j'ai un binaire fichier en niveaux de gris 16 bits de valeurs de pixels. Puis-je écrire cela dans OpenCV 16 bits PNG ?

OriginalL'auteur gpuguy | 2012-06-19