2012-06-19 9 views
11

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

から取られ

enter image description 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エディタのスクリーンショットを以下に示す:

enter image description here

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に書くことはできますか?

答えて

3

PNGイメージが実際にどのようなものであるか、イメージが実際にファイルにどのように表現されているかを知ることは興味深いかもしれませんが、PNGファイルを生成するためにこれを知る必要はありません。

PNGはロスレス圧縮を使用していることに注意してください。これは、1ピクセルあたり2バイトを取得しないことを意味します。

プログラム内で画像を生成し、そこにある多くのライブラリを使用してPNG形式で出力することができます。 たとえば、画像をOpenCVで作成し、imWriteで出力することができます。パラメータの1つはPNGに出力させることができます。あなたは、グレースケールの16ビットの画素値を持っている場合は


、あなたはそれらをMatに入れることができます。その後

IplImageへにそれを変換する:Converting cv::Mat to IplImage*

次にあなたが出力することができ、それファイルに。以下のデータは何ジャスト完全性について

+0

私は圧迫について気づいたので、正確にはピクセル値は得られません。しかし、あなたは11と15について教えてくれますか? – gpuguy

+0

ありがとうございます、あなたの答えは私にとって非常に役に立ちます。私はそれをテストし、結果を投稿します。 – gpuguy

+3

+1しかし、私は「あなたはちょうどあなたの時間を無駄にした」と完全には同意しません。 PNGの内部について学ぶことは、あなたの現在の仕事には必要ではないかもしれませんが、学習しています。 – leonbloy

3

(eboixの答えは右の場である)

、11-?

C6 25 AA 3E 00 00 00 C2

各チャンクはCRC(4バイト)で終了し、その長さを教えて4つのバイトで始まります。 したがって、C6 25 AA 3Eは前のチャンク(IHDR)のCRCで、00 00 00 C2(194)は次の(IDAT)チャンクの長さです。

同様に、最後の4バイトはIENDチャンクのCRCです。

3

私はあまりにも慎重なく、構造を見てから見ていない...

Q11。 C6 25 AA 3E = CRC32 00 00 00 C2 =次のチャンクのサイズ

Q13。 あなたが既に適用されている圧縮を知っているIDATチャンクのように見える、先に言及したpng仕様を確認してください!

Q15。 AE 42 60 82 = CRC32

関連する問題