JPEG-概念からC++による実装まで

キーフレーズ

JPEG データ ハフマン符号 DCT 量子化 CJpegDecoder ビット 画像 成分 符号化 Fig char テープル mProperty 復号 CJpegCoder () 処理 RGB 符号 mOBSP セグメント バイト void ハフマンテープル プロック MCU アドレス プログラム ビットストリーム return サイズ int マーカ SetByte クラス 場合 書き込み 読み出し mBuf for mproperty メソッド VOid throw mBitPos COutBitStream サムネイル ファイル mRgbP JFIF const 変換 GetNextAddress エラー GetByte 係数 方式 アプリケーション 定義 category エントロピー符号 Ana 作成 スキャン テスト HSize テーブル バッフア 行い アクセス 必要 while mCompP フォーマット EDataFormatError ヘッダ length Char Macintosh aProperty 表示 ランレングス mDctDataP 使用 SizeTP numBits catch 書き込む YCbCr Windows サンプリング インデックス mPreDC BSP delete

目次

002 す EN す S はじめに 本書の概要 第 1 章 れ 1 JPEG プログラムの現状と本書の目的 1 2 内容 れ 3 対象読者 1 .4 ソースプログラムの使用にあたって れ 5 サポートについて JPEG におけるテジタル静止画像圧縮 7 第 2 章 2 コ カラー画像について 2.1 .1> 画素の表し方・・ 2.1 .2> 画像の表し方・・ 2.1 .3> 画像の属性・ 2.2 JPEG の概要 2.3 JPEG の種類 24 基本 DCT 方式における圧縮の原理 2.4.1 DCT 変換と量子化・ 2.4.2> ランレングスとエントロピー符号 インタリーブとインタバル 25 2.5.1> インタリーブ・ 2.5.2> 不完全 MCU の処置・・ 2.5.3> インタバル・ 2.6 JPEG データの構造 2.6.1> マーカ・ 2.6.2> フォーマット 1 っ 0 / 張 - っ一 - っ - 8 8 9- 0 1 1 1 1 っ - っワっ 0 っ 0 っ 0 っ 0 っ 0

0 1 っ 0 / 張 / 張 - ) / 張 / 4 / 4 / 4 / 4 / 張 2.6.3> 省略フォーマット 2.7 符号化処理の流れ 28 復号処理の流れ 29 J 日 F と間引き 2.9.1 画像の表現方法 2.9.2>J 日 F フォーマット 2.10 JPEG と C + + 第 3 章 仕様と論理設計 コーディング規約 3.1 3.1.1 シンボル名 3.1 .2> ファイル名・ 3.1 .3> 型 3.2 全体の構成 3.3 実現の範囲 3.3.1 入出力 3.3.2> 符号化処理の機能範囲・・ 3.3.3> 復号処理の機能範囲 データの設計 3.4 3.4.1 画像属性データ 3.4.2> ハフマンテーブル 3.4.3> 量子化テーブル 3.4.4> マーカ・・ 3.4.5> RGB データ 3.4.6> YCbCr データ・・ 3.5 クラスの設計 3.5.1 COutBitStream クラス・ ・・・ 48 0 0 1 1 1

ヲ / 0 -6 っ 0 っ 0 っ 0 - ) -6 ラ / ラ / 8 8 8 8 3.5.2> CInBitStream クラス・ 3.5.3> CJpegC0der クラス・ 3.5.4> CJpegDecoder クラス・ 3 工ラー処理 3.6.1 工ラー処理の方針 3.6.2> 工ラー通知用クラス 3.6.3> catch する場所 ・・・ 88 ・・・ 88 ・・・ 88 ・・・ 107 ・・・ 107 ・・・ 107 ・・ 112 ・・・ 116 ・・・ 116 ・・・ 116 ・・・ 121 ・・・ 154 ・・・ 159 ・・・ 159 ・・・ 159 ・・・ 140 ・・・ 144 実装 第 4 章 上位クラス 4.1 4.1.1> 処理の内容・ 4.1 .2> Windows 4.1.3> Macintosh ・ 4.2 COutBitStream クラス 4.2.1 ヘッダファイル・・ 4.2.2> インタフェース・・ 4.2.3> 非公開メソッド・・ 4.3 CJpegC0der クラス 4.3.1> ヘッダファイル・・ 4.3.2> インタフェース・・ 4.3.3> 非公開メソッド・・ 44 CInBitStream クラス 4.4.1> ヘッダファイル・・ 4.4.2> インタフェース・・ 4.4.3> 非公開メソッド・・ 4.5 CJpegDecoder クラス 4.5.1 ヘッダファイル・・ 4.5.2> インタフェース・・ 4.5.3> 非公開メソッド・・

