CR2ファイルのRawデータを読み取ってみる その8 Lossless JPEGのデコード2 - SOF3とSOS

since:2014-5-18
last update:2014-8-31
前のページへ   次のページへ







4.3 SOF3 - フレームの開始



アドレス0x0000 0046 から2byte(0xFF 0xC3)は、SOF3のMarkerです。
アドレス0x0000 0048 から2byte(0x00 0x14)は自身を含むセグメント長さ(Lf)です。このセグメント長さは20byteになります。
アドレス0x0000 004A から1byte(0x0E)はbit精度(P)になります。サンプルでは14bitになります。
アドレス0x0000 004B から2byte(0x0D 0xBC)は画像高さ(Y)になります。サンプルでは0x0DBC = 3516になります。
アドレス0x0000 004D から2byte(0x05 0x38)は画像幅(X)になります。サンプルでは0x0538 = 1336になります。
アドレス0x0000 004F から1byte(0x04)はコンポーネント数(Nf)になります。サンプルでは0x04 = 4になります。
ここで画像幅(X) x コンポーネント数(Nf) = センサー幅 の関係が成り立ちます。

アドレス0x0000 0050 からは各コンポーネントの情報が3byteづつ記述されています。
アドレス0x0000 0050 から1byte(0x01)はコンポーネント番号(C)です。これを含む3byteはこのコンポーネント番号の記述です。
アドレス0x0000 0051 から1byte(0x11)は、上位4bitが水平サンプル係数(H)、下位4bitが垂直サンプル係数(V)です。CR2形式のような使い方をする場合は常に1になるものと思われます。
アドレス0x0000 0052 から1byte(0x00)は量子化テーブル選択肢(Tq)です。Lossless JPEGでは常に0です。
以下同様にコンポーネント番号4番までの情報が格納されます。

これらの値を保持しておきます。

4.4 SOS - スキャンの開始



アドレス0x0000 005C から2byte(0xFF 0xDA)は、SOSのMarkerです。
アドレス0x0000 005E から2byte(0x00 0x0E)は自身を含むセグメント長さ(Ls)です。このセグメント長さは14byteになります。
アドレス0x0000 0060 から1byte(0x04)はコンポーネント数(Ns)です。サンプルでは4つになります。
アドレス0x0000 0061 からは各コンポーネントの情報が2byteづつ記述されています。
アドレス0x0000 0061 から1byte(0x01)はコンポーネントの番号(Cs)です。サンプルでは0x01です。
アドレス0x0000 0062 から1byte(0x00)は、上位4bitが用いるDC用ハフマンテーブルのindex番号(Td)、下位4bitが用いるAC用ハフマンテーブルのindex番号(Ta)です。
Lossless JPEGではAC成分は使いませんので、下位4bitは常に0になります。サンプルではDC用ハフマンテーブルのindex番号は0です。
同様に各コンポーネントの情報を取得します。
サンプルではコンポーネント#1と#3がDC用ハフマンテーブル0番を、コンポーネント#2と#4がDC用ハフマンテーブル1番を使います。

アドレス0x0000 0069 から1byte(0x01)はPredictor:予測アルゴリズムの番号です(Ss)。サンプルでは0x01です。
Predictorは値により以下の予測アルゴリズムを採ります。ただしCR2形式内のLossless JPEGでは1固定のようです。

とあった場合に、Xに対して

番号予測アルゴリズム
0予測なし
1A
2B
3C
4A+B-C
5A+(B-C)/2
6B+(A-C)/2
7(A+B)/2

となります。

アドレス0x0000 006A から1byte(0x00)はスペクトル選択の終了(Se)ですがLossless JPEGでは用いないため常に0です。
アドレス0x0000 006B から1byte(0x00)は上位4bitがSuccessive approximation bit position high(Ah)、下位4bitが小数点移動(Al)です。
上位4bitはLossless JPEGでは用いないため常に0です。下位4bitは小数点移動の値です。サンプルは0となりますので、考慮する必要はありません。


次ページ:Lossless JPEGのデコード3 - 実データのデコード

前のページ  [1] [2] [3] [4] [5] [6] [7] [8] [9]  次のページ