(57)【要約】【課題】高精細化画像はデータサイズが大きく、更新も容易でない。【解決手段】グラフィックプロセッサ４０２は、メインプロセッサ４００からの画像処理要求に従い、メインメモリ６０に格納されたモデルデータ４１８を用いてレンダリングを行い、カラーバッファ４１４およびＺバッファ４１６を更新する。カラーバッファ４１４およびＺバッファ４１６はいずれも、描画対象画像の複数の解像度に対応する複数の画素平面からなる階層データの構造とする。グラフィックプロセッサ４０２のレンダリング部４０４は、メインプロセッサ４００からの要求に従いレンダリングを行い、階層データ更新部４０６はレンダリングの結果をスケーリング処理し、カラーバッファ４１４およびＺバッファ４１６の各階層に反映させる。【選択図】図２５
2011090648.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行し新たに表示すべき画像の描画のための情報を含む画像処理要求を発行する画像処理要求部と、
描画対象の画像の画素ごとの色情報を保持するカラー値画素平面と、画素ごとの視点からの奥行き情報を保持するＺ値画素平面とを、描画対象画像の複数の解像度に対応させて階層化した階層カラーバッファおよび階層Ｚバッファを記憶する階層データ記憶部と、
前記画像処理要求を受け付け画像処理を実行し、前記階層カラーバッファおよび前記階層Ｚバッファを更新する画像処理部と、を備え、
前記画像処理部は、
前記階層カラーバッファおよび前記階層Ｚバッファから読み出た描画対象の階層および領域のデータをそれぞれ記録する描画用カラーバッファおよび描画用Ｚバッファと、
前記画像処理要求に基づき描画対象の階層および領域を特定して前記描画用カラーバッファおよび前記描画用Ｚバッファにデータを読み出し、前記画像処理要求に基づき画像処理演算を行いデータを更新する描画部と、
更新された前記描画用カラーバッファおよび前記描画用Ｚバッファのデータに対し、前記複数の解像度に対応させてスケーリング処理を施し、前記階層カラーバッファおよび前記階層Ｚバッファの各階層のデータを更新する階層データ更新部と、
を備えたことを特徴とする画像処理装置。
【請求項２】
前記階層カラーバッファおよび前記階層Ｚバッファは、各階層の画素平面を所定のサイズに分割してなるタイルデータと、各階層の分割後の個々の領域であるタイル領域と当該タイル領域が描画対象となったときに用いる前記タイルデータとを対応づけたインデックスデータと、で構成され、
前記階層データ更新部は、描画対象領域を含むタイル領域ごとにタイルデータを各階層に対して新たに生成し、前記インデックスデータにおいて描画対象領域を含むタイル領域に対応づけられたタイルデータを、新たなタイルデータとすることにより、各階層のデータを更新することを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記画像処理部は、前記描画部による画像処理演算に際し、前記描画用カラーバッファおよび前記描画用Ｚバッファの画素値が更新されたか否かの情報を画素ごとに保持する画素更新用マスクをさらに備え、
前記階層データ更新部は、前記画素更新用マスクを参照し、前記タイル領域のうち更新された画素を含むタイル領域を特定し、当該タイル領域のタイルデータを生成することを特徴とする請求項２に記載の画像処理装置。
【請求項４】
前記描画部は、前記階層カラーバッファおよび前記階層Ｚバッファにおいて描画対象の階層に描画対象領域に対応するタイルデータが存在しないとき、当該階層より解像度の小さい別の階層の対応する領域を拡大して前記描画用カラーバッファおよび前記描画用Ｚバッファに読み出して更新し、
前記階層データ更新部は、前記描画対象領域を含む描画対象の階層のタイル領域と当該タイル領域に対し新たに生成したタイルデータとを対応づけたデータを前記インデックスデータに追加することを特徴とする請求項２または３に記載の画像処理装置。
【請求項５】
前記階層データ更新部は、描画対象の階層より高い解像度の階層における描画対象の領域に一つのタイル領域全体が含まれていたら、前記インデックスデータにおいて当該タイル領域に対応づけられたタイルデータを削除することを特徴とする請求項４に記載の画像処理装置。
【請求項６】
前記インデックスデータは、前記階層カラーバッファおよび前記階層Ｚバッファの画素平面とそれに垂直な解像度の軸によって定義される仮想空間において前記階層カラーバッファおよび前記階層Ｚバッファで構成される階層構造体を分割してなる領域ごとに、前記タイル領域ごとのインデックスデータをまとめたインデックスブロックの形式を有することを特徴とする請求項２から５のいずれかに記載の画像処理装置。
【請求項７】
前記インデックスデータは、前記階層構造体を分割してなる領域と、それに対応する前記インデックスブロックとを対応づけたヘッダデータを含み、
前記描画部は、描画対象の領域の情報に基づき前記ヘッダデータを検索し、当該描画対象の領域を含む、前記階層構造体を分割してなる領域を特定したうえ、それに対応づけられた前記インデックスブロックを参照することにより、前記階層カラーバッファおよび前記階層Ｚバッファから前記タイルデータの単位でデータを読み出すことを特徴とする請求項６に記載の画像処理装置。
【請求項８】
前記階層カラーバッファおよび前記階層Ｚバッファは、前記タイル領域と、双方のタイルデータとを対応づけた一つのインデックスデータを共有することを特徴とする請求項２から７のいずれかに記載の画像処理装置。
【請求項９】
前記階層データ更新部は、前記描画部とは独立に前記階層データ記憶部に接続されていることを特徴とする請求項１から８のいずれかに記載の画像処理装置。
【請求項１０】
一度に読み出すタイルデータに対し与えられる連続したアドレスと、前記描画部が前記階層カラーバッファおよび前記階層Ｚバッファからタイルデータ読み出す際に各タイルデータに対し割り当てたアドレスとを対応づけたアドレス変換テーブルを参照し、前記描画部が前記階層カラーバッファおよび前記階層Ｚバッファからデータを読み出す際に指定したアドレスを、前記連続したアドレスに変換するメモリコントローラをさらに備えたことを特徴とする請求項２から９のいずれかに記載の画像処理装置。
【請求項１１】
プログラムを実行し新たに表示すべき画像の描画のための情報を含む画像処理要求を発行するステップと、
描画対象の画像の画素ごとの色情報を保持するカラー値画素平面と、画素ごとの視点からの奥行き情報を保持するＺ値画素平面とを、描画対象画像の複数の解像度に対応させて階層化した階層カラーバッファおよび階層Ｚバッファをメモリに記憶するステップと、
前記画像処理要求を受け付け画像処理を実行し、前記階層カラーバッファおよび前記階層Ｚバッファを更新するステップと、を含み、
前記階層カラーバッファおよび前記階層Ｚバッファを更新するステップは、
前記画像処理要求に基づき描画対象の階層および領域を特定し、前記階層カラーバッファおよび前記階層Ｚバッファからそれぞれデータを読み出して、描画用カラーバッファおよび描画用Ｚバッファに書き込むステップと、
前記画像処理要求に基づき画像処理演算を行い前記描画用カラーバッファおよび前記描画用Ｚバッファのデータを更新するステップと、
更新された前記描画用カラーバッファおよび前記描画用Ｚバッファのデータに対し、前記複数の解像度に対応させてスケーリング処理を施し、前記階層カラーバッファおよび前記階層Ｚバッファの各階層のデータを更新するステップと、
を含むことを特徴とする画像処理方法。
【請求項１２】
プログラムを実行し新たに表示すべき画像の描画のための情報を含む画像処理要求を発行する機能と、
描画対象の画像の画素ごとの色情報を保持するカラー値画素平面と、画素ごとの視点からの奥行き情報を保持するＺ値画素平面とを、描画対象画像の複数の解像度に対応させて階層化した階層カラーバッファおよび階層Ｚバッファをメモリに記憶する機能と、
前記画像処理要求を受け付け画像処理を実行し、前記階層カラーバッファおよび前記階層Ｚバッファを更新する機能と、をコンピュータに実現させることを特徴とするコンピュータプログラムであって、
前記階層カラーバッファおよび前記階層Ｚバッファを更新する機能は、
前記画像処理要求に基づき描画対象の階層および領域を特定し、前記階層カラーバッファおよび前記階層Ｚバッファからそれぞれデータを読み出して、描画用カラーバッファおよび描画用Ｚバッファに書き込む機能と、
前記画像処理要求に基づき画像処理演算を行い前記描画用カラーバッファおよび前記描画用Ｚバッファのデータを更新する機能と、
更新された前記描画用カラーバッファおよび前記描画用Ｚバッファのデータに対し、前記複数の解像度に対応させてスケーリング処理を施し、前記階層カラーバッファおよび前記階層Ｚバッファの各階層のデータを更新する機能と、
をコンピュータに実現させることを特徴とするコンピュータプログラム。
【請求項１３】
プログラムを実行し新たに表示すべき画像の描画のための情報を含む画像処理要求を発行する機能と、
描画対象の画像の画素ごとの色情報を保持するカラー値画素平面と、画素ごとの視点からの奥行き情報を保持するＺ値画素平面とを、描画対象画像の複数の解像度に対応させて階層化した階層カラーバッファおよび階層Ｚバッファをメモリに記憶する機能と、
前記画像処理要求を受け付け画像処理を実行し、前記階層カラーバッファおよび前記階層Ｚバッファを更新する機能と、をコンピュータに実現させることを特徴とするコンピュータプログラムを記録した記録媒体であって、
前記階層カラーバッファおよび前記階層Ｚバッファを更新する機能は、
前記画像処理要求に基づき描画対象の階層および領域を特定し、前記階層カラーバッファおよび前記階層Ｚバッファからそれぞれデータを読み出して、描画用カラーバッファおよび描画用Ｚバッファに書き込む機能と、
前記画像処理要求に基づき画像処理演算を行い前記描画用カラーバッファおよび前記描画用Ｚバッファのデータを更新する機能と、
更新された前記描画用カラーバッファおよび前記描画用Ｚバッファのデータに対し、前記複数の解像度に対応させてスケーリング処理を施し、前記階層カラーバッファおよび前記階層Ｚバッファの各階層のデータを更新する機能と、
をコンピュータに実現させることを特徴とするコンピュータプログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディスプレイに表示する画像を拡大／縮小、または上下左右に移動させる画像処理技術に関する。
【背景技術】
【０００２】
ゲームプログラムを実行するだけでなく、動画を再生できる家庭用エンタテインメントシステムが提案されている。この家庭用エンタテインメントシステムでは、ＧＰＵがポリゴンを用いた三次元画像を生成する（例えば特許文献１参照）。
【０００３】
画像表示の目的に関わらず、画像をいかに効率よく表示するかは常に重要な問題となる。特に高精細な画像を高速に描画するためには様々な工夫が必要となり、例えばテクスチャデータを別に保持しマッピングを効率的に行う手法について提案がなされている（例えば非特許文献１および２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第６５６３９９９号公報
【非特許文献】
【０００５】
【非特許文献１】Sylvain Fefebvre, et. al., Unified Texture Management for Arbitrary Meshes, Repport de recherche, N5210, May 2004, Institut National De Recherche En Informatique Et En Automatique
【非特許文献２】Martin Kraus, et. al., Adaptive Texture Maps, Graphics Hardware (2002), pp1-10, The Eurographics Association
【発明の概要】
【発明が解決しようとする課題】
【０００６】
画像が高精細化しても、データサイズを小さく抑えること、高速に描画することは、画像を応答性良く表示するためには常に重要な課題である。また、画像の一部などを修正する必要が生じた場合、上述のテクスチャマッピングなどデータ構造を工夫する技術を適用したとしても、一度構築したデータ構造を全て更新し直す必要があるなど、更新処理が煩雑になりやすいという問題があった。
【０００７】
本発明はこのような課題に鑑みてなされたものであり、その目的は、サイズの大きな画像であってもデータサイズを抑えるとともに、効率的に生成、表示、修正を行える画像処理技術を提供することにある。
【課題を解決するための手段】
【０００８】
本発明のある態様は画像処理装置に関する。この画像処理装置は、プログラムを実行し新たに表示すべき画像の描画のための情報を含む画像処理要求を発行する画像処理要求部と、描画対象の画像の画素ごとの色情報を保持するカラー値画素平面と、画素ごとの視点からの奥行き情報を保持するＺ値画素平面とを、描画対象画像の複数の解像度に対応させて階層化した階層カラーバッファおよび階層Ｚバッファを記憶する階層データ記憶部と、画像処理要求を受け付け画像処理を実行し、階層カラーバッファおよび階層Ｚバッファを更新する画像処理部と、を備え、画像処理部は、階層カラーバッファおよび階層Ｚバッファから読み出た描画対象の階層および領域のデータをそれぞれ記録する描画用カラーバッファおよび描画用Ｚバッファと、画像処理要求に基づき描画対象の階層および領域を特定して描画用カラーバッファおよび描画用Ｚバッファにデータを読み出し、画像処理要求に基づき画像処理演算を行いデータを更新する描画部と、更新された描画用カラーバッファおよび描画用Ｚバッファのデータに対し、複数の解像度に対応させてスケーリング処理を施し、階層カラーバッファおよび階層Ｚバッファの各階層のデータを更新する階層データ更新部と、を備えたことを特徴とする。
【０００９】
本発明のさらに別の態様は画像処理方法に関する。この画像処理方法は、プログラムを実行し新たに表示すべき画像の描画のための情報を含む画像処理要求を発行するステップと、描画対象の画像の画素ごとの色情報を保持するカラー値画素平面と、画素ごとの視点からの奥行き情報を保持するＺ値画素平面とを、描画対象画像の複数の解像度に対応させて階層化した階層カラーバッファおよび階層Ｚバッファをメモリに記憶するステップと、画像処理要求を受け付け画像処理を実行し、階層カラーバッファおよび階層Ｚバッファを更新するステップと、を含み、階層カラーバッファおよび階層Ｚバッファを更新するステップは、画像処理要求に基づき描画対象の階層および領域を特定し、階層カラーバッファおよび階層Ｚバッファからそれぞれデータを読み出して、描画用カラーバッファおよび描画用Ｚバッファに書き込むステップと、画像処理要求に基づき画像処理演算を行い描画用カラーバッファおよび描画用Ｚバッファのデータを更新するステップと、更新された描画用カラーバッファおよび描画用Ｚバッファのデータに対し、複数の解像度に対応させてスケーリング処理を施し、階層カラーバッファおよび階層Ｚバッファの各階層のデータを更新するステップと、を含むことを特徴とする。
【００１０】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１１】
本発明によると、幅広い解像度で画像を表示するための画像データを効率的に構築できる画像処理装置を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１の形態にかかる情報処理システムの使用環境を示す図である。
【図２】図１の画像処理システムに適用できる入力装置の外観構成を示す図である。
【図３】実施の形態１において使用する画像データの階層構造の概念図である。
【図４】実施の形態１における情報処理装置の構成を示す図である。
【図５】実施の形態１における画像データの流れを模式的に示すである。
【図６】実施の形態１における画像データの先読み処理を説明するための図である。
【図７】実施の形態１において階層データを表示する機能を有する制御部の構成を詳細に示す図である。
【図８】実施の形態１で用いる階層データのデータ構造を模式的に示す図である。
【図９】実施の形態１において表示対象の画像ファイルを生成する機能を有する制御部の構成を示す図である。
【図１０】実施の形態１において画像に冗長性がある場合の元の画像とタイル画像との関係を説明する図である。
【図１１】実施の形態１において画像に冗長性がある場合の元の画像とタイル画像との関係の別の例を説明する図である。
【図１２】実施の形態１において冗長性によるタイル画像の共有をヘッダによって定義する手法を説明する図である。
【図１３】実施の形態１において冗長性によるタイル画像の共有をインデックスブロックによって定義する手法を説明する図である。
【図１４】図９で示した制御部が画像ファイルを生成する処理手順を示すフローチャートである。
【図１５】実施の形態１において制御部が画像ファイルを表示するための処理手順を示すフローチャートである。
【図１６】実施の形態１において画像を修正する機能を有する制御部の構成を示す図である。
【図１７】実施の形態１における画像の修正例を示す図である。
【図１８】図１７のような修正におけるインデックスブロックのポインタの変化を模式的に示す図ある。
【図１９】実施の形態１において高解像度側に階層を追加する場合の処理を説明するための図である。
【図２０】実施の形態１において追加すべき階層が属するインデックスブロックが存在しなかった場合のヘッダおよびインデックスブロックの変化を説明する図である。
【図２１】実施の形態１において既存の画像に新たな領域を追加する処理を説明するための図である。
【図２２】実施の形態１において新たな領域を追加する場合のヘッダおよびインデックスブロックの変化を説明する図である。
【図２３】実施の形態１において階層構造体の頂点側に階層を追加する際にヘッダにおいて定義される領域の分割手法を説明する図である。
【図２４】実施の形態１の画像処理装置においてユーザが画像を修正、改変する際の処理手順を示すフローチャートである。
【図２５】実施の形態２における情報処理装置のうち制御部およびメインメモリの構成をより詳細に示す図である。
【図２６】実施の形態２において階層データへのレンダリングの処理手順を示すフローチャートである。
【図２７】実施の形態２においてスケーリング処理を行うスケーラをメインメモリに内蔵した場合の装置構成を示す図である。
【図２８】実施の形態２におけるＧＰＵバッファのアドレッシングの様子を示す図である。
【図２９】実施の形態２におけるＧＰＵバッファのアドレッシングの様子を示す図である。
【発明を実施するための形態】
【００１３】
実施の形態１
本実施の形態において処理対象とする画像のデータは、原画像を複数段階に縮小して生成した異なる解像度の画像からなる階層構造を有する。各階層の画像は一又は複数のタイル画像に分割する。たとえば最も解像度の低い画像は１つのタイル画像で構成し、最も解像度の高い原画像は、最も多い数のタイル画像で構成する。画像表示時は、描画に使用しているタイル画像を、表示画像が所定の解像度になったときに異なる階層のタイル画像に切り替えることで、拡大表示または縮小表示を迅速に行う。
【００１４】
まず、このような階層構造を有する画像の基本的な表示態様について説明する。図１は、本発明の実施の形態を適用できる情報処理システム１の使用環境を示す。情報処理システム１は、画像処理を含むアプリケーションプログラムを実行する情報処理装置１０と、情報処理装置１０による処理結果を出力する表示装置１２とを備える。表示装置１２は、画像を出力するディスプレイおよび音声を出力するスピーカを有するテレビであってよい。
【００１５】
表示装置１２は、情報処理装置１０に有線ケーブルで接続されてよく、また無線ＬＡＮ（Local Area Network）などにより無線接続されてもよい。情報処理システム１において、情報処理装置１０は、ケーブル１４を介してインターネットなどの外部ネットワークに接続し、階層化された圧縮画像データを含むコンテンツなどをダウンロードして取得してもよい。なお情報処理装置１０は、無線通信により外部ネットワークに接続してもよい。
【００１６】
情報処理装置１０は、ユーザからの要求に応じて、表示装置１２のディスプレイに表示する画像の拡大／縮小処理や、上下左右方向への移動処理など、表示領域を変更する処理を行う。ユーザが、ディスプレイに表示された画像を見ながら入力装置を操作すると、入力装置が、表示領域の変更要求信号を情報処理装置１０に送信する。
【００１７】
図２は、入力装置２０の外観構成を示す。入力装置２０は、ユーザが操作可能な操作手段として、十字キー２１、アナログスティック２７ａ、２７ｂと、４種の操作ボタン２６を備える。４種の操作ボタン２６は、○ボタン２２、×ボタン２３、□ボタン２４および△ボタン２５から構成される。
【００１８】
情報処理システム１において、入力装置２０の操作手段には、表示画像の拡大／縮小要求、および上下左右方向へのスクロール要求を入力するための機能が割り当てられる。たとえば、表示画像の拡大／縮小要求の入力機能は、右側のアナログスティック２７ｂに割り当てられる。ユーザはアナログスティック２７ｂを手前に引くことで、表示画像の縮小要求を入力でき、また手前から押すことで、表示画像の拡大要求を入力できる。また、表示領域の移動要求の入力機能は、十字キー２１に割り当てられる。ユーザは十字キー２１を押下することで、十字キー２１を押下した方向への移動要求を入力できる。なお、画像変更要求の入力機能は別の操作手段に割り当てられてもよく、たとえばアナログスティック２７ａに、スクロール要求の入力機能が割り当てられてもよい。
【００１９】
また後に述べる各種機能を実現するため、入力装置２０にはさらに、画像に表示されたカーソルを移動させたり、ファイルやコマンドを選択したりする機能も割り当てる。あるいは入力装置２０は、ポインティングデバイス、マウス、キーボード、タッチパネルなど一般的な入力装置で実現してもよい。上述したような機能の割り当ては、入力装置２０の種類によって適宜決定してよい。
【００２０】
入力装置２０は、入力された表示領域変更要求信号などを情報処理装置１０に伝送する機能をもち、本実施の形態では情報処理装置１０との間で無線通信可能に構成される。入力装置２０と情報処理装置１０は、Bluetooth（ブルートゥース）（登録商標）プロトコルやIEEE802.11プロトコルなどを用いて無線接続を確立してもよい。なお入力装置２０は、情報処理装置１０とケーブルを介して接続して、表示領域変更要求信号などを情報処理装置１０に伝送してもよい。
【００２１】
図３は、本実施の形態において使用する画像データの階層構造の概念図を示す。画像データは、深さ（Ｚ軸）方向に、第０階層３０、第１階層３２、第２階層３４および第３階層３６からなる階層構造を有する。なお同図においては４階層のみ示しているが、階層数はこれに限定されない。以下、このような階層構造をもつ画像データを「階層データ」とよぶ。ただし同図の階層データは概念的なものであり、実際には後に述べるように複数のデータセットで階層データを表現する。
【００２２】
図３に示す階層データは４分木の階層構造を有し、各階層は１以上のタイル画像３８で構成される。すべてのタイル画像３８は同じ画素数をもつ同一サイズに形成され、たとえば２５６×２５６画素を有する。各階層の画像データは、一つの画像を異なる解像度で表現しており、最高解像度をもつ第３階層３６の原画像を複数段階に縮小して、第２階層３４、第１階層３２、第０階層３０の画像データが生成される。たとえば第Ｎ階層の解像度（Ｎは０以上の整数）は、左右（Ｘ軸）方向、上下（Ｙ軸）方向ともに、第（Ｎ＋１）階層の解像度の１／２であってよい。
【００２３】
情報処理装置１０において、階層データは、所定の圧縮形式で圧縮された状態で記憶装置に保持されており、ディスプレイに表示される前に記憶装置から読み出されてデコードされる。本実施の形態の情報処理装置１０は、複数種類の圧縮形式に対応したデコード機能を有し、たとえばＳ３ＴＣ形式、ＪＰＥＧ形式、ＪＰＥＧ２０００形式の圧縮データをデコード可能とする。
【００２４】
階層データの階層構造は、図３に示すように、左右方向をＸ軸、上下方向をＹ軸、深さ方向をＺ軸として設定され、仮想的な３次元空間を構築する。情報処理装置１０は、入力装置２０から供給される表示領域変更要求信号から表示画像の変更量を導出すると、その変更量を用いて仮想空間におけるフレームの４隅の座標（フレーム座標）を導出する。仮想空間におけるフレーム座標は、後述するメインメモリへの圧縮データのロードおよび表示画像の生成処理に利用される。なお、仮想空間におけるフレーム座標の代わりに、情報処理装置１０は、階層を特定する情報と、その階層におけるテクスチャ座標（ＵＶ座標）を導出してもよい。以下、階層特定情報およびテクスチャ座標の組み合わせも、フレーム座標と呼ぶ。
【００２５】
図４は情報処理装置１０の構成を示している。情報処理装置１０は、無線インタフェース４０、スイッチ４２、表示処理部４４、ハードディスクドライブ５０、記録媒体装着部５２、ディスクドライブ５４、メインメモリ６０、バッファメモリ７０および制御部１００を有して構成される。表示処理部４４は、表示装置１２のディスプレイに表示するデータをバッファするフレームメモリを有する。
【００２６】
スイッチ４２は、イーサネットスイッチ（イーサネットは登録商標）であって、外部の機器と有線または無線で接続して、データの送受信を行うデバイスである。スイッチ４２は、ケーブル１４を介して外部ネットワークに接続し、サーバからコンテンツのデータなどを受信できるように構成される。またスイッチ４２は無線インタフェース４０に接続し、無線インタフェース４０は、所定の無線通信プロトコルで入力装置２０と接続する。入力装置２０においてユーザから入力された信号は、無線インタフェース４０、スイッチ４２を経由して、制御部１００に供給される。
【００２７】
ハードディスクドライブ５０は、データを記憶する記憶装置として機能する。スイッチ４２を介して受信された階層データは、ハードディスクドライブ５０に格納される。記録媒体装着部５２は、メモリカードなどのリムーバブル記録媒体が装着されると、リムーバブル記録媒体からデータを読み出す。ディスクドライブ５４は、読出専用のＲＯＭディスクが装着されると、ＲＯＭディスクを駆動して認識し、データを読み出す。ＲＯＭディスクは、光ディスクや光磁気ディスクなどであってよい。階層データはこれらの記録媒体に格納されていてもよい。
【００２８】
制御部１００は、マルチコアＣＰＵを備え、１つのＣＰＵの中に１つの汎用的なプロセッサコアと、複数のシンプルなプロセッサコアを有する。汎用プロセッサコアはＰＰＵ（PowerPC Processor Unit）と呼ばれ、残りのプロセッサコアはＳＰＵ（Synergistic Processor Unit）と呼ばれる。
【００２９】
制御部１００は、メインメモリ６０およびバッファメモリ７０に接続するメモリコントローラを備える。ＰＰＵはレジスタを有し、演算実行主体としてメインプロセッサを備えて、実行するアプリケーションにおける基本処理単位としてのタスクを各ＳＰＵに効率的に割り当てる。なお、ＰＰＵ自身がタスクを実行してもよい。ＳＰＵはレジスタを有し、演算実行主体としてのサブプロセッサとローカルな記憶領域としてのローカルメモリを備える。ローカルメモリは、バッファメモリ７０として使用されてもよい。
【００３０】
メインメモリ６０およびバッファメモリ７０は記憶装置であり、ＲＡＭ（ランダムアクセスメモリ）として構成される。ＳＰＵは制御ユニットとして専用のＤＭＡ（Direct Memory Access）コントローラをもち、メインメモリ６０とバッファメモリ７０の間のデータ転送を高速に行うことができ、また表示処理部４４におけるフレームメモリとバッファメモリ７０の間で高速なデータ転送を実現できる。本実施の形態の制御部１００は、複数のＳＰＵを並列動作させることで、高速な画像処理機能を実現する。表示処理部４４は、表示装置１２に接続されて、ユーザからの要求に応じた画像処理結果を出力する。
【００３１】
本実施の形態の情報処理装置１０は、表示画像の拡大／縮小処理や表示領域の移動処理を行う際に表示画像をスムーズに変更させるために、圧縮画像データの一部をハードディスクドライブ５０からメインメモリ６０にロードしておく。また、メインメモリ６０にロードした圧縮画像データのさらに一部をデコードしてバッファメモリ７０に格納しておく。これにより、後の必要なタイミングで、表示画像の生成に使用する画像を瞬時に切り替えることが可能となる。
【００３２】
図５は本実施の形態における画像データの流れを模式的に示している。まず階層データはハードディスクドライブ５０に格納されている。ハードディスクドライブ５０に代わり、記録媒体装着部５２やディスクドライブ５４に装着された記録媒体が保持していてもよい。あるいは、情報処理装置１０がネットワークを介して接続した画像サーバから階層データをダウンロードするようにしてもよい。ここでの階層データは上述のとおり、Ｓ３ＴＣ形式などによる固定長圧縮、あるいはＪＰＥＧ形式などによる可変長圧縮がなされている。
【００３３】
この階層データのうち、一部の画像データを圧縮した状態のままメインメモリ６０にロードする（Ｓ１０）。ここでロードする領域は、現在の表示画像の仮想空間における近傍や、画像の内容、ユーザの閲覧履歴等に基づいて、高頻度で表示要求がなされると予測される領域など、あらかじめ定めた規則によって決定する。ロードは、画像変更要求がなされたときのみならず、例えば所定の時間間隔で随時行う。これによりロード処理が一時期に集中しないようにする。
【００３４】
次に、メインメモリ６０に格納されている圧縮画像データのうち、表示に必要な領域のタイル画像、または必要と予測される領域のタイル画像のデータをデコードし、バッファメモリ７０に格納する（Ｓ１２）。バッファメモリ７０は、少なくとも２つのバッファ領域７２、７４を含む。各バッファ領域７２、７４のサイズは、フレームメモリ９０のサイズよりも大きく設定され、入力装置２０から表示領域変更要求信号が入力された場合に、ある程度の量の変更要求に対しては、バッファ領域７２、７４に展開した画像データで表示画像を生成できるようにする。
【００３５】
バッファ領域７２、７４の一方は、表示画像の生成に用いる画像を保持するための表示用バッファであり、他方は、以後、必要と予測される画像を準備するためのデコード用バッファである。図５の例では、バッファ領域７２が表示用バッファ、バッファ領域７４がデコード用バッファで、表示領域６８が表示されているものとする。後述する先読み処理によってデコード用バッファに格納する画像は、表示用バッファに格納されている画像と同一階層の画像でもよいし、縮尺の異なる別階層の画像でもよい。
【００３６】
次に、表示用バッファであるバッファ領域７２に格納された画像のうち表示領域６８の画像を、フレームメモリ９０に描画する（Ｓ１４）。この間に、新たな領域の画像が必要に応じてデコードされ、バッファ領域７４に格納される。格納が完了したタイミングや表示領域６８の変更量などに応じて、表示用バッファとデコード用バッファを切り替える（Ｓ１６）。これにより、表示領域の移動や縮尺率の変更などに対し表示画像をスムーズに切り替えることができる。
【００３７】
図６は、先読み処理を説明するための図である。図６は、階層データの構造を示しており、各階層はＬ０（第０階層）、Ｌ１（第１階層）、Ｌ２（第２階層）、Ｌ３（第３階層）と表現されている。図６に示す階層データ構造において、深さ（Ｚ軸）方向における位置は解像度を示し、Ｌ０に近い位置ほど解像度が低く、Ｌ３に近い位置ほど解像度は高い。なおディスプレイに表示される画像の大きさに注目すると、深さ方向における位置は、縮尺率に対応し、Ｌ３の表示画像の縮尺率を１とすると、Ｌ２における縮尺率は１／４、Ｌ１における縮尺率は１／１６となり、Ｌ０における縮尺率は１／６４となる。
【００３８】
したがって深さ方向において、表示画像がＬ０側からＬ３側へ向かう方向に変化する場合、表示画像は拡大していき、Ｌ３側からＬ０側へ向かう方向に変化する場合は、表示画像は縮小していく。矢印８０は、ユーザからの表示領域変更要求信号が、表示画像の縮小を要求しており、縮尺率１／４（Ｌ２）をまたいだ様子を示している。情報処理装置１０では、タイル画像３８として用意しているＬ１、Ｌ２の深さ方向の位置を、深さ方向の先読み境界として設定し、画像変更要求信号が先読み境界をまたぐと、先読み処理を開始する。
【００３９】
表示画像の縮尺率がＬ２の近傍にある場合、表示画像は、Ｌ２（第２階層）のタイル画像を用いて作成される。具体的には、表示する画像の縮尺率が、Ｌ１タイル画像とＬ２タイル画像の切替境界８２と、Ｌ２タイル画像とＬ３タイル画像の切替境界８４の間にある場合に、Ｌ２タイル画像が利用される。したがって、矢印８０に示すように画像の縮小処理が要求されると、Ｌ２のタイル画像が拡大された画像から、縮小された画像に変換されて表示される。一方、画像変更要求信号から予測される将来必要なタイル画像３８を特定して、デコードしておく。図６の例では、表示領域変更要求信号による要求縮尺率がＬ２をまたいだときに、情報処理装置１０は、縮小方向にあるＬ１の対応するタイル画像３８をハードディスクドライブ５０またはメインメモリ６０から先読みしてデコードし、バッファメモリ７０に書き込む。
【００４０】
なお以上は深さ方向の先読み処理について説明したが、上下左右方向の先読み処理についても同様に処理される。具体的には、バッファメモリ７０に展開されている画像データに先読み境界を設定しておき、画像変更要求信号による表示位置が先読み境界をまたいだときに、先読み処理が開始されるようにする。
【００４１】
図７は本実施の形態において、上述の階層データを表示する機能を有する制御部１００ａの構成を詳細に示している。制御部１００ａは、入力装置２０からユーザが入力した情報を取得する入力情報取得部１０２、新たに表示すべき領域を含むタイル画像を特定するタイル画像特定部１１０、新たにロードすべき画像データを決定するロードブロック決定部１０６、必要な画像ブロックをハードディスクドライブ５０からロードするロード部１０８を含む。制御部１００ａはさらに、圧縮画像データをデコードするデコード部１１２、および表示画像を描画する表示画像処理部１１４を含む。
【００４２】
図７において、さまざまな処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、ＣＰＵ（Central Processing Unit）、メモリ、その他のＬＳＩで構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。既述したように、制御部１００は１つのＰＰＵと複数のＳＰＵとを有し、ＰＰＵおよびＳＰＵがそれぞれ単独または協同して、各機能ブロックを構成できる。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。
【００４３】
入力情報取得部１０２は、ユーザが入力装置２０に対して入力した、画像表示の開始／終了、表示領域の移動、表示画像の拡大、縮小などの指示内容を取得する。タイル画像特定部１１０は、現在の表示領域のフレーム座標とユーザが入力した表示領域変更要求の情報に従い、新たに表示すべき領域を含むタイル画像を特定する。そして当該タイル画像が既にメインメモリ６０にロードされていれば、デコード部１１２に、ロードされていなければロードブロック決定部１０６に、当該情報を供給する。タイル画像特定部１１０はその時点の表示画像の描画に必要な画像の他、以後必要と予測されるタイル画像も特定してよい。
【００４４】
ロードブロック決定部１０６は、タイル画像特定部１１０からの情報に基づき、ハードディスクドライブ５０からメインメモリ６０へ新たにロードすべき、複数のタイル画像からなる画像ブロックを特定し、ロード部１０８にロード要求を発行する。ロードブロック決定部１０６は、ロード部１０８がロード処理中でない状態において、例えば所定の時間間隔、あるいは、ユーザが表示領域変更要求を行った際など、所定のタイミングでロード要求を行ってもよい。ロード部１０８は、ロードブロック決定部１０６からの要求に従い、実際のロード処理を行う。
【００４５】
デコード部１１２は、タイル画像特定部１１０から取得したタイル画像の情報に基づき、メインメモリ６０からタイル画像のデータを読み出しデコードし、デコード用バッファまたは表示用バッファにデコード後のデータを格納する。表示画像処理部１１４は、新たな表示画像のフレーム座標に基づき、バッファメモリ７０の表示用バッファから対応する画像データを読み出し、表示処理部４４のフレームメモリに描画する。
【００４６】
次に、これまで述べた階層構造を有する画像データの表示技術において、画像データをより効率的に構築し出力するための実施の形態について説明する。図８は本実施の形態における階層データのデータ構造を模式的に示している。  本実施の形態では階層データを、ヘッダ１５０、インデックスブロック１６０、タイル画像１７０、の３つのデータからなる構造とする。ヘッダ１５０およびインデックスブロック１６０は、階層データが形成する仮想空間内での位置に基づき、処理対象のタイル画像を特定するためのインデックスである。本実施の形態では、仮想空間における階層構造を領域分割し、領域ごとにタイル画像データへのインデックスをまとめることにより、タイル画像へのアクセスを効率化する。
【００４７】
ヘッダ１５０は、図３に示したような、仮想空間におけるピラミッド状の階層構造体を分割してなる複数の領域を定義し、領域ごとにインデックスブロック１６０のいずれかへのポインタが設定されたデータである。図８に示すヘッダ１５０において三角形１５１は階層構造体を横から見た形状を示しており、水平な破線は各階層の画像１５４ａ、１５４ｂ、１５４ｃ、１５４ｄ、１５４ｅ、・・・を示している。このような階層構造体を、例えば実線で示すように領域分割し、領域１５２ａ、領域１５２ｂ、領域１５２ｃなどの領域を定義する。ヘッダ１５０では原則として、各領域に対してインデックスブロック１６０のいずれかへのポインタが設定される。
【００４８】
図８の例は、領域１５２ａに対しインデックスブロック１６０ａへのポインタ（矢印Ａ）、領域１５２ｂに対しインデックスブロック１６０ｂへのポインタ（矢印Ｂ）、領域１５２ｃに対しインデックスブロック１６０ｃへのポインタ（矢印Ｃ）が設定されている様子を示している。ただし後に述べるように、ヘッダで定義される領域の一部に対して特定のインデックスブロックを指さないヌルポインタを設定してもよい。
【００４９】
インデックスブロック１６０は、ヘッダ１５０で定義された構造体の領域ごとに生成され、各領域に属する複数階層の画像上の位置に対しタイル画像１７０のいずれかへのポインタが設定されるデータである。図８に示すように、ヘッダ１５０における一つの領域に対応する一つのインデックスブロックは、当該領域に属する、複数階層の画像の少なくとも一部の領域のデータを含む。同図の例では、領域１５２ａに対応するインデックスブロック１６０ａは、領域１５２ａに属する２階層分の画像１５４ａ、１５４ｂ全体のデータを保持する。領域１５２ｂに対応するインデックスブロック１６０ｂは、領域１５２ｂに属する３階層分の画像１５４ｃ、１５４ｄ、１５４ｅ全体のデータを保持する。
【００５０】
領域１５２ｃに対応するインデックスブロック１６０ｃは、領域１５２ｃに属する３階層分の画像１５４ｆ、１５４ｇ、１５４ｈの一部の領域のデータを保持する。そして各階層の画像平面をタイル画像のサイズに分割して生成したタイル領域ごとに、当該タイル領域の実際の画像データであるタイル画像１７０のいずれかを指すポインタを保持する。ただし後述するように、一つのタイル領域の描画を複数の情報を用いて行うようにした場合は、一つのタイル領域が複数のタイル画像を指すポインタを保持してもよい。同図において各インデックスブロック１６０ａ、１６０ｂ、１６０にそれぞれ示される３平面は、対応する領域に属する階層に対応し、各階層上の小さい矩形のそれぞれがタイル領域を示している。
【００５１】
図８の例は、インデックスブロック１６０ｂにおいて、タイル領域１６４ａに対しタイル画像１７０ａへのポインタ（矢印Ｄ）が設定され、タイル領域１６４ｂに対しタイル画像１７０ｂへのポインタ（矢印Ｅ）が設定されている様子を示している。ただし後に述べるように、インデックスブロックで定義されるタイル領域の一部は特定のタイル画像へのポインタを設定せずヌルポインタとしてもよい。タイル画像１７０は、圧縮されたタイル画像のデータである。このように階層データを構成することにより、タイル画像特定部１１０は、表示すべき画像フレームの仮想空間におけるフレーム座標から、ヘッダ１５０、インデックスブロック１６０、と辿り、当該画像フレームに含まれるタイル画像１７０を特定することができる。
【００５２】
図８では、インデックスブロック１６０ａ、１６０ｂ、１６０ｃはそれぞれ、４×４、８×８、１６×１６のタイル領域で構成される３階層の画像領域分のインデックスデータ、すなわちタイル画像１７０へのポインタを設定できるように示されている。このように、一つのインデックスブロック１６０で定義できるタイル領域の数を統一すると、例えばハードディスクドライブ５０からメインメモリ６０へインデックスブロック１６０のいずれかを読み出す際、どのインデックスブロックであっても必要となる記憶領域のサイズが変化せず、記憶領域の管理が容易になる。
【００５３】
したがって、ヘッダ１５０において定義される領域は、インデックスブロック１６０が同じサイズとなるように生成されることが望ましい。階層データが図３で示すように、第０階層が１つのタイル画像である４分木の階層構造を有するとき、図８の領域１５２ｂに属する３階層の画像、すなわち第２階層の画像１５４ｃ、第３階層の画像１５４ｄ、第４階層の画像１５４ｅはそれぞれ、４×４、８×８、１６×１６のタイル領域からなる。
【００５４】
したがって一つのインデックスブロック１６０で定義できる領域を上述のとおり４×４、８×８、１６×１６のタイル領域からなる画像領域とした場合、当該３階層の画像全体のデータを、そのまま１つのインデックスブロック１６０ｂに納めることができる。すなわち、階層データにおける第２階層の画像１５４ｃ、第３階層の画像１５４ｄ、第４階層の画像１５４ｅの全領域を、インデックスブロック１６０ｂの第０階層１６２ｄ、第１階層１６２ｅ、第２階層１６２ｆの全領域にそれぞれ対応させて、タイル画像へのポインタを設定することができる。
【００５５】
一方、ヘッダ１５０における領域１５２ａは第０階層および第１階層の２階層の画像１５４ａ、１５４ｂを含み、第０階層の画像１５４ａは１つのタイル領域、第１階層の画像１５４ｂは２×２のタイル領域からなるため、１つのインデックスブロック１６０ａで定義できる領域と比較し、階層数およびタイル領域の数が少ない。このような場合、階層データにおける第０階層の画像１５４ａをインデックスブロック１６０ａの第０階層１６２ａの一部、例えば左上の１つのタイル領域に対応させ、タイル画像へのポインタを設定する。第１階層の画像１５４ｂも同様に、インデックスブロック１６０ａの第１階層１６２ｂの一部、例えば左上の２×２のタイル画像に対応させ、タイル画像へのポインタを設定する。そして、インデックスブロック１６０ａにおけるその他のタイル領域はヌルポインタを設定する。
【００５６】
ヘッダ１５０における領域１５２ｃは第５階層、第６階層、第７階層の３階層の画像１５４ｆ、１５４ｇ、１５４ｈを含むが、これらの画像は１つのインデックスブロック１６０で定義できるタイル領域の数より多いタイル画像からなるため、図８に示すように画像平面を分割することにより、各階層の一部の領域をインデックスブロック１６０ｃの第０階層、第１階層、第２階層にそれぞれ対応させる。各インデックスブロックに属する複数階層の画像は解像度の異なる同一の画像領域となるように領域分割する。
【００５７】
なお図８で示した階層構造体の領域分割の態様はあくまで例示であり、元の階層データの構造や望ましいインデックスブロックのデータサイズなどによって適宜決定してよい。また後述するように、元の画像の更新に応じて、階層データの分割態様を変化させてもよい。
【００５８】
次に、これまで述べたデータ構造を有する階層データを含む画像ファイルを生成する態様について説明する。この態様も図１で示した情報処理システム、図４で示した情報処理装置１０と同様の装置構成で実現できる。図９は、本実施の形態において表示対象の画像ファイルを生成する機能を有する制御部１００ｂの構成を示している。なお制御部１００ｂは図７の制御部１００ａに示した、画像表示を行うための機能を備えていてもよいが、ここでは図示を省略している。一方、図９に示した機能のみを有する制御部１００ｂを備えた情報処理装置１０を、表示機能を発揮する情報処理装置とは別に設けてもよい。
【００５９】
制御部１００ｂは、ハードディスクドライブ５０に格納された画像データを読み出し階層化する画像階層生成部１２０、各階層の画像をタイル画像に分割する画像分割部１２２、各階層の画像を解析し冗長性を検出する冗長性検出部１２４、冗長性を考慮して、ヘッダ、インデックスブロックのデータを生成するヘッダ・インデックスブロック生成部１２６、および最終的に出力する、タイル画像、ヘッダ、インデックスブロックを含む画像ファイルを生成する画像ファイル生成部１２８を含む。
【００６０】
画像階層生成部１２０は、ハードディスクドライブ５０から、ファイル作成対象の画像のデータを読み出す。この画像データはある解像度を有する一枚の画像のデータでよい。処理対象の画像データは、図に示すように入力装置２０を介してユーザが指定してもよいし、原画像を取得した別の機能ブロック（図示せず）からの要求を受け付けてもよい。画像階層生成部は１２０はさらに、読み出した画像のデータを所定の解像度へ段階的に縮小した画像のデータを生成することにより、元の画像を含めた階層構造の画像データを生成する。
【００６１】
画像分割部１２２は、各階層の画像を所定のサイズに分割してタイル画像のデータを生成する。生成したタイル画像はメインメモリ６０に格納する。この際、各タイル画像が元の画像のどの位置の画像であるかを、識別番号を付与するなどして管理する。
【００６２】
冗長性検出部１２４は各階層の画像を解析することにより、同一階層内、および階層間で画像の冗長性を検出する。同一階層内での冗長性としては例えば、複数のタイル領域に渡って同じタイル画像のデータを用いることができる場合が考えられる。また階層間での冗長性としては、低解像度の階層の画像を拡大した画像と高解像度の階層の画像とで見た目の差が大きくない場合が考えられる。このように冗長性がある領域は、個々にタイル画像のデータを持たずとも、あるタイル画像のデータを流用することで表示が可能である。このようにすることで、画像データの圧縮を実現する。具体的な手法は後に述べる。
【００６３】
ヘッダ・インデックスブロック生成部１２６は、上述のヘッダおよびインデックスブロックのデータを作成する。冗長性が検出されない画像では上述のように、ヘッダで定義される全ての領域に対しインデックスブロックのいずれかへのポインタが設定され、さらにインデックスブロックで定義される全てのタイル領域に対し、タイル画像へのポインタが設定される。一方、冗長性を有する画像領域については、ヘッダあるいはインデックスブロックにヌルポインタを設定することでタイル画像のデータ共有を実現する。
【００６４】
画像ファイル生成部１２８は、インデックスブロックにおいて設定されたポインタが指すタイル画像のデータを読み出し、順につなげることによって、最終的な画像データを生成する。そして画像データ、ヘッダ、インデックスブロックを含む画像ファイルを生成して、最終的な出力データとする。上述のように、画像の冗長性を検出して、複数の領域の描画に一つのタイル画像のデータを用いるようにすることにより、画像データのサイズを効率的に圧縮することができる。本実施の形態では、解像度の異なる同一の画像を画像データに含むため、異なる階層の画像であっても同じタイル画像のデータを利用することによってデータの高率圧縮が可能である。
【００６５】
図１０は画像に冗長性がある場合の元の画像とタイル画像との関係を説明する図である。同図において画像１８０ａおよび画像１８０ｂは、同じ領域を表す２つの階層の画像である。すなわち画像１８０ａは画像１８０ｂを縮小して得られる。画像１８０ａおよび画像１８０ｂ上に示した格子はタイル画像に分割する際の境界線である。同図では説明のために画像１８０ａ、１８０ｂのタイル領域およびタイル画像１７０のそれぞれに識別番号を付与している。
【００６６】
同図において画像１８０ａおよび画像１８０ｂには、楕円形と三角形の図形が描かれ、それ以外の領域は背景として単色に塗りつぶされているとする。そのような画像の各領域から切り出されたタイル画像１７０のデータは、本来の画像上の並びと独立してメインメモリ６０などに保持しておく。ここで画像１８０ａおける単色の塗りつぶし領域であるタイル領域「４」は、そこから切り出されたタイル画像「４」と対応する。このようなとき、インデックスブロック１６０において、タイル領域「４」に対しタイル画像「４」へのポインタを設定する。
【００６７】
画像１８０ｂは、画像１８０ａの高解像度画像であるから、２つの画像の各タイル領域の対応関係は拡大率によって容易に導出できる。同図では例えば、画像１８０ａのタイル領域「４」と、画像１８０ｂのタイル領域「１５」、「１６」、「１９」、「２０」が対応する。したがって、画像１８０ａのタイル領域「４」が単色の塗りつぶし領域であれば、画像１８０ｂのタイル領域「１５」、「１６」、「１９」、「２０」は全て塗りつぶし領域であることが特定できる。すなわちこれらの領域の表示にはタイル画像「４」があれば済むことになる。
【００６８】
同様に、画像１８０ａを画像１８０ｂの解像度まで拡大したときに塗りつぶし領域となる領域を、画像１８０ａを走査することによって判別すると、タイル領域「３」の下半分の領域、すなわち画像１８０ｂのタイル領域「１７」、「１８」が塗りつぶし領域であることがわかる。したがってこれらの領域もタイル画像「４」を用いることにより表示することが可能である。このようにタイル画像を共有することにより、タイル画像のデータ圧縮が可能となる。さらに後に述べるように、低解像度のタイル画像によって表示可能な高解像度の画像の領域は特定のポインタを持たないようにすることで、ヘッダやインデックスブロックのデータ圧縮も可能となる。
【００６９】
本実施の形態で用いる画像データは、複数の解像度の同一の画像を処理対象とするため、上記の冗長性検出処理を最も小さい解像度の画像から順に繰り返すことにより、高解像度の大きなサイズの画像についても、計算負荷を抑えて冗長性を有する領域を特定することができる。なお上述の説明では単色の塗り潰し領域を検出して、同じ塗りつぶし領域でタイル画像のデータを共有する例を述べたが、同様の処理は、およそ単色の領域、ランダムな模様や繰り返しの模様のみの領域などでも有効である。これらの領域の検出は、領域ごとのカラーヒストグラムや周波数解析などによって低解像度の画像から実施していく。
【００７０】
図１１は冗長性がある場合の元の画像とタイル画像との関係の別の例を説明する図である。画像１８０ａおよび画像１８０ｂは図１０で示したのと同様である。同図において画像１８０ａのタイル領域「２」は、画像１８０ｂのタイル領域「７」、」「８」、「１１」、「１２」に対応する。画像１８０ｂは画像１８０ａより高解像度の画像であるため、これらの領域の４つのタイル画像は領域「２」から切り出したタイル画像「２」を単に拡大した画像より多くの情報を含むのが一般的である。
【００７１】
しかし元の画像が写真などで、画像１８０ｂの領域「７」、「８」、「１１」、「１２」にピントが合っていない場合など、タイル画像「２」を拡大した画像と大きな差がない場合がある。このような場合、上述の塗りつぶし領域と同様、領域「７」、」「８」、「１１」、「１２」を表示する際、そこから切り出したタイル画像ではなくタイル画像「２」を用い、それを拡大して表示しても、元の画像と大差ない画像を表示させることができる。このような冗長性は、低解像度画像を拡大した画像と高解像度の画像との差分がしきい値以下である場合や、高解像度の画像を周波数解析したとき、しきい値以下の周波数帯のみ含む場合などに検出できる。
【００７２】
図１２は、上述のような冗長性によるタイル画像の共有をヘッダによって定義する手法を説明する図である。このときヘッダ１５０ａで定義される階層構造体の領域中、別の領域に含まれる階層の画像を用いて表示が可能な領域は、特定のインデックスブロックへのポインタを設定せずヌルポインタとする。図１２では、ヘッダ１５０ａの構造体において、網掛けで示した領域には特定のインデックスブロックへのポインタ、すなわち有効なポインタが設定され、白抜きの領域にはヌルポインタを設定するとする。
【００７３】
このようなヘッダ１５０ａを有する階層データにおいて画像領域１５６を表示する場合、当該画像を含む領域はヌルポインタとなっている。この場合、階層データの仮想空間を、画像が縮小される方向に辿っていき、同じ画像領域１５６の縮小画像を含み有効なポインタが設定されている領域を探索する（矢印Ｆ）。同図においては領域１５２ｄに有効なポインタが設定されているため、当該ポインタが指すインデックスブロック１６０ｄのデータを取得する（矢印Ｇ）。
【００７４】
そしてインデックスブロック１６０ｄがデータを保持する階層のうち、最も解像度の大きい第２階層において画像領域１５６を含むタイル領域を特定し、それに対応づけられたポインタを取得する。画像領域１５６が領域１５２ｄの第２階層の画像平面上のどこに位置するかは、階層データにおける各階層の縮尺率によって容易に計算できるため、上記のタイル領域の特定はそれに基づき実施する。
【００７５】
そして取得したポインタが指すタイル画像１７０ｃのデータを取得し（矢印Ｈ）、それを用いて画像領域１５６の表示画像を生成する。ここで画像領域１５６がタイル画像のサイズを有するとすると、画像領域１５６を描画するには同図に示すように、縮小画像であるタイル画像１７０ｃの一部の領域１７２を拡大する。上述のとおり、画像領域１５６に対応する領域１７２の位置は、両者の縮尺率によって容易に計算できる。
【００７６】
このように、ヘッダ１５０ａにおいてヌルポインタを定義可能とすることにより、ヘッダ１５０ａが定義する全ての領域に対しインデックスブロックを用意する必要がなくなり、データの圧縮効率が向上する。なおヌルポインタを設定する領域は必ずしも高解像度側になくてもよく、図１２に示すように、低解像度の領域と高解像度の領域に挟まれた領域１５２ｅに対し中抜けの状態でヌルポインタを設定することもできる。この場合、領域１５２ｅに含まれる画像を表示する際は、解像度の低い側の領域１５２ｆに属する階層の画像を拡大して表示し、表示画像の解像度が増加して領域１５２ｓに入ったら、当該領域に対して設定されたポインタが指すインデックスブロックを参照してタイル画像を取得する。
【００７７】
このようにすることで、表示画像がある解像度を超えるとこれまでと異なる画像が表示されるようにすることができる。例えば解像度を上げると新聞紙面の漢字に対して振り仮名が出現したり、写真の背景に別の物が出現したり、といった表示上の演出が可能となる。なおこのように、ヘッダでは基本的に任意の領域に対してヌルポインタを設定することが可能であるが、階層構造体の頂点、すなわち解像度が最も小さい画像を含む領域１５２ｇに対しては必ず有効なポインタを設定する。これにより、その他のいかなる領域に対してヌルポインタを設定しても、階層構造体を辿ることにより、少なくとも領域１５２ｇには到達し、表示画像を生成できる。
【００７８】
図１３は、上述のような冗長性によるタイル画像の共有をインデックスブロックによって定義する手法を説明する図である。ここでインデックスブロック１６０ｅに属する画像領域中、同じインデックスブロック１６０ｅに含まれる別の階層の画像を用いて表示が可能が領域は、特定のタイル画像へのポインタを設定せずにヌルポインタとする。図１３では、インデックスブロック１６０ｅにおいて網掛けで示したタイル領域には特定のタイル画像へのポインタ、すなわち有効なポインタが設定され、白抜きの領域にはヌルポインタを設定するとする。
【００７９】
同図において画像領域１５８を表示する場合、まずヘッダ１５０ｂにおいて当該画像領域１５８を含む領域１５２ｈを特定し、当該領域１５２ｈに対して設定されたポインタが指すインデックスブロック１６０ｅを取得する（矢印Ｉ）。インデックスブロック１６０ｅがデータを保持する領域のうち、画像領域１５８に対応する、第２階層１６２ｇの画像中の領域に対しヌルポインタが設定されていた場合、同じインデックスブロック１６０ｅに属する階層を縮小方向に辿っていき、同じ画像領域１５８の縮小画像に対し有効なポインタが設定されている階層を探索する。
【００８０】
同図の例では、まず第１階層１６２ｈの画像に到達するが（矢印Ｊ）、画像領域１５８に対応する領域に対してはやはりヌルポインタが設定されている。そこでさらに解像度の低い第０階層１６２ｉの画像に到達する（矢印Ｋ）。第０階層１６２ｉの画像では、画像領域１５８に対応する領域に有効なポインタが設定されているため、当該ポインタが指すタイル画像１７０ｄのデータを取得し（矢印Ｌ）、それを用いて画像領域１５８の表示画像を生成することができる。ここで画像領域１５８がタイル画像のサイズを有するとすると、画像領域１５８を描画するには同図に示すように、縮小画像であるタイル画像１７０ｄの一部の領域１７４を拡大する。上述と同様、画像領域１５８に対応する領域１７４の位置は、両者の縮尺率によって容易に計算できる。
【００８１】
このように、インデックスブロック１６０ｅにおいてヌルポインタを定義可能とすることにより、インデックスブロック１６０ｅで定義される全てのタイル領域に対しタイル画像へのポインタを定義せずに済み、タイル画像のデータ圧縮とともにインデックスブロック自体のデータ量を削減することができる。また、タイル画像が更新されても、インデックスブロック内での画像の拡大縮小関係は基本的には変化しないため、全てのタイル画像へのポインタを更新する必要がなくなり、更新処理を最小限に抑えることができる。
【００８２】
ヘッダと同様、インデックスブロックにおいても、解像度が最も小さい第０階層１６２ｉの画像では全タイル領域に対し有効なポインタを設定するようにする。このようにすることでその他の任意の領域でヌルポインタを設定しても、縮小方向へ階層を辿ることにより少なくとも第０階層１６２ｉの画像には到達し、表示画像を生成できる。ただしヘッダで定義される領域のうち、階層構造体の頂点、すなわち解像度が最も小さい階層を含む領域は上述のとおり、タイル画像の数が元々少ない場合があり、このような場合は対応するインデックスブロックの全ての階層にヌルポインタが設定された領域が含まれていてよい。
【００８３】
またヘッダと同様、インデックスブロックにおいても、ある画像領域について、高解像度の第２階層１６２ｇと低解像度の第０階層１６２ｉには特定のポインタを設定し、その中間の解像度の第１階層１６２ｈのみヌルポインタを設定するようにできる。例えば図１３において中間の第１階層１６２ｈの左下の領域を表示する際は、解像度の低い第０階層１６２ｉの同領域に対して設定されたポインタが指すタイル画像を拡大して表示し、第２階層１６２ｇを用いるまで表示画像の解像度が上がったら、当該第２階層１６２ｇの同じ領域に対して設定されたポインタが指すタイル画像を用いて表示画像を生成する。このようにすることで、ヘッダと同様、同じ領域でも拡大すると別の画像が表示されるような態様を実現できる。
【００８４】
このようにインデックスブロックでタイル画像の共有を定義する場合、ヘッダでインデックスブロックの共有を定義する場合に比べ、タイル画像単位で詳細な設定を行うことができる。なお図１２および図１３の例では、ヘッダまたはインデックスブロックのいずれかにヌルポインタが設定されている場合を示しているが、双方にヌルポインタが設定されていても同様の処理により、インデックスブロックおよびタイル画像の共有を定義できる。また上述の例では、ヘッダまたはインデックスブロックにヌルポインタを設定することにより、異なる階層同士でタイル画像を共有する態様を実現した。一方、同一階層でタイル画像を共有する場合は、階層構造体の領域のうち、同一階層を含む複数の領域に対し同一のインデックスブロックへのポインタを設定するか、インデックスブロックにおいて複数のタイル領域に対し同一のタイル画像へのポインタを設定すればよい。
【００８５】
次に、画像ファイルを生成する機能を有する制御部１００ｂの動作を説明する。図１４は図９で示した制御部１００ｂが画像ファイルを生成する処理手順を示すフローチャートである。まずユーザまたは別の処理モジュールによって画像データを指定する入力がなされたら、画像階層生成部１２０は、ハードディスクドライブ５０から指定された画像データを読み出す（Ｓ５０）。そして一般的な縮小処理を施すことによって所定の解像度を有する画像データを生成して、複数の解像度の画像データからなる階層データを生成する（Ｓ５２）。次に画像分割部１２２は、各階層の画像をタイル画像に分割したうえメインメモリ６０に格納する（Ｓ５４）。このとき、各タイル画像の画像上の位置とメインメモリ６０の記憶領域を示すアドレスとを対応づけて記録しておくことにより、インデックスブロックの生成に利用する。
【００８６】
なおＳ５０において、あらかじめタイル画像を記録したファイルを読み出すようにしてもよい。この場合、Ｓ５２の階層データ生成処理、Ｓ５４の画像分割処理は省略できる。ファイルの先頭アドレスからの各タイル画像のアドレスのオフセット値と画像上の位置を当該ファイルに含めておけば、Ｓ５０で読み出した際の当該ファイルのメインメモリ６０における先頭アドレスをＳ５４で記録しておくことにより、各タイル画像のアドレスと画像上の位置との関係を取得できる。
【００８７】
次に冗長性検出部１２４は、上述のように冗長性の有無を確認する（Ｓ５８）。具体的には、Ｎ階層の画像を走査して、Ｎ＋１階層の画像のタイル画像の大きさに対応する大きさの領域に単色で構成される領域があるか否かを確認する。これを解像度が高い階層の方向へ繰り返していく。冗長性検出部１２４はそのほか、Ｎ階層の画像をＮ＋１階層の画像の大きさまで拡大した画像とＮ＋１階層の画像との差分画像や、Ｎ＋１階層の画像の周波数解析により、Ｎ＋１階層の画像であってもＮ階層の画像と同程度の情報しか含まない領域があるか否かを確認する。確認手法は画像処理の分野で一般的に行われている手法を適宜適用してよい。
【００８８】
次にヘッダ・インデックスブロック生成部１２６は、冗長性を加味してヘッダおよびインデックスブロックを作成する（Ｓ６０）。具体的には、ヘッダで定義する領域ごと、低解像度側の領域に属する画像を拡大して表示できる場合は、当該領域に対してヌルポインタを設定し、その他の領域については対応するインデックスブロックを生成してそれぞれを指すポインタをヘッダに設定する。さらに各インデックスブロックにおいて、それに属する複数の階層の画像うち低解像度の画像を拡大して表示できる領域に対してはヌルポインタを設定し、それ以外の領域に対しては、当該領域から切り出したタイル画像へのポインタを設定する。
【００８９】
次に画像ファイル生成部１２８は、最終的に出力するための画像ファイルを作成する（Ｓ６２）。ここで冗長性検出部１２４がＳ５８で冗長性を検出しなかった場合は、Ｓ５４で分割して生成されたタイル画像のデータを全てメインメモリ６０より読み出し、Ｓ６０で生成したヘッダおよびインデックスブロックとともに画像ファイルとする。冗長性が検出された場合は、Ｓ６０で生成したインデックスブロックで設定されたポインタが指すタイル画像のデータのみをメインメモリ６０より読み出し、Ｓ６０で生成したヘッダおよびインデックスブロックとともに画像ファイルとする。
【００９０】
次に、このようにして生成した画像ファイルをもちいて画像を表示するときの動作を説明する。図１５は、本実施の形態における画像ファイルを用いて画像を表示するための処理手順を示すフローチャートである。本処理手順は、図７に示した制御部１００ａによって実現できる。同図のフローチャートは、表示領域変更要求によって画像ファイルから必要なデータを読み出しデコードして表示する処理を主に記載しているが、ハードディスクからのロード、必要なデータの先読み処理、バッファメモリへの書き出しなど基本的な流れは図５で示したのと同様である。
【００９１】
まず表示装置１２に画像の一部が表示された状態で、ユーザが入力装置２０を介して表示領域の変更要求を入力すると、入力情報取得部１０２はそれを受け付ける（Ｓ７０）。するとタイル画像特定部１１０は、要求される表示画像の変更量を導出し、それに基づき新たに表示すべきフレーム座標を決定する（Ｓ７２）。表示画像の変更量は、仮想空間における上下左右方向の移動量および深さ方向の移動量であり、表示すべきフレーム座標は、それまでに表示されていた表示領域のフレーム座標と導出した変更量により決定できる。
【００９２】
次にタイル画像特定部１１０は、ヘッダを参照してフレーム座標が属する領域を特定し、当該領域に対しインデックスブロックへの有効なポインタ設定されているか否かを確認する（Ｓ７４）。有効なポインタが設定されていたら（Ｓ７４のＹ）、当該ポインタが指すインデックスブロックを取得する（Ｓ７８）。ヌルポインタが設定されていたら（Ｓ７４のＮ）、階層構造体を画像の縮小方向へ辿り、有効なポインタが設定されている領域を探索し、検出した領域に対して設定されているポインタが指すインデックスブロックを取得する（Ｓ７６、Ｓ７８）。
【００９３】
さらにインデックスブロックにおいて、フレーム座標に対応する領域に対しタイル画像への有効なポインタが設定されているか否かを確認する（Ｓ８０）。有効なポインタが設定されていたら（Ｓ８０のＹ）、当該ポインタが指すタイル画像のアドレスや識別番号などタイル画像を一意に定める情報を特定する（Ｓ８４）。ヌルポインタが設定されていたら（Ｓ８０のＮ）、当該インデックスブロックにおける階層を画像の縮小方向へ辿り、有効なポインタが設定されている階層を探索し、検出した階層の該当領域に対して設定されているポインタが指すタイル画像を特定する（Ｓ８２、Ｓ８４）。
【００９４】
バッファメモリ７０に、当該タイル画像のデコードされたデータが格納されていない場合は（Ｓ８６のＮ）、デコード部１１２がタイル画像のデータをメインメモリ６０から読み出し、デコードする（Ｓ８８、Ｓ９０）。
【００９５】
Ｓ７６でヘッダにおいて有効なポインタが設定されている領域を探索した場合、または、Ｓ８２でインデックスブロック内で有効なポインタが設定されている階層を探索した場合は、特定したタイル画像を拡大して描画する必要がある。このため、そのような経緯を辿ってタイル画像を特定した場合、タイル画像特定部１１０はその旨の情報をデコード部１１２に与えておく。デコード部１１２は、その情報に基づきタイル画像の拡大が必要か否かを判定する（Ｓ９２）。
【００９６】
拡大が必要な場合（Ｓ９２のＹ）、デコード部１１２はタイル画像特定部１１０から取得したフレーム座標に基づきタイル画像を拡大したうえ、必要な領域をバッファメモリ７０に格納する（Ｓ９４）。この処理は、該当タイル画像がデコード済み（Ｓ８６のＹ）であっても同様に行う。そして拡大処理の有無に関わらず、表示画像処理部１１４は、当該タイル画像のうち新たに表示すべき領域をフレームメモリに描画する（Ｓ９６）。描画処理には、要求される解像度に応じて、バッファメモリ７０に格納されたデータを拡大、縮小する処理も含まれる。
【００９７】
次にヘッダおよびインデックスブロックにおけるポインタのデータ構造について説明する。例えば１１階層で構成される階層データを図８で示したように４×４、８×８、１６×１６の３階層の領域ずつインデックスブロックにまとめた場合、ヘッダで定義される領域は４１６２個になる。また一つのインデックスブロックには最大３３６のタイル領域が定義される。これらの要素のそれぞれにポインタを設定するため、ポインタの検索を効率的に行えるデータ構造とすることが望ましい。ポインタのデータ構造としては、固定長配列、連想配列、ツリー構造が考えられる。
【００９８】
ヘッダのポインタを固定長配列とした場合は、領域ごとに識別番号を付与し、それをインデックスとして固定長のポインタ配列にアクセスする。この場合、領域を特定できればすぐにポインタが取得できるため、編集や検索処理が速く行える。連想配列とした場合は、領域ごとに識別番号を付与し、それをキーとしてポインタの連想配列にアクセスする。この場合、有効なポインタのみを保持すればよいため、ヘッダのデータサイズを抑えることができる。
【００９９】
ツリー構造とした場合は、領域間をつなぐポインタをさらに定義し、画像の階層構造体の頂点から領域間ポインタをたどって所望の領域を検索する。この場合、後述するように頂点に階層を追加した際、頂点付近のポインタを更新するのみでよくなる。このようにポインタのデータ構造によって有効性が異なるため、メモリコストや処理コストなど重視すべき点によって適宜選択する。さらにＢツリー構造などデータ探索で一般的に用いられる手法を適宜導入してもよい。インデックスブロックのポインタも同様の態様となるため、処理速度などを考慮して最適な手法を選択してよい。
【０１００】
またインデックスブロックへのポインタ、およびタイル画像へのポインタは、目的とするインデックスブロックやタイル画像が記録されたファイル名やネットワークに接続したサーバのロケーション情報などを含めてもよい。これにより、１つの階層データに複数のファイルやサイトからの画像を含めたり、１つのファイルを複数の階層データで共有したりすることができる。
【０１０１】
次に、上述のようにヘッダ、インデックスブロック、タイル画像で構成される画像ファイルを修正、改変する場合について説明する。この態様も図１で示した情報処理システム、図４で示した情報処理装置１０と同様の装置構成で実現できる。図１６は、本実施の形態において画像を修正する機能を有する制御部１００ｃの構成を示している。なお制御部１００ｃは図７の制御部１００ａに示した、画像表示を行うための機能や、図９の制御部１００ｂに示した、画像ファイルを生成する機能を備えていてもよいが、ここでは図示を省略している。一方、図１６に示した機能のみを有する制御部１００ｃを備えた情報処理装置１０を、表示機能や画像ファイル生成機能を発揮する画像処理装置とは別に設けてもよい。
【０１０２】
制御部１００ｃは、修正対象の画像ファイルを取得する画像ファイル取得部３１８、修正によって更新される領域や更新部分の画像データなどからなる更新情報を取得する更新情報取得部３２０、更新後のタイル画像を生成するタイル画像生成部３２２、ヘッダおよびインデックスブロックを更新するヘッダ・インデックスブロック更新部３２４、修正中の画像を表示する表示画像制御部３２６、および修正後の画像ファイルを生成する画像ファイル生成部３２８を含む。
【０１０３】
画像ファイル取得部３１８は、ユーザによる修正対象の画像の指定入力を受け付け、該当する画像ファイルをハードディスクドライブ５０から読み出してメインメモリ６０に格納する。この画像ファイルはこれまで説明したように、ヘッダ、インデックスブロック、タイル画像のデータを含む。更新情報取得部３２０は、ユーザが表示装置１２に表示された修正対象の画像を見ながら、入力装置２０を介して入力した更新情報を取得する。更新情報には上述のとおり、更新すべき領域とその領域における修正後の画像データなどが含まれる。具体例は後に述べる。
【０１０４】
タイル画像生成部３２２は、更新すべき領域に更新後の画像を当てはめた際に更新する必要が生じたタイル画像を特定し、新たなタイル画像を生成する。ここで、更新すべき領域があるタイル画像の一部にのみかかっている場合は、元のタイル画像をメインメモリ６０から読み出し、更新すべき領域のみ上書きすることにより新たなタイル画像を生成する。あるタイル画像が全て更新すべき領域に含まれている場合は、修正後の画像を切り出すことによって新たなタイル画像を生成する。このとき、階層データを構成する全ての階層における更新すべき領域に対し新たなタイル画像を生成する。ただしユーザの指定によっては、特定の階層のみ更新するようにしてもよい。この場合、特定の解像度の範囲で異なる画像が表示される態様を実現できる。
【０１０５】
生成したタイル画像はメインメモリ６０に格納する。この際、画像ファイル取得部３１８がメインメモリ６０に格納した元の画像データはそのままにしておき、新たに生成したタイル画像は別の記憶領域に格納する。次にヘッダ・インデックスブロック更新部３２４は、メインメモリ６０に格納されたインデックスブロックにおいて、更新すべき領域に対して設定されたポインタを、新たに生成したタイル画像を指すように書き換える。また、当該領域に対応するインデックスブロックが存在しない場合は、新たにインデックスブロックを生成し、ヘッダにおけるヌルポインタの設定を、生成したインデックスブロックを指すポインタに書き換える。
【０１０６】
表示画像制御部３２６は、図７で示した制御部１００ａに含まれる機能ブロックで構成してよいが、ここでは図示を省略している。表示画像制御部３２６は、図１５で説明したのと同様の処理手順により修正対象の画像を表示するが、ユーザによる画像の修正に応じて上述のようにヘッダ、インデックスブロックが更新されていく。それに応じて、画像を描画する際に用いるタイル画像が新たなものに変化する。このようにすることで、表示画像を確認しながら画像を修正、改変することが可能になる。
【０１０７】
本実施の形態では、元のタイル画像のデータを更新せず別の記憶領域に新たに生成したタイル画像を追加し、インデックスブロックやヘッダによって参照先を変化させることにより画像を更新する。このようにすると、元のタイル画像のうち修正領域にあたるタイル画像のデータを検索して上書きする場合と比較して処理コストが低く、応答性よく修正途中の画像を表示させることができる。また、修正途中で元の画像に戻すことも容易にできる。
【０１０８】
画像ファイル生成部３２８は、ユーザが修正を終えたときなどに、新たに生成したタイル画像のデータで元のタイル画像のデータを上書きする。あるいは新たに生成したタイル画像のデータを、元のタイル画像のデータとは別のファイルとして保存する。そして更新されたインデックスブロックやヘッダを付加して画像ファイルとする。
【０１０９】
次に、上述の機構によって画像を修正、改変するときの各データに対する処理の具体例を説明する。図１７は説明の前提とする画像の修正例を示している。同図において修正前の画像１９０には、楕円と三角形が描かれている。これを修正し、修正後の画像１９２に示されるように、画像の右上に星の図形１９４を追加する場合を考える。図１８はこのような修正におけるインデックスブロックのポインタの変化を模式的に示している。同図においてポインタは矢印で示しているが、図が煩雑になるのを避けるため、代表的な矢印のみを表している。
【０１１０】
まず修正前において、ヘッダ１５０で定義される各領域は、インデックスブロック１６０のいずれかへのポインタ、あるいはヌルポインタが設定されている。そしてポインタが指すインデックスブロック１６０に属する複数の階層の各タイル領域に対し、破線の矢印によって示されるように、修正前に生成されていたタイル画像１７０ｅのいずれかへのポインタが設定されている。図１７における修正前の画像１９０の右上の領域は単色の背景であるとすると、当該領域は一つのタイル画像を共有する。図１８において多くの破線矢印が一つのタイル画像１７０ｆを指しているのはこれを表している。当然、その他の領域は個々のタイル画像へのポインタが設定されている。
【０１１１】
このような背景部分に、図１７における修正後の画像１９２のように星の図形１９４を追加すると、各階層の該当領域におけるタイル画像として、各解像度の星の図形が追加された新たなタイル画像１７０ｇが生成され、元のタイル画像１７０ｅとは別の記憶領域に格納される。するとインデックスブロック１６０において、更新すべき領域にかかるタイル領域に対するポインタは全て、新たなタイル画像１７０ｇのいずれかのタイル画像を指すように更新される。図１８では、更新後のポインタを一点鎖線の矢印で表している。更新後、更新対象の領域は背景でなくなったため、図に示すように、各タイル領域に対しそれぞれのタイル画像へのポインタが設定される。また、修正対象の領域以外の領域は、元のタイル画像１７０ｅを指したままでよい。
【０１１２】
次に、図１７の星の図形１９４のように更新によって追加された画像が、それまでの階層データの最高解像度の画像よりさらに高い解像度を有する場合に、高解像度側に階層を追加する手順を説明する。図１９は、高解像度側に階層を追加する場合の処理を説明するための図である。同図において、修正前の画像は第０階層１５４ｉ、第１階層１５４ｊ、第２階層１５４ｋ、第３階層１５４ｌからなる階層データ２００であったとする。ここでヘッダにおいては全ての領域に対しインデックスブロックへの有効なポインタが設定されているものとし、同図ではそれを網掛けで示している。
【０１１３】
このような画像に対し、図１７で示すように右上の領域に高解像度の画像を追加する修正を行った場合、上述のように更新対象の領域のタイル画像を各階層について新たに生成する。ここで、追加した画像は元の階層データで最高解像度を有する第３階層１５４ｌより高解像度であるため、新たな階層を追加する必要がある。同図では追加する階層を第４階層１５４ｍとしている。また新たにタイル画像を生成すべき領域は、同図において黒く示されている。
【０１１４】
この例では高解像度画像による画像の修正は局所的なものであるため、更新対象の領域以外の領域を第４階層１５４ｍの解像度で表示する場合は、元からある階層データのうち最高解像度を有する第３階層１５４ｌの画像を拡大して表示することになる。そのため、第４階層１５４ｍのうち更新対象の領域以外に対しては、ヌルポインタを設定し、第３階層１５４ｌのタイル画像を流用する。ヌルポインタを設定する領域は、同図では白抜きで表されている。
【０１１５】
タイル画像の共有には前述のとおり、ヘッダにおいて設定する手法とインデックスブロックにおいて設定する手法がある。一つのインデックスブロックでまとめられる階層数を固定とした場合、追加すべき第４階層１５４ｍに対応する階層が、既存のインデックスブロックに既に定義づけられている場合がある。第４階層１５４ｍは元の階層データでは存在していないため、インデックスブロックの同階層に対してはヌルポインタが設定されている。
【０１１６】
このような場合は、当該既存のインデックスブロックにおいて、第４階層１５４ｍの更新対象の領域に対して設定されているヌルポインタを、新たに生成したタイル画像へのポインタに更新する。更新対象の領域以外の領域は、ヌルポインタのままとする。低解像度の各階層についても同様に、インデックスブロックのポインタを更新する。
【０１１７】
図２０は、追加すべき第４階層１５４ｍに対応する階層が属するインデックスブロックが存在しなかった場合のヘッダおよびインデックスブロックの変化を説明する図である。同図のヘッダ１５０において、領域１５２ｉは修正前の階層データに対し定義づけられている領域を示している。ヘッダ１５０で定義される領域は当然複数でよいが、同図ではそれらをまとめて一つの領域１５２ｉで示している。領域１５２ｉには、修正前に存在した第０階層１５４ｉ、第１階層１５４ｊ、第２階層１５４ｋ、第３階層１５４ｌが属している。そして各領域に対し、インデックスブロック１６０ｆへのポインタが設定されている。そしてインデックスブロック１６０ｆで定義づけられる各タイル領域に対し、既存のタイル画像１７０ｈへのポインタが設定されている（破線矢印）。
【０１１８】
ここで第４階層１５４ｍを追加する場合、まずヘッダ１５０において、当該階層を含む新たな領域を追加する。ただし図２０に示すように、更新対象の領域を含む領域１５２ｊのみ有効なポインタを設定し、その他の領域はヌルポインタを設定する。さらに新たなインデックスブロック１６０ｇを生成し、領域１５２ｊに対して当該インデックスブロック１６０ｇへのポインタを設定する。追加する階層が第４階層１５４ｍのみであれば、新たに生成したインデックスブロック１６０ｇに属する３階層のうち、タイル画像へのポインタを設定するのは最も低解像度の一階層でよく、その他の階層は全領域に対しヌルポインタを設定する。
【０１１９】
そして、新たに生成したインデックスブロック１６０ｇにおいて、更新対象の領域に含まれるタイル領域に対し、新たに生成したタイル画像１７０ｉのいずれかを指すようにポインタを設定する（一点鎖線矢印）。また既存のインデックスブロック１６０ｆも同様に、更新対象の領域に含まれるタイル領域に対し設定されたポインタが、新たに生成したタイル画像１７０ｉのいずれかを指すように更新する。なお最終的に画像ファイルを生成する際は、新たに生成したインデックスブロック１６０ｇは、元の画像ファイルの末尾に追加してもよいし、別のファイルとしてもよい。これにより更新前後の画像を表示することができる。
【０１２０】
次に、既存の画像に背景や描画領域など新たな領域を追加することにより画像のサイズを拡張する手順を説明する。図２１は、既存の画像に新たな領域を追加する処理を説明するための図である。同図において、追加前の画像は第０階層１５４ｉ、第１階層１５４ｊ、第２階層１５４ｋ、第３階層１５４ｌからなる階層データ２０４であったとする。各階層が属する領域は、ヘッダにおいてインデックスブロックへの有効なポインタが設定されている。
【０１２１】
このような画像に対し新たな領域を追加する場合、各解像度に対応するサイズで各階層の画像に新たな領域を追加した階層データ２０６を生成する。図２１の例で階層データ２０６は、第０階層１５４ｎ、第１階層１５４ｏ、第２階層１５４ｐ、第３階層１５４ｑ、第４階層１５４ｒからなる。第４階層１５４ｒおよび第３階層１５４ｑは、白抜きで示した元の画像のタイル画像に、網掛けで示した追加領域のタイル画像を加えることによって生成できる。第２階層１５４ｐはそのサイズによって、元のタイル画像がそのまま利用できる白抜きで示した領域に、追加領域と元の画像が混在する網掛けで示したタイル画像を加える。第１階層１５４ｏおよび第０階層１５４ｎは、それを構成する全てのタイル画像において、元の画像と追加領域が混在するため全て網掛けで示している。
【０１２２】
このように、画像に新たな領域を追加する場合、階層によっては元からあるタイル画像をそのまま利用できる。この性質を利用し、元からあるインデックスブロックはそのまま利用し、追加領域など必要な領域についてのみ新たなインデックスブロックを生成する。図２２は、新たな領域を追加する場合のヘッダおよびインデックスブロックの変化を説明する図である。同図のヘッダ１５０において、白抜きの三角形は元のタイル画像を利用できる領域２０８を示し、網掛けの部分は追加または追加によって変化する領域２１０を示している。
【０１２３】
破線は図２１の第０階層１５４ｎ、第１階層１５４ｏ、第２階層１５４ｐ、第３階層１５４ｑ、第４階層１５４ｒを示しており、それぞれの階層において元のタイル画像を利用できる領域、および追加または追加によって更新すべき領域が決定され、図２２に示すような構造となる。ヘッダで定義される領域は、階層構造体の頂点から順に生成されるため、このようにヘッダ１５０が変化すると領域の区切りに変化が生じる。
【０１２４】
しかし後に述べるように領域の区切りを工夫することにより、図２２のように階層データの頂点で階層が増加するような変化が生じても、変化前に定義されていた領域は可能な限り保存し、ひいては既存のインデックスブロックをそのまま利用できるようにする。図２２で領域追加前は、領域２０８の各領域（図示せず）に対し、インデックスブロック１６０ｈへのポインタが設定されている。そしてインデックスブロック１６０ｈで定義づけられる各タイル領域は既存のタイル画像１７０ｈへのポインタが設定されている（破線矢印）。
【０１２５】
領域追加後は、追加する領域に対応する新たなインデックスブロック１６０ｉを生成し、ヘッダ１５０における新たな領域２１０に対し当該インデックスブロック１６０ｉへのポインタを設定する。ここで領域２１０はヘッダ１５０においては複数の領域が定義されていてよいが図示を省略している。生成したインデックスブロック１６０ｉには、タイル領域ごとに、領域追加によって必要となった新たなタイル画像１７０ｋのいずれかへのポインタが設定される（一点鎖線矢印）。ここで新たなタイル画像１７０ｋは、図２１で網掛けで示した、追加する領域自体のタイル画像や、追加する領域と元の画像が混在するタイル画像である。この際、追加する領域が単色の背景である場合などは、一つのタイル画像を共有できる。
【０１２６】
一方、ヘッダにおいて元から定義づけられていた領域は、領域の区切り方に変更がない場合は、設定されたポインタ、ひいてはそれが指し示すインデックスブロックをそのまま利用できる。そのためインデックスブロック内で設定される、タイル画像へのポインタを更新する必要がない。なお上述の例は画像の右および下の領域を追加する場合であるが、いずれの方向に画像を拡張する場合であっても、既存のインデックスブロックを拡張後も利用できるように領域分割を行うことにより、ヘッダ、インデックスブロックの変化を最小限に抑えることができる。
【０１２７】
図２３は、図２１および図２２で説明したように、画像サイズを拡張する場合など階層構造体の頂点側に階層を追加する際にヘッダにおいて定義される領域の分割手法を説明する図である。まず最初の階層データ２３０では、第０〜１階層の全体を第１領域１５２ｋ、第２〜４階層の全体を第２領域１５２ｌ、第５〜７階層を画像上の領域で分割した領域を順に第３領域１５２ｍ、第４領域１５２ｎ、・・・、というように領域分割される。この領域の構成は図８で示したのと同様である。
【０１２８】
前述のとおりひとつのインデックスブロックが定義するタイル領域の数はインデックスブロックによらず等しく準備するが、第１領域１５２ｋは、１つのタイル画像で構成される第０階層、２×２のタイル画像で構成される第１階層のみからなるため、当該領域に対応するインデックスブロック１６０ｊにおいてはその数のタイル領域のみを使用し、それ以外のタイル領域にはヌルポインタを設定して無効とする。
【０１２９】
なお図２３に示すインデックスブロックでは、有効なタイル領域の横方向の数を階層別に矩形で示している。従って第１領域１５２ｋに対応するインデックスブロック１６０ｊは１つおよび２つの矩形が示されている。第２領域１５２ｌ、第３領域１５２ｍなどその他の領域に対応するインデックスブロック１６０ｋ、１６０ｌなどは、４×４個、８×８個、１６×１６個のタイル領域を全て有効にできるため、４個、８個、１６個の矩形が示されている。
【０１３０】
ここで階層データ２３０の頂点側に１階層、追加した階層データ２３２に対しては、元から第１領域に属していた階層はそのままに、追加した階層を第１領域１５２ｏにさらに含める。元の第１領域１５２ｋに対応するインデックスブロック１６０ｊは、データ領域として準備された３階層のうち２階層分のみ用いていたため、無効としていた階層を利用することにより階層の追加を第１領域１５２ｏのみで吸収することができる。したがって、元の階層データ２３０において第２領域１５２ｌに含まれていた第２〜４階層（階層追加後の第３〜５階層）は、そのまま同じ領域に属することができる。ただし各階層の画像は拡張されているため、拡張部分に対し新たな領域を定義しインデックスブロックを生成する。さらに下の階層も同様である。
【０１３１】
ここで階層データ２３２の頂点側にさらに１階層、追加した階層データ２３４に対しても、元から第１領域に属していた階層はそのままに、追加した階層を第１領域１５２ｐにさらに含める。この場合、第１領域１５２ｐのみ４階層となるが、それに対応するインデックスブロック１６０ｍで準備されているタイル領域は、第１領域１５２ｐのタイル画像の数より大きいため、４階層であってもタイル画像の情報はインデックスブロック１６０ｍで充足する。すると、それ以下の階層は最初の階層データ２３０のときに属していたのと同様の領域に属することができる。
【０１３２】
階層データ２３４にさらに１階層、追加した階層データ２３６では、階層データ２３４で第１領域１５２ｐに属していた４階層に、追加した階層を加えた５階層を２つの領域に分割して第１領域１５２ｑ、第２領域１５２ｒとする。このとき第１領域１５２ｑを第０〜１階層、第２領域１５２ｒを第２〜４階層とすることにより、第１領域１５２ｑに対応するインデックスブロック１６０ｎは、最初の階層データ２３０の第１領域１５２ｋに対応するインデックスブロック１６０ｊと同様、１つのタイル画像の階層、２×２個のタイル画像の階層のみからなる。また第２領域１５２ｒも階層データ２３０の第２領域１５２ｌと同様となる。
【０１３３】
そしてそれ以下の階層は、最初の階層データ２３０のときに属していたのと同様の領域に属することができる。以上の変化を繰り返すことにより、階層データの頂点に階層を追加しても、可能な限りその他の領域に変化なく領域を定義することができ、ひいては既存のインデックスブロックをそのまま利用することができる。
【０１３４】
図２１で示したように画像の領域を拡張した場合、画像処理で一般的に用いられるようなラスタ方向の順番に基づくタイル画像の管理では、追加した領域のタイル画像が既存のタイル画像の間に挿入されてしまうため、タイル画像の並び替えや識別番号のふり直しが必要となる。タイル画像の数が増加するほど、この処理にかかる負荷は多大なものになる。本実施の形態では上述のとおり、局所的なデータの変化のみで画像の領域の拡張が可能になるため、処理コストが低く、更新中のデータ表示や最終的な画像ファイル生成を応答性よく実現できる。
【０１３５】
次に上記の構成によって実現できる動作を説明する。図２４は画像処理装置においてユーザが画像を修正、改変する際の処理手順を示すフローチャートである。まずユーザが修正対象の画像ファイルを指定すると、画像ファイル取得部３１８はハードディスクドライブ５０から該当する画像ファイルを読み出しメインメモリ６０に格納する（Ｓ１１０）。すると表示画像制御部３２６は当該画像ファイルの画像を表示装置１２に表示する（Ｓ１１２）。
【０１３６】
この状態でユーザが表示装置１２に表示された画像を見ながら更新情報を入力すると（Ｓ１１４のＹ）、更新情報取得部３２０はそれを受け付け、タイル画像生成部３２２が更新部分の新たなタイル画像を生成してメインメモリ６０に格納する（Ｓ１１６）。ユーザが行う更新情報の入力は、例えば表示装置１２に表示した画像の近傍に、新たに貼り付けたい画像をさらに表示し、ユーザがポインティングデバイスで所望の領域までドラッグさせるなどの操作によってなされる。あるいはポインティングデバイスによって文字や絵を直接描き込んだり、領域を追加するコマンドを入力するなどでもよい。
【０１３７】
次にヘッダ・インデックスブロック更新部３２４は、上述のように画像の更新内容によって適宜ヘッダ、インデックスブロックを更新する（Ｓ１１８）。すると表示画像制御部３２６は、新たに参照先となったタイル画像のデータを読み出し、デコードすることによって表示装置１２の表示を更新する（Ｓ１２０）。Ｓ１１４からＳ１２０までの処理を、修正が終了し更新情報が得られなくなるまで繰り返す。
【０１３８】
修正が終了したことをユーザからの入力などにより検知したら（Ｓ１１４のＮ）、画像ファイル生成部３２８は、メインメモリ６０に格納しておいた、新たに作成したタイル画像を、元の画像ファイルの画像データに組み込んで、画像データを再構築する（Ｓ１２２）。あるいは新たに作成したタイル画像のみを別のファイルに保存する。そしてＳ１１８で更新した最終的なヘッダおよびインデックスブロックのデータとともに画像ファイルとして出力する（Ｓ１２４）。
【０１３９】
修正中、ヘッダ、インデックスブロック、タイル画像は、既存のデータと別の記憶領域に格納しておく。そしてユーザが、直前の画像の更新を取り消す操作（Ｕｎｄｏ）を行った場合はそれらのデータの参照先を元に戻すことにより、画像を前の状態に戻すことが容易にできる。操作の再履行（Ｒｅｄｏ）でも同様に、参照先を変更するのみで遂行される。
【０１４０】
以上述べた本実施の形態によれば、階層データをヘッダ、インデックスブロック、タイル画像、の３つのデータセットで構成する。これにより、タイル画像を本来の画像上の位置から独立させることができ、画像を修正した際などに管理が容易になるほか、画像の冗長性を考慮してタイル画像を複数の領域で共有することができるため、タイル画像のデータサイズを効率よく削減することができる。
【０１４１】
また、タイル画像を複数の領域で共有する際、ヘッダもしくはインデックスブロックで設定するポインタを無効とし、無効となっている領域では、階層を低解像度側へ辿って有効なポインタが設定されている領域を探索する。これにより、全ての領域に対しいずれかのタイル画像へのポインタを設定する場合と比較し、インデックスに用いるデータ自体のサイズを削減できる。
【０１４２】
さらに、ヘッダによって階層構造体を領域分割し、領域ごとにインデックスブロックを対応づける。この際、一つの領域には複数の階層を含める。これにより、一時に表示や修正の対象となりやすいデータをまとめて扱うことができ、不必要なデータをメインメモリにロードするなど、記憶領域や処理の面で非効率な状況を回避しやすくなる。また、インデックスブロックで定義できるタイル領域の数を固定とすることで、データキャッシュ時のフラグメンテーションが発生せず、記憶領域の管理が容易である。また画像が巨大化してデータサイズが大きくなっても、階層データの領域分割により表示や修正対象のデータへのアクセスが効率的に行える。
【０１４３】
例えば８００００個のタイル画像で構成される階層データの場合、インデックスブロックで定義するタイル領域の数を４００とすると、インデックスブロックは２００個生成される。ここで１つのタイル画像にアクセスしたいとき、単なる８００００個のタイル画像の羅列であれば、それを順に検索していく必要があるが、本実施の形態のように領域分割されていれば、１つの領域を検索することは４００個のタイル画像を検索することと同等となり、効率の良いアクセスが可能となる。
【０１４４】
同様に、一般的な画像表示装置で表示を行う場合、一度に表示する画像に必要なインデックスブロックは、平均的には１〜２個であり、４個以上のインデックスブロックが必要となることは稀である。そのため、領域を分割せずにタイル画像へのインデックスを保持する場合と比較し、一度に必要なインデックスデータサイズが少なくて済み、メインメモリを節約できる。結果的に、複数の階層データを同時に処理するような態様も、メインメモリを圧迫せずに実現できる可能性が高くなる。
【０１４５】
さらに、ヘッダおよびインデックスブロックで設定するポインタには、インデックスブロックおよびタイル画像を記録したファイルの設定もできるようにする。このようにすることで、一つの階層データであっても複数のインデックスブロックファイルやタイル画像ファイルから読み出したデータを利用することができ、階層データをより柔軟に生成、更新することができる。またファイルが異なれば同一の記憶媒体に格納しておく必要がなくなるため、例えば４ＧＢを超える巨大な画像データを生成することができる。これにより非圧縮画像、ＨＤＲ（High Dynamic Range）画像、アトリビュート情報などを処理対象とすることも可能となる。
【０１４６】
同時に、複数の階層データで、用いるデータのファイルを共有することも可能となる。例えば雑誌のヘッダ、フッタなどテンプレートとして再利用が可能な画像は、個々に保持せず共有することで、階層データ個別のデータサイズを小さくできる。タイル画像ばかりでなくインデックスブロックのデータを共有してもよい。
【０１４７】
これを応用すると、階層データを用いたコンテンツのアップグレードが容易に実現できる。例えば通常版のコンテンツとしてヘッダ、インデックスブロック、タイル画像のデータを含むファイルを配布する。そして追加用として、さらに高解像度な階層のタイル画像のファイルを別に用意する。通常版のヘッダやインデックスブロックには、追加用のタイル画像へのポインタも記述しておくが、当該タイル画像を入手しない限り、そのポインタは無効となるため表示はされない。ユーザがコンテンツのアップグレードをすると、追加用のファイルがダウンロードされ、それに記録されたタイル画像へのポインタが有効となるため、追加用の画像が表示される。このようにすると、通常版のコンテンツファイルを変化させることなくアップグレードが容易に可能となる。アップグレードには課金を義務づけてもよい。
【０１４８】
実施の形態２
実施の形態１では、主にユーザが入力した情報に基づき画像ファイルを生成、修正した。本実施の形態では、グラフィックプロセッサによって階層データへレンダリングする態様について述べる。レンダリングに階層データを導入することにより、実施の形態１で述べたのと同様、必要とされる解像度に見合った処理のみを行えばよくなり、高精細の巨大な画像であっても効率的な処理が可能となる。本実施の形態は実施の形態１の図４で示した情報処理装置１０によって実現できる。図２５は本実施の形態における情報処理装置１０のうち制御部１００およびメインメモリ６０の構成をより詳細に示している。
【０１４９】
制御部１００はメインプロセッサ４００とグラフィックプロセッサ４０２を含む。メインプロセッサは情報処理装置１０において起動したアプリケーションプログラムを主に実行するとともに、情報処理装置１０に含まれる他の機能ブロックの制御を行う。グラフィックプロセッサ４０２はメインプロセッサ４００からの画像処理要求に従い画像処理を実行する。画像処理に必要なデータはメインメモリ６０に格納され、グラフィックプロセッサ４０２はそれを読み出し適宜画像処理を行ったうえ、メインメモリ６０などに結果を書き出すことにより画像処理を遂行する。
【０１５０】
グラフィックプロセッサ４０２は、メインプロセッサ４００からの画像処理要求に従い、メインメモリ６０に格納されたモデルデータ４１８を用いてレンダリングを行い、同じくメインメモリ６０に格納したカラーバッファ４１４およびＺバッファ４１６を更新する。本実施の形態では図２５に示すように、カラーバッファ４１４およびＺバッファ４１６はいずれも階層データの構造とする。すなわち、描画対象の画像の画素ごとの色情報を保持するカラー値画素平面と、画素ごとの視点からの奥行き情報を保持するＺ値画素平面とを、描画対象画像の複数の解像度に対応させて階層化した構造を有する。当該階層データは、実施の形態１で説明したように、ヘッダ、インデックスブロック、タイルデータによって構成してよい。ここでタイルデータは、各階層の画素平面を所定のサイズに分割したタイル領域ごとのデータである
【０１５１】
グラフィックプロセッサ４０２は、メインプロセッサ４００からの要求に従いレンダリングを行うレンダリング部４０４、レンダリング部４０４によるレンダリングの結果をメインメモリ６０に格納されたカラーバッファ４１４およびＺバッファ４１６の各階層に反映させる階層データ更新部４０６を含む。グラフィックプロセッサ４０２はさらに、レンダリング時に一時的に用いる記憶領域として、ＧＰＵカラーバッファ４０８、ＧＰＵーＺバッファ４１０、およびダーティマスク４１２を含む。ダーティマスク４１２はＧＰＵカラーバッファ４０８、ＧＰＵーＺバッファ４１０と同じサイズの領域を有し各ピクセルが１ビットの情報を保持する。レンダリングによってＧＰＵカラーバッファ４０８、ＧＰＵーＺバッファ４１０が更新されたら、更新対象のピクセルの値を変化させることにより、当該ピクセルの領域を検出する。
【０１５２】
次に上記の構成を有する画像処理装置の、レンダリング時の動作を説明する。図２６は階層データへのレンダリングの処理手順を示すフローチャートである。まずメインプロセッサ４００はグラフィックプロセッサ４０２に対しレンダリング要求を行う（Ｓ２００）。レンダリングに必要なデータは上述の通りメインメモリ６０に格納される。モデルデータ４１８の他、上述の通り階層構造を有するカラーバッファ４１４およびＺバッファ４１６もこれに含まれる。
【０１５３】
するとグラフィックプロセッサ４０２のレンダリング部４０４は、モデルデータ４１８などに基づき、カラーバッファ４１４およびＺバッファ４１６のうちレンダリング対象の階層および領域を特定する（Ｓ２０２）。次にレンダリング部４０４は、当該領域のデータをカラーバッファ４１４およびＺバッファ４１６から読み出し、ＧＰＵカラーバッファ４０８およびＧＰＵーＺバッファ４１０からなるＧＰＵバッファに敷き詰める（Ｓ２０４）。レンダリング対象の階層および領域からタイルデータを特定する手法は実施の形態１で述べたタイル画像の特定手法と同様に、ヘッダ、インデックスブロックの順で検索していく。したがって読み出しはタイルデータの単位で行う。
【０１５４】
このときレンダリング部４０４は、ダーティマスク４１２を初期化する（Ｓ２０６）。例えば各ピクセル値を「０」にセットする。そして、モデルデータ４１８を用いて一般的な手法でレンダリングを行い、ＧＰＵカラーバッファ４０８、ＧＰＵーＺバッファ４１０を適宜更新するとともに、ダーティマスク４１２における更新対象のピクセル値を「１」に更新する（Ｓ２０８）。
【０１５５】
そしてＧＰＵカラーバッファ４０８、ＧＰＵーＺバッファ４１０におけるレンダリング結果に基づき、メインメモリ６０のカラーバッファ４１４およびＺバッファ４１６の階層データを更新する（Ｓ２１０）。具体的にはまず、各階層データのうち、レンダリング対象の階層および領域において、更新対象のピクセルを含むタイル領域をダーティマスク４１２のピクセル値に基づき特定し、当該タイル領域のデータを、ＧＰＵカラーバッファ４０８、ＧＰＵーＺバッファ４１０のレンダリング結果に基づき更新する。
【０１５６】
このとき実施の形態１で述べたように、新たなタイルデータを生成し、インデックスブロックに設定されているポインタを新たなタイルデータへのポインタに更新する。なお、頻繁に更新されることが予想される場合は、タイルデータの生成を省略してポインタの更新のみを行い、画像が確定してからタイルデータを生成してもよい。次にレンダリング対象の階層以外の階層に対しても、更新された領域に対応する領域のタイルデータを新たに生成し、インデックスブロックに設定されているポインタを新たなタイルデータへのポインタに更新する。この際、階層によって解像度が異なるため、レンダリング結果は拡大または縮小して新たなタイルデータに反映させる。
【０１５７】
既存の階層データより高解像度の画像をレンダリングするときなど、レンダリング対象の領域のタイルデータがカラーバッファ４１４およびＺバッファ４１６に元々存在しない場合は、その上の階層の対応する領域を拡大してＧＰＵカラーバッファ４０８、ＧＰＵーＺバッファ４１０に敷き詰める。そしてレンダリング後、更新されたタイルデータのみをカラーバッファ４１４およびＺバッファ４１６に反映させ、ヘッダあるいはインデックスブロックのポインタを更新する。その後、レンダリング対象の階層以外の階層に対しても、タイルデータを生成、ポインタを更新する点は上記と同様である。この処理は、実施の形態１において図１９を用いて説明したのと同様の処理となる。
【０１５８】
なおＳ２１０においてレンダリングの結果を階層データに反映させる際、レンダリング対象の階層より下の階層へ反映させるためにレンダリング結果を拡大した領域が、当該階層のタイル領域のいずれかを占めていたらそのタイルデータは削除し、それへのポインタを無効とする。これによりタイルデータのサイズを削減できる。表示時は実施の形態１で述べたのと同様、ポインタが有効な階層を探索し、上の階層の画像を拡大すればよい。
【０１５９】
なおカラーバッファ４１４およびＺバッファ４１６は、ヘッダおよびインデックスブロックを個別に保持してもよいし、共有してもよい。共有とする場合、インデックスブロックは一つのタイル領域に対し複数のポインタ、すなわちカラーバッファのタイルデータおよびＺバッファのタイルデータへのポインタを設定する。これにより、個別に保持するよりヘッダおよびインデックスブロックのデータを圧縮することができる。レンダリング後、画像を確定する場合は、インデックスブロックのうち不要となったＺバッファのタイルデータへのポインタを削除してもよい。インデックスブロックにおいて一つのタイル領域に設定する複数のポインタが指す対象は、画像の内容によっては、カラーバッファやＺバッファに限られない。
【０１６０】
また複数のカラーバッファ間でＺバッファを共有してもよい。例えばカラーバッファのデータを２つ、Ｚバッファのデータを１つ用意し、一方のカラーバッファとＺバッファでレンダリングを行い、他方のカラーバッファとＺバッファでレンダリングを行ってもよい。この場合はそれぞれ個別にヘッダおよびインデックスブロックを保持する方が制御の面で有効である。
【０１６１】
カラーバッファおよびＺバッファを階層データとしてレンダリングする本実施の態様は、アンチエイリアスに応用することができる。すなわち高解像度の階層とそれより解像度が低い表示用の画像の階層とからなる階層データを生成する。一般的なスーパーサンプリングでは、単色の背景などオブジェクトが存在しない領域についても、高解像度画像用の記憶領域を用意する必要がある。一方、これらのバッファを上述のような階層データとすることにより、低解像度の階層を拡大すれば得られる領域は高解像度画像のレンダリング対象から外すことができる。
【０１６２】
例えば領域ごとに必要な解像度をユーザが指定することにより、各階層において必要最低限の領域のみのレンダリングで済みメモリの使用効率が向上する。頻繁なタイルデータ更新と画像表示を応答性良く行うためには、生成したタイルデータは圧縮しなくても良い。なお画像の全体にわたりアンチエイリアスが必要な場合はスーパーサンプリングを行うなど、対象領域の割合によってアンチエイリアスの手法を切り替えてもよい。
【０１６３】
アンチエイリアスを階層データを用いて行う場合、常に最下層の画像のみをレンダリングし、画像確定後にその縮小画像を生成する場合と、ユーザが指定した階層にレンダリングし、そのたびに全ての階層の対応する領域も更新する場合とが考えられる。前者は縮小処理の頻度が低く抑えられ、後者はラスタライズ、シェーダー処理、ＲＯＰ（Rendering Output Pipeline）、ピクセル転送などのピクセル生成処理のコストを予測しやすい。ただし後者は、グラフィックプロセッサ４０２とメインメモリ６０間で元の画像、拡大画像、縮小画像などのデータが頻繁に転送されるため、転送バンド幅への負荷がかかり易くなる。
【０１６４】
アンチエイリアスの場合のみならず、階層データをレンダリングする場合は、レンダリング結果を各階層へ反映させるため、画像を拡大、縮小するスケーリング処理が頻繁に必要となる。スケーリング処理の都度、画像データをグラフィックプロセッサ、メインメモリ間で送受すると、両者間の転送バンド幅を圧迫する懸念がある。そこで本実施の形態では、図２７で示すようにスケーリング処理を行うスケーラ４２２をメインメモリ６０に内蔵するようにしてもよい。
【０１６５】
これにより、グラフィックプロセッサ５２０およびメインメモリ６０は、レンダリング対象の解像度の画像のみをやりとりすればよく、メインメモリ６０内の階層データにおける各階層へのレンダリング結果の反映は、スケーラ４２２がメインメモリ６０内で行う。結果としてグラフィックプロセッサ５２０とメインメモリ６０間の転送バンド幅の圧迫が防止でき、階層データのレンダリングが効率的に実施できる。なおスケーラ４２２はメインメモリ６０に内蔵せず、グラフィックプロセッサ５２０とメインメモリ６０間のバスとは別のバスでメインメモリ６０に接続するようにしても同様の効果が得られる。
【０１６６】
以上述べた本実施の形態は、一般的なグラフィックプロセッサを利用して実現することができる。ここで一般的なグラフィックプロセッサでは、内部のフレームバッファ、すなわち上述のＧＰＵバッファのアドレッシング時、メインメモリからの読み出しおよび書き込みの回数を抑えるため、画面上でまとまった領域に対し近いメモリアドレスを割り当てる、という手法をとる。しかしＧＰＵバッファに用いられる領域は連続したアドレス空間でなくてはならない、という制約がある。すなわちアドレスが不連続な領域を敷き詰めることができない。図２８、２９はその際の処理の様子を示している。
【０１６７】
まず図２８において、階層データの第３階層の画像の一部の領域４３０をレンダリング対象としたとき、「１１」〜「１８」のアドレスが割り振られるとする。この場合、グラフィックプロセッサ４０２はＧＰＵバッファに当該領域４３０を敷き詰めることができる。その後、図２９に示すように、同じ第３階層の一部の領域４３２をレンダリング対象としたとする。領域４３２は、図２８においてアドレス「１１」および「１２」を割り当て済みの領域を含む。この場合、領域４３２のその他の領域に、「１９」〜「２４」のアドレスを割り振る。このようにアドレス割り当てを行うと、領域４３２はアドレスが不連続な領域を含んでしまい、グラフィックプロセッサ４０２がＧＰＵバッファに当該領域を敷き詰めることができなくなる。
【０１６８】
このため、領域４３２を別の記憶領域に一旦コピーし、新たな連続したアドレス（図２９ではアドレス「５０」〜「５７」）を割り当てることによりＧＰＵバッファへの敷き詰めを行う必要がある。このような処理コストを軽減するため本実施の形態では、メインメモリ６０のメモリコントローラ（図示せず）に、領域の位置と割り振るアドレスとを対応づけるテーブルを設けてもよい。図２９の領域４３２の場合、ラスタ順に「０」〜「７」で領域の位置を表現し、「０」＝「１９」、「１」＝「２０」、「２」＝「２１」、「３」＝「２２」、「４」＝「２３」、「５」＝「２４」、「６」＝「１１」、「７」＝「１２」、と対応づける。
【０１６９】
こうすることにより不連続なアドレスを割り振られた領域のレンダリングであっても、メインメモリ６０においてアドレス変換がなされるため、図２９で示したような敷き詰めのためのコピーが必要なくなる。さらに図２７のようにメインメモリ６０がスケーラ４２２を内蔵していたとすると、拡大、縮小した画像の生成も含め、階層データを生成、更新するための多くの処理をメインメモリ６０内で閉じることができる。
【０１７０】
本実施の形態のように階層データのレンダリングを可能とすることにより、ヘッダ、インデックスブロックによるタイルデータへのランダムアクセス、ヘッダを分割して階層データごとのメモリコストを下げたことによる複数の階層データの同時処理、タイルデータの追加、削除、更新がレンダリングによって可能、といった特徴が得られる。これらの特徴は、ランダムアクセス、マルチテクスチャリング、レンダーターゲット、というテクスチャの要件と同等である。したがって、階層データをテクスチャと同等に扱うことが可能になり、階層データをコンピュータグラフィックスを用いた広範囲の用途に応用することができる。
【０１７１】
以上、本発明を実施の形態をもとに説明した。上記実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【符号の説明】
【０１７２】
１  情報処理システム、  １０  情報処理装置、  １２  表示装置、  ２０  入力装置、  ３８  タイル画像、  ５０  ハードディスクドライブ、  ６０  メインメモリ、  １００  制御部、  １０２  入力情報取得部、  １０６ ロードブロック決定部、  １０８ ロード部、  １１０  タイル画像特定部、  １１２ デコード部、  １１４ 表示画像処理部、  １２０  画像階層生成部、  １２２  画像分割部、  １２４  冗長性検出部、  １２６  ヘッダ・インデックスブロック生成部、  １５０  ヘッダ、  １６０  インデックスブロック、  １７０  タイル画像、  ３１８ 画像ファイル取得部、  ３２０ 更新情報取得部、３２２ タイル画像生成部、  ３２４  ヘッダ・インデックスブロック更新部、  ３２６  表示画像制御部、  ３２８  画像ファイル生成部、  ４００  メインプロセッサ、  ４０２  グラフィックプロセッサ、  ４０４ レンダリング部、  ４０６  階層データ更新部、  ４０８  ＧＰＵカラーバッファ、  ４１０  ＧＰＵーＺバッファ、  ４１２  ダーティマスク、  ４１４  カラーバッファ、  ４１６  Ｚバッファ、  ４１８  モデルデータ、  ４２２  スケーラ、  ５２０  グラフィックプロセッサ。
【図１】
2011090648.tif 000003
【図２】
2011090648.tif 000004
【図３】
2011090648.tif 000005
【図４】
2011090648.tif 000006
【図５】
2011090648.tif 000007
【図６】
2011090648.tif 000008
【図７】
2011090648.tif 000009
【図８】
2011090648.tif 000010
【図９】
2011090648.tif 000011
【図１０】
2011090648.tif 000012
【図１１】
2011090648.tif 000013
【図１２】
2011090648.tif 000014
【図１３】
2011090648.tif 000015
【図１４】
2011090648.tif 000016
【図１５】
2011090648.tif 000017
【図１６】
2011090648.tif 000018
【図１７】
2011090648.tif 000019
【図１８】
2011090648.tif 000020
【図１９】
2011090648.tif 000021
【図２０】
2011090648.tif 000022
【図２１】
2011090648.tif 000023
【図２２】
2011090648.tif 000024
【図２３】
2011090648.tif 000025
【図２４】
2011090648.tif 000026
【図２５】
2011090648.tif 000027
【図２６】
2011090648.tif 000028
【図２７】
2011090648.tif 000029
【図２８】
2011090648.tif 000030
【図２９】
2011090648.tif 000031