JpegAnalyzer操作説明 JPEGテーブル識別機能 |
JpegAnalyzerではJPEGファイル内のDQT/DHTテーブルの内容を識別することが可能です。
テーブルを識別する事により、各テーブル間やファイル間で同一テーブル使用の有無が判ります。
また、ソフトや機器のJPEG出力設定などにより、決まったテーブルを出力する場合は、以下の内容が判別出来ます。
DQT 出力したソフトや機器、画質設定、ロスレス回転の有無
DHT 汎用ハフマンテーブルかそれ以外(主に最適化テーブル)
テーブル識別のしくみ
識別のためテーブルデータをハッシュ(CRC-32)と言う8桁の16進コードに変換します。
ハッシュは長さの決まっていないデータを固定の長さに変換し、1bitでも内容が異なると別のコードに変換されるという特徴を持ちます。
但し、ハッシュは衝突と言う 違うデータが同じコードに変換される事がまれに起こります。
JpegAnalyzerではハッシュコード以外に、以下の数値をデータに加えて、コードが衝突しても正しく識別出来るようにしています。
DQT 各係数の和 DHT テーブル長
識別データについて
テーブル識別データはJpegAnalyzerの添付ファイルJpegTBL.iniに登録されています。
中には代表的なソフトで出力したテーブル識別データやデジタルカメラで固定テーブルを出力する機種の識別データ、
また、それらをロスレス回転させた場合の識別データが登録されています。
また、識別データとする領域を変え、2種類の識別コードを用意しています。
ひとつはテーブル一つに対し一つのコードになるようにしたもので、セグメント内で同じテーブルが使われていた時などで判別が出来ます。
もうひとつはセグメント内のテーブルをまとめて一つのコードにしたもので、特定機器(デジカメなど)が出力するテーブルを識別する場合や、テーブルを組み合わせて画質を調整しているようなソフトを識別する場合に利用します。
識別データはJpegTableAnalyzer(V1.03)で登録する事が出来ます。
ロスレス回転の識別について
ロスレス回転処理をするとテーブルの内容が変化する場合が有ります。
変化するテーブルは量子化テーブルの輝度成分(一般にQT0)です。
サンプリング比4:2:2または4:1:1で保存された画像の場合、横長のMCUデータになり、90度回転すると縦長のMCUになります。
それらに対応するために量子化テーブルの縦と横の係数値を非対称にさせたものが用いられる為にテーブルの内容が変わります。
但し、ソフトや機器によって対応は異なり、横長MCUでも縦横対象なテーブルを出力するものも有れば、正方形のMCUでも縦横非対象なテーブルを出力するものも有ります。
ロスレス回転しているテーブルは<回転>の文字がテーブル名に付き識別出来ます。
解析例
00000014 [0084] DQT :Define Quantization Table 【汎用中間画質(IJG50,LEAD050) <回転>】@
00000018 QT0-8bit 汎用輝度(IJG50,LEAD050,ACD20-22) <回転> A
00000059 QT1-8bit 汎用色差(IJG50,LEAD050,ACD47-48) A
0000009A [01A2] DHT :Define Huffman Table 【汎用ハフマンテーブル】B
0000009E HT0-DC 汎用輝度HT-DCC
000000BB HT0-AC 汎用輝度HT-ACC
0000016E HT1-DC 汎用色差HT-DCC
0000018B HT1-AC 汎用色差HT-ACC
種類 識別範囲 登録有り 登録無し @ DQT セグメントデータ テーブル名 無表示 A テーブルデータ テーブル名 CRC B DHT セグメントデータ テーブル名 無表示 C テーブルデータ テーブル名 CRC