検索 - みる会図書館

全データから 10000件見つかりました。
1. JPEGー概念からCプラスプラスによる実装まで

JPEG C + + による実装まで 概念から ケイワーク【著】

2. JPEGー概念からCプラスプラスによる実装まで

プロジェクトでも、 JPEG の符号化・復号を行う部分は、 まったく同じソースプログラム になっています。 本書は次の構成になっています。 明らかになります。 第 3 章では、プログラムの設計を行います。この段階で、 JPEG に関わるデータ構造が 利用する場合も、第 2 章の内容に精通していたほうがよいでしよう。 ます、第 2 章で画像処理の基礎と JPEG の概要を説明します。既成のコンポーネントを 少なからす参考になることでしよう。 書のサンプルプログラムを読む必要はありませんが、 c + + の文法が多少でもわかれば、 C + + 以外の言語を使用して JPEG 関連システムを構築することもできます。その際は、本 ないというわけではありません。本書の第 2 章で説明している JPEG の概念を理解すれば、 しかし、 JPEG 関連システムを構築するためには、必すしも c + + を使用しなければなら 読者は C + + の文法を理解しているものと想定しています。 C + + のプログラミングの解説書ではありませんから、文法などについては説明しません。 一方、本書には C + + によるサンプルプログラムのソースコードを添付していますが、 いませんので、画像処理技術については必要に応じて別に学んでください。 うと、画像処理について少なからぬ知識が必要になります。本書はそこまではカバーして 処理について何も知らなくても心配ありません。ただし、 JPEG を十分に活用しようと思 明を理解するために必要な画像処理の基礎についても触れました。ですから、読者は画像 本書は JPEG の解説書です。本文中で JPEG 技術に関する説明を行っています。その説 処理の知識と JPEG の知識が必要になります。 JPEG 関連システムを構築するには、プログラミングに関する知識と技術、それに画像 3 ー対象読者 いえるでしよう。 と思います。逆にいえば、第 6 章の改良が実践できれば、もはや中級プログラマであると その方針とヒントを紹介します。これを実現することは初級プログラマには容易ではない 簡単に説明します。改良方法とは、サンプルプログラムをより実用的にする方法のことで、 第 6 章では、サンプルプログラムの改良方法と、 JPEG の基本方式以外の方式について いても考えます。 について説明します。また、 JPEG プログラム作成時によく起こる症状と、その原因につ 比較を行うことが重要です。そのようなことができるように、第 5 章でテストのポイント せん。デバッガを駆使して、プログラムの進行を追いかけ、必要に応じて手作業で計算と 与えられたサンプルプログラムを実行しても、 JPEG の仕組みを理解できるとは限りま ドを見ることで、 JPEG の符号化・復号の仕組みの細部がわかることでしよう。 第 4 章では、ソースプログラムを解説します。実際に動作するプログラムのソースコー 4 第 1 章本書の概要

3. JPEGー概念からCプラスプラスによる実装まで

JPEG における デジタル静止画像圧縮 本章では、 JPEG そのものの説明を行います。 2.1 節では、画像処理に精通されていない方のために、カラー画像の扱い方を 簡単に説明します。理解されている方は読み飛ばしてもかまいません。 2.2 節では、 JPEG とはどんなものかというイメージを作ってみましよう。 2.3 節では、 JPEG の種類を紹介します。 JPEG は複数の方式の組で、一般に利 用されているのはその一部の機能とフォーマットだけです。 2.4 節では、最もよく利用されている基本 DCT 方式の原理を説明します。本書 は、基本 DCT 方式についてのみ詳しく説明します。 2.5 節では、 JPEG に採用されている画像伝送技術を説明します。この技術はコ ンピュータにおける画像処理よりは、テレビ放送などの技術に近いものです。 の技術の概念はさほど難しくありませんが、実現には手間がかかります。しつか りと理解しておかないと、実際にプログラムを作成することができません。 2.6 節では、基本 DCT 方式で利用する JPEG データのフォーマットを詳説しま す。プログラムの作成には欠かせないものです。 2.7 節、 2.8 節では、それぞれ符号化と復号の処理の流れを説明します。これは、 そのままプログラムのアルゴリズムの概要になります。 2.9 節では、 JPEG とは異なった JFIF という規則について説明します。これは JPEG の利用方法を定めた規則です。インターネットなどで見かける JPEG デー タはすべて JFIF に従っていると考えてよいでしよう。 最後に、 2.10 節では、 JPEG アプリケーションを C + + で実現する利点について 説明します。他の言語で実現する場合にも参考になるでしよう。