第 5 章 5.1 52 5.3 54 第 6 章 6.1 62 6.3 V111 テスト テストの方針 5.1.1> テストの順序・・ 5.1 .2> テストの準備・ 5.1 .3> 評価方法 185 ・・・ 184 ・・・ 184 ・・・ 184 ・・・ 184 5.1 .4> ツール 186 テストデータについて CJpegDecoder のテスト 5.3.1 テスト方法の概要・ 5.3.2> 前処理のテスト・・ 5.3.3> 復号部のテスト・ 5.3.4> よくある症状とチェックのポイント・ 5.3.5> 対策 CJpegC0der のテスト 5.4.1> テスト方法の概要・ 5.4.2> ヘッダ書き込みのテスト 5.4.3> 符号化のテスト・・ 5.4.4> よくある症状・・ 5.4.5> 対策 発展 改良の方法 高速化 6.2.1> DCT 変換の改良 6.2.2> アドレッシングの改良 6.2.3> 量子化テーブルの工夫 JPEG 画像の品質と圧縮率の改良 6.3.1 色差の間引き・・ ・・・ 186 ・・・ 188 ・・・ 188 ・・・ 191 ・・・ 196 ・・・ 200 ・・・ 204 ・・・ 204 ・・・ 205 ・・・ 206 ・・・ 206 ・・・ 209 211 ・・・ 212 ・・・ 212 ・・・ 215 ・・・ 215 ・・・ 215 ・・・ 216 ・・・ 216

6.4 6 6.6 67 付録 A. 1 A. 3 4 索引 6.3.2> 量子化テーブル・・ 6.3.3> ハフマン符号の作成・ プラットフォームの特定 マルチタスキングのために リアルタイム表示 6.6.1 Windows の場合 6.6.2> Macintosh の場合 プログレッシブ 6.7.1 仕組み 6.7.2> フォーマット・・ 6.7.3> ハフマン符号・・ 量子化テーブル ハフマン符号表 参考文献 付録 CD-ROM について ・・・ 216 ・・・ 218 ・・・ 219 ・・・ 220 ・・・ 220 ・・・ 221 ・・・ 221 ・・・ 222 ・・・ 222 ・・・ 225 ・・・ 225 227 ・・・ 228 ・・・ 228 ・・・ 258 ・・・ 259 241

索 ・・・ 120 ・・・ 120 , 143 , 145 ・記号 #define ・ #pragma ・ ・数字 ・・・ 56 , 148 ・・・ 56 , 149 ・・・ 56 , 149 16 2 次元 DCT AC 成分・・ APPo BMP ・・ C 工 nBitStream ・ CJpegCoder ・ CJpegDecoder ・ COde Cod eWarrior COM ・ COS COutBitStream DC 成分・・ DCT DCT 係数 DCT 変換・ DHT ・ D NL DQT ・ DRI ・・ EOB EOI ・・ ISO ITU-TS ・・・ ・・・ 18 , 131 , 173 ・・・ 39 , 149 ・・・ 52 , , 219 ・・・ 51 , 76 ・・・ 51 , 70 ・・・ 51 , 67 ・・・ 22 ・・・ 51 , 64 ・・・ 14 ・・・浦 , 149 ・・・ 34 , 133 , 149 ・・・ 25 , 133 , 173 ・・・ 16 , 127 , 213 17 , 19 , 171 ・・・ 18 , 130 , 172 ・・・ 14 引 JFIF ・・ JFXX ・・ JPEG ・ MCU MFC ・・ PICT ・ SOI ・・ SOFo ・・ SJpegProperty SHuffmanDecodeTabIe SHuf fmanCodeTab1e RSTm RGB PowerPlant ・ ・・・ 44 , 53 , 1 ・・・ 45 , 1 ・・・ 3 , 11 27 , 127 , 165 ・・・ 56 , 149 ・・・ 34 , 145 ・・・ 55 , 56 , 148 ・・・浦 , 78 ・・・ 59 ・・・ 58 ・・・ 37 , 56 ・・・ 8 , 61 , 123 ・・・ 52 , 204 , 219 Visual C + + 5 YCbCr ・・ ・あ行 アプリケー 余ったビット・ イベントドリプン・ インタバル ションテ・ インタリープ ータセグメント・・ 工ラー通知用オプジェクト・・ 索引 ・・・ 8 , 44 , 62 ・・・ 25 , 132 ・・・ 39 ・・・ 64 , 68 , 112 ・・・ 220 ・・・ 31 , 37 , 55 ・・・ 26 , 36 , 54 ・・・ 52 241

