PNG形式を理解しようとしています。与えられたPNG画像からピクセル値を抽出しようとしています
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
等価文字:
画像が進エディタでhereから取られ
が、それは次のようになります。
は、このPNGイメージを考えてみましょう
‰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`‚
同様にHEXエディタのスクリーンショットを以下に示す:
Iは、ヘッダ部とRGB画素値を抽出するために、この画像をリバースエンジニアリングしようとしています。私はPNGについて、またhereについて読んでおり、今まで私はこの画像について次のように指摘しています。
IHDRチャンクはFIRSTでなければなりません。それは含まれています:
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
を私は順番にHEXデータを読み始めています下:
の1-第8バイト:これは8バイトの署名
89 50 4E 47 0D 0A 1A 0A
ですこれと同等です:HEXエディタで見ることができる%PNG
有効なPNGイメージにはIHDRが含まれている必要がありますチャンク、1つ以上のIDATチャンク、およびIENDチャンクを含む。
2-チャンク:長
00 00 00 0D
3チャンク:チャンクタイプIHDRある
49 48 44 52
。
http://www.w3.org/TR/PNG-Chunks.html
4-チャンク:画像の幅(10進数128)
00 00 00 80
5-チャンク:画像の高さ(10進数で68)
00 00 00 44
6-チャンク:ビット深度(1バイト)
08
7チャンク:カラータイプ
02
8の圧縮方法
00
、9-フィルター方式:
00
10〜インターレース方式:
00
、11-以下のデータは何ですか? (IDAT後)、このデータは何
C6 25 AA 3E 00 00 00 C2
12-- IDAT
13-:
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-最後の4バイト
AE 42 60 82
これらは何ですか?
上記のポイント11,13、および15を理解できますか?ピクセル値はどこにありますか?私はこれらの詳細を知っていたら
が、私は私自身の16ビットのPNG画像を生成します:イメージは、(128×68ピクセル)、これらの詳細を知る
目的持っています。私はすでにピクセル値を持っているので、私の仕事はヘッダーなどを導入することです。
このジョブを実行できるソフトウェアがあるかどうかはわかりません。
UPDATE
ため、私は圧縮のため、私はピクセル値を見つけることができないだろう今理解。
OpenCVでファイルを書き込んでpngとして保存できるという考えがありました。さて私の直接の質問は:バイナリグレイスケールの16ビットピクセル値を持つファイルがあります。これを16ビットPNGとしてOpenCVに書くことはできますか?
私は圧迫について気づいたので、正確にはピクセル値は得られません。しかし、あなたは11と15について教えてくれますか? – gpuguy
ありがとうございます、あなたの答えは私にとって非常に役に立ちます。私はそれをテストし、結果を投稿します。 – gpuguy
+1しかし、私は「あなたはちょうどあなたの時間を無駄にした」と完全には同意しません。 PNGの内部について学ぶことは、あなたの現在の仕事には必要ではないかもしれませんが、学習しています。 – leonbloy