4. JPEGー概念からCプラスプラスによる実装まで

・著者紹介・ 有限会社ケイワーク 1994 年 8 月、前年に某社をレイオフされた人間が集まって、共同体と して設立。どうせ仕事をするなら、給料のためではなく、納得のいく仕 事をしようというのがモットー。通信、画像処理、暗号などのソフトウ ェア開発を主な業務とする。特に、特殊用途有線通信において実績多数。 依頼があれば何でもする用意はあるが、担当者が興味をもたないと受託 しないという職人気質の会社である。 ソフトウェア開発依頼は [email protected] 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

5. JPEGー概念からCプラスプラスによる実装まで

210 ÅJPEG と C + + 本書では JPEG の解説を行うとともに、プログラム例を掲載していますが、これは c + + でプログラミングされています。以下の 3 つの理山から、 c + + が JPEG アプリケーション の作成に、最適なプログラミング言語であると考えられるからです。 第 1 の理由は、オプジェクト指向設計に関することです。オプジェクト指向設計におい て最も重要で難しい点は、何をオプジェクトとして実現するか、ということです。システ ムのモデリングにおいて、オプジェクトを見い出すには経験とセンスがものをいいます。 JPEG の符号器・復号器はオプジェクトとして捉えやすいものです。オプジェクト指向 についての深い経験がなくても、違和感なくオプジェクトとして設計できるでしよう。 そして、 JPEG 符号器・復号器をオプジェクト指向言語で実装すると、進行状況などの 内部状態をメンバ変数で管理することによって、システム全体では JPEG 処理の進行を意 識しなくてすむようになります。同様に、ビットストリームをオプジェクトとして実装す ると、読み出しアドレスやアドレッシングの管理、特例処理などをカプセル化することが できます。これにより、 JPEG 処理そのものを実装するときに細かい点を意識しなくてす みます。 また、オプジェクト指向プログラミング言語では、継承とオーバーライドを行うことが できます。本書の後半で示す実装例では、わかりやすさを目的としてコーディングしてい るので、実行速度の点で大きな問題があります。しかし、処理時間のかかるメソッドをオ ーバーライドすることで、容易にチューンナップすることができるでしよう。 第 2 の理由は、 JPEG の処理では、メモリのアドレッシングに手間がかかります。例え ば、元画像と 1 プロックの対応や、インタリープによる間引きや復元の処理などがありま す。 C / C + + はアドレッシングについて多機能です。ポインタや配列が柔軟であり、利用 方法によっては実行効率を上げることができます ( 下手をすると下げることもあります ) 。 第 3 の理山は、エラー処理です。コンピュータブログラムでは、エラー対策が重要です。 特に JPEG 復号処理においては、 JPEG データ内に誤りがあると処理が不可能になります。 符号化時にメモリアクセスエラーを起こして、誤ったアドレスにデータを書き込むと、プ ロセス管理の弱い OS ではクラッシュする可能性もあります。このため、エラー処理は十 二分に行うべきですが、その手間は少なくありません。 C + + には例外処理機能があります。工ラーの検出のみをメソッド内の必要な場所で行 い、その処置を別の場所に記述することができます。 JPEG のような複雑なアルゴリズム を実装する場合、例外処理機能はソースプログラムの可読性と保守性を向上させる効果が あります。 以上の理由により、 JPEG の実装には C + + を用いることが最適です。また、 c + + は多く のプラットフォームで利用可能です。本書の後半で示す実装例では、処理系に依存しない コーディングを行っていますので、入出力部分を作成すれば、読者の手持ちのシステムで 比較的簡単に動作を確認することができるでしよう。 第 2 章 JPEG におけるデジタル静止画像圧縮