工ントロピ ー符号・・・ 工ントロピ ー符号化セグメント ・か行 可逆方式・・・ 拡張 DCT 方式・ 画質の劣化・・・ 画像属性・ 画像属性データ・・ 画素値・・・ カテゴリ 完全なプログレッシプ 基本 DCT 方式・・・ 逆 DCT 変換・ 逆量子化・ キャリプレー ンヨン 区切り・ 計算誤差・ 候補・ コメント コメントセグメント・・ セグメント・・ ・な行 ノンインタリープ・・ ノンプリエンプテイプなマルチタスキング・ ノンプログレッシプ・・ ・・・ 22 ・・・ 32 , 136 , 171 ・・・ 34 冖 / 0 ワ」 ワ 3 ワ】 1 ・・ 12 ・・・ 12 ・・・ 18 ・は行 ・・・ 117 , 191 , 200 ハイアラーキカル方式・・・ ・・・ 54 ・・・ 17 ノ、フマンテープル ハフマンテープル定義 ・・・ 173 ハフマンテープル定義セグメント ・・・ 223 ハフマン符号 ・・・ 12 , 55 ハフマン符号化・ ・・・ 18 , 178 ・・・ 178 , 194 , 203 ビット誤り ・・・ 184 表色系・ ・・・ 64 , 68 , 108 付加する画素・・・ ・・・ 17 , 18 不完全 MCU ・ ・・・ 177 復号可能性・・・ ・・・ 149 ・・・ 40 復号器をリセット・・・ 符号語・・ フーリエ変換・・ フレーム・・ フレームヘッダ プログレッシプ・・・ プロファイラ ポイント変換・ ・・・ 12 ・・・ 36 , 53 , 57 ・・・ 57 , 74 , 148 ・・・ 38 ・・・ 22 , 41 , 54 ・・・ 127 , 128 ・・・ 225 ・・・ 31 , 202 ・・・ 8 , 44 , 56 ・・・ 31 ・・・ 31 ・・・ 57 ・・・ 32 ・・・ 22 ・・・ 22 ・・・ 13 ・・・ 34 ・・・ 35 , 158 ・・・ 12 ・・・ 212 ・・・ 225 ・さ行 最小符号化ユニット・・ サクセッシプ・アプロキシメー ション 差分値 サムネイル・ 算術符号・・・ サンプリングファクタ・ サンプル精度・・・ ジグザグシーケンス ジグザグシーケンスインデックス・・ 周期・・・ 周期関数・・・ 周波数・・・ 周波数成分ごとの操作・・ 周波数成分データ・・ 省略フォーマット・ スキャン・・ スキャンヘッダ・ スペクトラル・セレク、 ンヨン ・・・ 27 ・・・ 223 ・・・ 24 , 130 , 173 ・・・ 45 , 56 , 160 ・・・ 22 ・・・ 28 , 36 , 185 ・・・ 35 ・ま行 ・・・ 21 , 123 , 131 マーカ ・・・ 74 マクロ・ 間引き・ ・・・ 14 ・・・ 16 未使用仮引数の警告・ ・・・ 16 密度・・・ ・・・ 19 ・ら行 ・・・ 40 , 77 ・・・ 36 ラン ランレングス・ ・・・ 159 リスタートインタバル・ ・・・ 223 ・・・ 33 , 61 ・・・ 120 , 180 ・・・ 28 , 54 , 126 ・・・ 120 , 144 ・・・ 45 ・・・ 196 ・・・ 20 , 25 , 173 ・・・ 32 , 79 242 索引

リスタートインタバル定義セグメント・ リスタートインタバルマーカ・・ 量子化 量子化テープル・ ・・・ 32 , 39 ・・・ 32 ・・ 18 , 127 , 128 ・・ 19 , 60 量子化テープルセレクタ・・ 量子化テープル定義セグメント・・ レベルシフト ・・・ 36 ・・・ 37 ・・・ 75 , 125 , 179 索引 243

奥付

・著者紹介・ 有限会社ケイワーク 1994 年 8 月、前年に某社をレイオフされた人間が集まって、共同体と して設立。どうせ仕事をするなら、給料のためではなく、納得のいく仕 事をしようというのがモットー。通信、画像処理、暗号などのソフトウ ェア開発を主な業務とする。特に、特殊用途有線通信において実績多数。 依頼があれば何でもする用意はあるが、担当者が興味をもたないと受託 しないという職人気質の会社である。 ソフトウェア開発依頼は booksupport@k-work. co . jp まで。 2000 年 6 月 20 日第 4 刷発行 1998 年 9 月 1 日初版発行 JPEG 一概念から C + + による実装まで 著者・・ 発行者・・ 発行所・・ 印刷・・ 装丁・・・ 写真提供・・ ・・・ケイワーク ・・・稲葉俊夫 ・・・ CTS フォトニカ ・・・花本浩一 ・・・奥村印刷株式会社 編集 03 ( 5549 ) 1145 販売 03 ( 5549 ) 1200 〒 107-0052 東京都港区赤坂 4 丁目 13-13 ・・ソフトバンクパプリッシング株式会社 落丁本、乱丁本は小社販売営業課にてお取り替え致します。 定価はカバーに記載されています。 Printed in Japan 旧 BN4-7973-0632-7