6. JPEGー概念からCプラスプラスによる実装まで

そこで、正式な文書を参照することになるのですが、この文書がかなりわかりにくいの です。なにしろ、「標準」とか「勧告」といわれる正式な文書です。誤りなく、明確に記 述されている反面、誰でも読めるという表記ではありません。さまざまな基礎知識がなけ れば理解できないのです。 このような背景を踏まえ、本書は JPEG の基本方式をわかりやすく、完全に解説するこ とを目的としました。そして、実際に他のプログラムとデータの交換ができる C + + プロ グラムを添付しました。本書をお読みいただけば、 JPEG の基本方式のすべてを理解でき ることでしよう。また、実際に動作するプログラムを手に入れ、さまざまな実験を試みる こともできるでしよう。 またこの過程で、中級へのステップアップを試みるプログラマにとっては、プログラミ ングにおける重要な概念を学ぶ機会となるでしよう。 12 ー内容 JPEG は ISO ( 国際標準化機構 ) と ITU-TS ( 国際電気通信連合電気通信標準化セクタ、 旧 CCITT : 国際電信電話諮問委員会 ) の合同組織で、 J0int Ph0tographic Experts Group of CCITT-ISO/IEC の略称であると同時に、この組織が定めたデジタル静止画像の圧縮符 号化方式を意味します ( 本書では、特に断らない限り、後者の画像圧縮符号化方式を指す ものとします ) 。 後ほど説明しますが、 JPEG はとても大きな方式です。そのすべてを利用することは難 しいですし、現実的ではありません。実際、インターネットや CD - R()M で提供されてい る JPEG データは、その多くが最も基本的な機能だけで作られたものです。その画像を表 示するときも、最も基本的な機能だけで表示することができます。このようなデータは一 般に交換 ( 配布 ) されている JPEG データの 7 割から 8 割にあたります ( 筆者らの経験に よる ) 。残りの 2 , 3 割の JPEG データには、拡張方式という機能が使用されています。 ところが、 JPEG 方式はもっと奥が深いのです。基本と拡張の 2 方式だけではなく、そ の他にもいくつかの方式があり、それらを組み合わせて使用することができるのです。 れらの一般には使われない方式は特殊分野で活用されています。 そのすべての方式について解説することは現実的ではありません。そこで、本書では基 本方式に限って解説することにします。説明の範囲は少々狭くなりますが、基本に関する JPEG データの符号化・復号が完全に行えるプログラムを掲載します。 作成するプログラムは 2 つです。 1 つは JPEG ・符号化プログラム、もう 1 つは JPEG 復号 プログラムです。 JPEG はプラットフォーム ( ハードウェアや (S) やアプリケーションに依存しないとい う特徴があります。その特徴を生かすため、本書のサンプルプログラムは ANSI C + + で 記述しました。そして、一般的なパソコンで動作が確認できるように、 Windows 用と Macintosh 用のアプリケーションとして動作するプロジェクトを構成しました。どちらの 1.2 内容

7. JPEGー概念からCプラスプラスによる実装まで

はじめに インターネットが一般の人々に普及するにつれて、 JPEG ということばも広く知られる ようになってきました。 JPEG は高い圧縮率を誇る静止画像のデータ形式であり、多くの ユーザに利用されています。 ところが、 JPEG を利用するプログラムを作成しようとすると、十分な情報が記載され たわかりやすい参考書がないのが実状です。筆者も JPEG を調べ始めたときには、まとま った資料がなく、大変苦労した経験があります。数多くの参考書を購入し、その情報を寄 せ集めて、やっとプログラムを書くことができました。このとき、 JPEG 技術の基礎から プログラミングに必要な細かい情報までを 1 冊でカバーした本が欲しい、そう思いました。 しかし、このような本は、その後も刊行されませんでした。結局、筆者が新たに書き下 ろすことにしました。それが、本書です。本書を通読することで、 JPEG の基本のすべて を学び、実装を行うことができます。さらに、付属のサンプルプログラムを使って、 JPEG の仕組みの確認をすることもできるでしよう。 実装に用いるプログラミング言語には、 C + + を採用しました。 C + + は、現在のパソコ ンシステムでは最もメジャーな言語であり、そのオプジェクト指向言語という性質が JPEG プログラミングに適しているからです。 ただし、 JPEG はとても奥が深い技術ですから、 1 冊で JPEG と C + + の両方のすべてを 解説することはできません。本書のテーマは、あくまで JPEG ですから、 C + + の文法につ いての解説は省略し、コードの説明を中心に行っています。 ところで、サンプルプログラムを作成していて気がついたことがあります。それは、 JPEG を実装するためには、プログラミングの様々な技術が必要になるということです。 そして、その技術は初級から中級に向かおうとしているプログラマにとって重要なものば かりです。もし、あなたが JPEG プログラムを必要としていなくても、 C + + の中級プログ ラマをめざしているのであれば、本書はちょうどよい教材となるでしよう。 以上の点から、本書は特に次の人々に読んでいただきたいと思います。 ・ JPEG について知りたい方 ・ JPEG を用いたプログラムを作成したい方 ・初級から中級にステップアップしたい C + + プログラマ 本書が多くのプログラマの参考になり、今後のマルチメディア社会の発展に貢献できれ 1998 年初夏 ば幸いです。 有限会社ケイワーク

8. JPEGー概念からCプラスプラスによる実装まで

ー JPEG プログラムの現状と本書の目的 インターネットと CD - ROM の普及によって、美しい静止画像を小さなデータで提供す る最も有効な手段として JPEG が浸透しました。インターネットェクスプローラやネット スケーブナビゲータなどの WWW プラウザは、必ず JPEG 画像を表示する機能を備えてい ます。もはや、 JPEG 画像を表示することができないパソコンシステムは珍しくなってい ます。 ユーザだけでなく、プログラマにとっても JPEG は身近なものになっています。 Windows でも Macintosh でも、 JPEG の符号化・復号 ( 圧縮・伸張 ) プログラムはコンポ ーネント ( ソフトウェア部品・ライプラリ ) として提供されているものがあり、もはや JPEG のプログラムなど作成する必要はないという人までいます。 はたして本当にそうでしようか ? 既成のコンポーネントを利用してシステムを構築する方法は、システム開発の期間の短 縮と経費の節約に大きな効果があります。そして、そのような方法はソフトウェア工学に おける重要なテーマです。 ところが、そのような方法は、実際には問題をすり替えているに過ぎないという意見も あります。コンポーネント部分のプログラムを作成しなくてよい反面、その部分には一切 手を出せなくなってしまったのです。既成のコンポーネントを利用することで通常の符号 化・復号はできても、 JPEG を応用した特別なシステムの開発はできません。しよせん、 既成の範囲から抜け出すことはできないのです。 また、ほとんどのプログラマが既成のコンポーネントを使用するので、 JPEG に詳しい 人が減り ( 増えす ) 、 JPEG が「特別な技術」という扱いを受けることになりつつあります。 実際には、 JPEG が特殊技術という扱いを受ける理山は何もありません。むしろ、これだ け普及しているのですから、すべてのプログラマがその基礎技術に精通していても不思議 ではないのです。 一方、プログラミング言語を覚えたばかりの、初級から中級へ移ろうとしているプログ ラマにとっても、 JPEG は魅力的なテーマです。 JPEG プログラムを作成することによって、 プログラミングの様々な概念と技術を得ることができるでしよう。また、 JPEG について しく知っておくことは、決して損にはなりません。 ところで、「それでは JPEG プログラムを作成してみよう ! 」と思って準備を始めると、 情報の少なさに驚かされます。インターネットで JPEG について検索してみてください。 ほとんどの情報は、 JPEG データの特徴とか、 DCT 変換とハフマン符号 ( 後述 ) を使う、 という内容に限られています。このことは、いわゆる JPEG の解説書でも同じです。 では、その情報だけでプログラムが作成できるのか ? というと、答えは「作成できる のは半分だけ」となります。 JPEG に似た独自の圧縮・伸張プログラムを作ることはでき ますが、他のプログラムとのデータ交換はとても無理です。 DCT 変換とハフマン符号を 扱う部分が CPU だとすると、レ () にあたる部分の情報が完全に欠落しているのです。 第 1 章本書の概要 二一一口

9. JPEGー概念からCプラスプラスによる実装まで

delete pBitStream; return TRUE : CJpegCodWinDoc: :DoCoding( ) では、 JPEG データの属性を定め、 DIB データから RGB データを作り、 c ユ pegc 。 der のインスタンス jc に渡します。そして、符号化を実行 し、 JPEG データをファイル保存します。 / / こ PEG 符号化処理 VOid CJpegCodWinDoc : :DoCoding(char*& pStreamData, 土 n に & iSize) if (m_bCodeF1g) return; CSize sizeDib = m Dib . GetSize() ー SJpegProperty aProperty; aProperty . HSize sizeDib . cx; aProperty. VSize sizeDib ・ CY : aPrOPertY. Dimension = 3 ー aProperty . SampIePrecision " this is test aProperty . Comment data" aProperty . Units aProperty . HDensity = 72 : aProperty. VDensity = 72 : aProperty. HSize / / JPEG 符号化用のワーク領域の確保 u_Char* rp = Char[Size] ー u char* gp = new u_char[size] ′ u char ☆ bp = new u char [ s 土 z e ] ー / / D ェ B データを R , G , B 各要素へ分解 this—>DivideBitData(rp, gp, (p) : CJpegCoder j c ( rp, gp, bp ) : jc . SetJpegProperty( aProperty ) ー 土 n セ jc . DoCoding( ) : if ( res く ( 土 n し ) emNoError ) { delete rp; delete gp; delete bp; throw ー ッ ビ・ 1 0 度 精 ズズルト位 イイ数プン単度度 ササ分ンメ度密密 横縦成サコ密横縦 ☆ aProperty . VSize; 土 n に Size / / こ PEG 符号器作成 / / 画像属性のセット / / 符号化実行 データにエラーがあれば / / 工ラー処理へ 土 n し iJpegSize; / / JPEG データの取り出し jc . GetJpegData( &pStreamData, iJpegSize ) : 92 第 4 章実装

10. 月刊 C MAGAZINE 2000年6月号

・ Delta-PNG MNG にあって MNG-LC や MNG-VLC にな い大きな特徴として , Delta-PNG という仕様 がある。これは , 簡単にいえば差分による データフォーマットだ。アニメーションの ような連続する画像の場合 , 元となる PNG の画像に対する差分データを用意すること で , 必要なデータ量を大幅に減少させるこ とができる。これをさらに次の画像へとく り返していけば , 全体的に差分だけでデー タを生成できる。 ・ MNG の実装バターン 全体としては , MNG をフルセットとして , MNG-LC がサプセット , MNG-VLC が最低 実装と思えばいいだろう。 JNG は本来の M NG では必須だが , MNG-LC と MNG-VLC で はオプショナルな仕様となる。さらに MNG は , 全体のフレームワークとしては PNG の フォーマットに準じた仕様になっているわ けだ。 PNG と MNG のどちらかがどちらか を内包する , といった関係ではない。 つまり実装としては , ・ MNG(JNG や DeIta-PNG を含むフルセ ・ MNG-LC + JNG ・ MNG-LC ・ MNG-VLC + JNG ・ MNG-VLC の 5 通りのパターンがありうる。 MNG のデメリット MNG そして PNG は , おそらくほとんどの 局面で GIF に対してアドバンテージがある。 しかし , 現状の普及度を除いた技術的な側 面で , GIF と比べてひとつだけデメリットと いえる側面がある。そして , それは MNG の 仕様策定や実装が遅れていることと無関係 ではない。 それは , アニメーションを含む GIF に比 べて , あまりにも仕様が大きいという点だ。 これは , 実装の困難さもさることながら , 実際のデータを扱う段階でどうしても処理 が重くなってしまうことでもある。最近の 40 C MAGAZINE 2000 6 CPU 性能の向上を考えたうえで , さらにコ ードの最適化が進めば , それなりに無視で きるオーバヘッドだといえるかもしれない が , GIF に比べて巨大化した仕様の影響は 少なからずあるのではないだろうか。実際 , もっと単純な GIF 代替フォーマットである なら , とっくにアニメーションまで対応で きていてもおかしくないはずだ。 もっとも , その仕様ゆえに PNG や MNG が魅力のあるフォーマットになっていると いう側面もあり , フォーマットの進化と考 えれば十分納得できる部分ではある。 いずれにせよ , 開発者が GIF 以上に実装 に力を注がなくてはならないのは間違いな MNG の特徴 い事実だといえる。 NG の画像を生成することができる。この場 MNG に変換することや , MNG から PNG や J そのため , PNG や JNG の画像をそのまま でもきちんと継承されている。 といっていい。これは PNG だけでなく MNG 逆圧縮のフォーマットであることは必然だ JPEG ではなく GIF の代替である以上 , 可 ・可逆圧縮 名前に適した仕様だといえるだろう。 を行える。まさに Network Graphics という 能であり , オン・ザ・フライで生成や表示 を考慮してシーケンシャルに読み書きが可 MNG のファイルは , ストリーム的な扱い ・ストリーム的に扱える late/Deflate が使用される。 だ。なお実際の圧縮は , PNG に基づいて lnf うやらかなり入念に確認された事項のよう 由でもあるため当然ではあるが , これはど フォーマットを作成することになった理 ・特許的に問題がない は PNG の特徴と一致する部分が多い。 経緯や構造上当然のことだが , MNG の特徴 おまかにまとめると次のようになる。その 概要を踏まえたうえで , MNG の特徴をお 合 , DeIta - PNG を使った差分形式であって も , きちんと変換が可能なことが保証され ている。 また JPEG に関しても , JNG を利用するこ とで MNG(JNG) にそのままの形で変換する ことができる。同じように , JNG のデータ は元の JPEG に戻すことが可能だ。 ・四つのチャネルに対応 赤 , 緑 , 青 , アルフアまでの , 四つのチ ャネルを , それぞれ最大 16 ビットまで保存 することができる。 ・透明度とアルフアチャネル 多くのリッチな画像フォーマットと同じ ように できる。 でなく , 透明度とアルフアチャネルを利用 これにより , ネットワーク上だけ さまざまな環境で使えるだけのフ ォーマットになっているといえるだろう。 ・ガンマや彩度 ガンマや彩度などの情報を扱うことがで き , プラットホーム / 環境に依存しない色 表現が可能になっている。 ・フレームの概念 MNG では画像をフレーム単位で扱い , そ のフレーム間の遅延をサポートしている。 そのため , 各フレームごとに任意のタイミ ングでアニメーション処理をさせることが 可能だ。さらに , 複数の画像を含んだフレ ームの合成を行うこともでき , サプフレー ムではアニメーションも可能なスプライト 機能も利用できる。 ほかにも , 低速なエンコーディング環境 向けにフレームのプライオリティの設定や , フレーム間の類似性を利用して , データ量 の削減も行うなど , フレームの仕様はかな り充実したものになっている。 重要な点として , MNG は現状ではまだ ドラフト状態だということがあげられる。 2000 年 4 月では , 「 Ver. 0.97 , Draft 70 」とか MNG の現状