しかしながら、従来の構成では、コードストリームの位置は制限を守った上でファイル内の任意の位置におくことができるため、仮想記憶を持たない計算機で非常に大きなファイルを読み込もうとした場合に、該当するコードストリームはメモリ容量に対して十分小さいにも関わらず、その前にメモリ容量を越えるサイズのコードストリームがあったときには、目的のコードストリームまで読めずにエラーになったり、たとえ仮想記憶が実現できていても多数ページを読み込むのにかなりの時間を要したり、目的のコードストリームまで読めずにエラーになるという課題を有している。
本発明は、上記に鑑みてなされたものであって、変換前後において互換性は保ったまま符号構造変換が可能となり、少ないメモリ容量あるいは限られたメモリ容量で符号量の少ない一部のコードストリームを解釈する符号変換装置およびプログラムを提供することを目的とする。
上述した課題を解決し、目的を達成するために、請求項1にかかる発明の符号変換装置は、符号化された構造化文書の符号構造を解析し、前記構造化文書の各レイアウトオブジェクトを構成するオブジェクトのコードストリームが参照されている位置を特定する構造解析手段と、この構造解析手段による前記構造化文書の符号構造解析結果に基づいて、前記各レイアウトオブジェクトを構成する各オブジェクトに対応するコードストリームが隣接した位置になるように、前記各コードストリームの移動を行なうコードストリーム移動手段と、このコードストリーム移動手段による前記各コードストリームを移動した前記各レイアウトオブジェクトについて、ページ毎に前記各コードストリームの移動を行なうレイアウトオブジェクト移動手段と、を備える。
また、請求項2にかかる発明は、請求項1記載の符号変換装置において、前記レイアウトオブジェクト移動手段は、ページ毎に前記各コードストリームの移動を行なう際に、ファイル全体の前記各コードストリームを一括処理で移動する。
また、請求項3にかかる発明は、請求項1記載の符号変換装置において、前記レイアウトオブジェクト移動手段は、ページ毎に前記各コードストリームの移動を行なう際に、外部からアクセスされたページ毎に断片的に移動する。
また、請求項4にかかる発明は、請求項3記載の符号変換装置において、外部からのアクセスは、部分符号に対するアクセスである。
また、請求項5にかかる発明は、請求項4記載の符号変換装置において、前記部分符号に対してアクセスする手順は、国際標準IS15444−9で規定するJPIPプロトコルである。
また、請求項6にかかる発明は、請求項5記載の符号変換装置において、前記レイアウトオブジェクト移動手段は、新しいView-Window要求があった時に、前記各コードストリームの移動を行なう。
また、請求項7にかかる発明は、請求項4記載の符号変換装置において、前記部分符号に対してアクセスする手順は、国際標準IS15444−6で規定する外部データ参照手順である。
また、請求項8にかかる発明は、請求項2または3記載の符号変換装置において、前記レイアウトオブジェクト移動手段は、ページ毎に独立した領域に前記コードストリームを移動させる。
また、請求項9にかかる発明は、請求項8記載の符号変換装置において、前記レイアウトオブジェクト移動手段は、ページサムネイルを除く前記レイアウトオブジェクトに対するコードストリームを移動させる。
また、請求項10にかかる発明は、請求項8記載の符号変換装置において、前記レイアウトオブジェクト移動手段は、前記レイアウトオブジェクトのまとまり毎にコードストリームを移動させる。
また、請求項11にかかる発明は、請求項10記載の符号変換装置において、前記レイアウトオブジェクト移動手段は、前景オブジェクト、背景オブジェクト、マスクオブジェクトのコードストリームの組で移動させる。
また、請求項12にかかる発明は、請求項11記載の符号変換装置において、前記レイアウトオブジェクト移動手段は、前景オブジェクト、背景オブジェクト、マスクオブジェクトのコードストリームの符号量の和で昇べき順になるように移動させる。
また、請求項13にかかる発明は、請求項10記載の符号変換装置において、前記View-Window内の前記レイアウトオブジェクトを外の前記レイアウトオブジェクトよりも前に移動させる。
また、請求項14にかかる発明は、請求項2または3記載の符号変換装置において、前記レイアウトオブジェクト移動手段は、ページサムネイルをまとめた領域に移動させる。
また、請求項15にかかる発明は、請求項1記載の符号変換装置において、前記構造化文書の仕様が国際標準IS15444−6で規定されるファイルである。
また、請求項16にかかる発明は、請求項1記載の符号変換装置において、前記構造化文書の仕様がPDF(Portable Document Format)で規定されるファイルである。
また、請求項17にかかる発明のプログラムは、符号化された構造化文書の符号構造を解析し、前記構造化文書の各レイアウトオブジェクトを構成するオブジェクトのコードストリームが参照されている位置を特定する構造解析機能と、この構造解析機能による前記構造化文書の符号構造解析結果に基づいて、前記各レイアウトオブジェクトを構成する各オブジェクトに対応するコードストリームが隣接した位置になるように、前記各コードストリームの移動を行なうコードストリーム移動機能と、このコードストリーム移動機能による前記各コードストリームを移動した前記各レイアウトオブジェクトについて、ページ毎に前記各コードストリームの移動を行なうレイアウトオブジェクト移動機能と、をコンピュータに実行させる。
また、請求項18にかかる発明は、請求項17記載のプログラムにおいて、前記レイアウトオブジェクト移動機能は、ページ毎に前記各コードストリームの移動を行なう際に、ファイル全体の前記各コードストリームを一括処理で移動する。
また、請求項19にかかる発明は、請求項17記載のプログラムにおいて、前記レイアウトオブジェクト移動機能は、ページ毎に前記各コードストリームの移動を行なう際に、外部からアクセスされたページ毎に断片的に移動する。
請求項1にかかる発明によれば、変換前後において互換性は保ったまま符号構造変換が可能となり、少ないメモリ容量あるいは限られたメモリ容量で符号量の少ない一部のコードストリームを解釈することができる、という効果を奏する。
また、請求項2にかかる発明によれば、対話処理を要することなくファイル全体を一括処理で変換できるためバッチ処理や夜間処理を用いたアプリケーションに向く構成が実現でき、少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
また、請求項3にかかる発明によれば、短時間にインタラクティブに構造を変換することができ、少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
また、請求項4にかかる発明によれば、短時間にインタラクティブに構造を変換中も少ないメモリで変換することができ、少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
また、請求項5にかかる発明によれば、国際標準仕様に準拠した構造により互換性を保てるだけでなく、短時間にインタラクティブに構造を変換中も少ないメモリで変換することができ、少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
また、請求項6にかかる発明によれば、国際標準仕様に準拠した構造により互換性を保てるだけでなく、短時間にインタラクティブに構造を変換中もView-Windowサイズで決定される少ないメモリで変換することができ、少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
また、請求項7にかかる発明によれば、国際標準仕様に準拠した構造により互換性を保てるだけでなく、短時間にインタラクティブに構造を変換中も少ないメモリで変換することができ、少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
また、請求項8にかかる発明によれば、符号構造を変換中も従来はファイルサイズ分必要であったメモリが、平均的にファイルサイズ/ページ数分の少ないメモリで変換することができる、という効果を奏する。さらに、変換後も各ページ毎にインタラクティブかつ少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
また、請求項9にかかる発明によれば、符号構造を変換中も従来はファイルサイズ分必要であったメモリが、平均的にファイルサイズ/ページ数分の少ないメモリで変換することができる、という効果を奏する。さらに、変換後もページサムネイル以外のレイアウトオブジェクトのアクセスが各ページ毎にインタラクティブかつ少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
また、請求項10にかかる発明によれば、符号構造を変換中も従来はファイルサイズ分必要であったメモリが、平均的にファイルサイズ/ページ数分の少ないメモリで変換することができる、という効果を奏する。さらに、変換後もページサムネイル以外のレイアウトオブジェクトのアクセスが各レイアウトオブジェクトの論理単位毎にインタラクティブかつ少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
また、請求項11にかかる発明によれば、符号構造を変換中も従来はファイルサイズ分必要であったメモリが、平均的にファイルサイズ/ページ数分の少ないメモリで変換することができる、という効果を奏する。さらに、変換後もページサムネイル以外のレイアウトオブジェクトのアクセスが各レイアウトオブジェクトの論理単位毎にインタラクティブかつ少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
また、請求項12にかかる発明によれば、符号構造を変換中も従来はファイルサイズ分必要であったメモリが、平均的にファイルサイズ/ページ数分の少ないメモリで変換することができる、という効果を奏する。さらに、変換後もページサムネイル以外のレイアウトオブジェクトのアクセスが各レイアウトオブジェクトの論理単位毎にインタラクティブかつ少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
また、請求項13にかかる発明によれば、符号構造を変換中も従来はファイルサイズ分必要であったメモリが、平均的にファイルサイズ/ページ数分の少ないメモリで変換することができる、という効果を奏する。さらに、変換後もページサムネイル以外のレイアウトオブジェクトのアクセスが各レイアウトオブジェクトの論理単位毎にインタラクティブかつ少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
また、請求項14にかかる発明によれば、各ページ毎にインタラクティブかつ少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームが読めるようになる、という効果を奏する。また、ページサムネイルを高速、省メモリで多くのページを読めるようにすることができる、という効果を奏する。
また、請求項15にかかる発明によれば、国際標準仕様と互換性を保ったまま、各ページ毎にインタラクティブかつ少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームが読めるようになる、という効果を奏する。また、ページサムネイルを高速、省メモリで多くのページを読めるようにすることができる、という効果を奏する。
また、請求項16にかかる発明によれば、変換前の仕様と互換性を保ったまま、各ページ毎にインタラクティブかつ少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームが読めるようになる、という効果を奏する。また、ページサムネイルを高速、省メモリで多くのページを読めるようにすることができる、という効果を奏する。
また、請求項17にかかる発明によれば、変換前後において互換性は保ったまま符号構造変換が可能となり、少ないメモリ容量あるいは限られたメモリ容量で符号量の少ない一部のコードストリームを解釈することができる、という効果を奏する。
また、請求項18にかかる発明によれば、対話処理を要することなくファイル全体を一括処理で変換できるためバッチ処理や夜間処理を用いたアプリケーションに向く構成が実現でき、少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
また、請求項19にかかる発明によれば、短時間にインタラクティブに構造を変換することができ、少ないあるいは限られたメモリ容量で符号量の少ない一部のコードストリームを読めるようにすることができる、という効果を奏する。
最初に、本発明の前提となる「階層符号化アルゴリズム」及び「離散ウェーブレット変換に基づく符号化・復号化アルゴリズム」の概要について説明する。なお、「離散ウェーブレット変換に基づく符号化・復号化アルゴリズム」の代表例が「JPEG2000アルゴリズム」である。
図1は、離散ウェーブレット変換に基づく符号化方式の基本となる階層符号化アルゴリズムを実現するシステムの機能ブロック図である。このシステムは、画像圧縮手段として機能するものであって、色空間変換・逆変換部101、2次元ウェーブレット変換・逆変換部102、量子化・逆量子化部103、エントロピー符号化・復号化部104、タグ処理部105の各機能ブロックにより構成されている。
このシステムが従来のJPEGアルゴリズムと比較して最も大きく異なる点の一つは変換方式である。JPEGでは離散コサイン変換(DCT:Discrete Cosine Transform)を用いているのに対し、この階層符号化アルゴリズムでは、2次元ウェーブレット変換・逆変換部102において、離散ウェーブレット変換(DWT:Discrete Wavelet Transform)を用いている。DWTはDCTに比べて、高圧縮領域における画質が良いという長所を有し、この点が、JPEGの後継アルゴリズムであるJPEG2000でDWTが採用された大きな理由の一つとなっている。
また、他の大きな相違点は、この階層符号化アルゴリズムでは、システムの最終段に符号形成を行うために、タグ処理部105の機能ブロックが追加されていることである。このタグ処理部105で、画像の圧縮動作時には圧縮データが符号列データとして生成され、伸長動作時には伸長に必要な符号列データの解釈が行われる。そして、符号列データによって、JPEG2000は様々な便利な機能を実現できるようになった。例えば、ブロック・ベースでのDWTにおけるオクターブ分割に対応した任意の階層(デコンポジションレベル)で、静止画像の圧縮伸長動作を自由に停止させることができるようになる(後述する図3参照)。また、一つのファイルから低解像度画像(縮小画像)を取り出したり、画像の一部(タイリング画像)を取り出すことができるようになる。
原画像の入出力部分には、色空間変換・逆変換部101が接続される場合が多い。例えば、原色系のR(赤)/G(緑)/B(青)の各コンポーネントからなるRGB表色系や、補色系のY(黄)/M(マゼンタ)/C(シアン)の各コンポーネントからなるYMC表色系から、YUVあるいはYCbCr表色系への変換又は逆変換を行う部分がこれに相当する。
次に、JPEG2000アルゴリズムについて説明する。カラー画像は、一般に、図2に示すように、原画像の各コンポーネント111(ここではRGB原色系)が、矩形をした領域によって分割される。この分割された矩形領域は、一般にブロックあるいはタイルと呼ばれているものであるが、JPEG2000では、タイルと呼ぶことが一般的であるため、以下、このような分割された矩形領域をタイルと記述することにする(図2の例では、各コンポーネント111が縦横4×4、合計16個の矩形のタイル112に分割されている)。このような個々のタイル112(図2の例で、R00,R01,…,R15/G00,G01,…,G15/B00,B01,…,B15)が、画像データの圧縮伸長プロセスを実行する際の基本単位となる。従って、画像データの圧縮伸長動作は、コンポーネント毎、また、タイル112毎に、独立に行われる。
画像データの符号化時には、各コンポーネント111の各タイル112のデータが、図1の色空間変換・逆変換部101に入力され、色空間変換を施された後、2次元ウェーブレット変換・逆変換部102で2次元ウェーブレット変換(順変換)が施されて、周波数帯に空間分割される。
図3には、デコンポジションレベル数が3の場合の、各デコンポジションレベルにおけるサブバンドを示している。即ち、原画像のタイル分割によって得られたタイル原画像(0LL)(デコンポジションレベル0)に対して、2次元ウェーブレット変換を施し、デコンポジションレベル1に示すサブバンド(1LL,1HL,1LH,1HH)を分離する。そして引き続き、この階層における低周波成分1LLに対して、2次元ウェーブレット変換を施し、デコンポジションレベル2に示すサブバンド(2LL,2HL,2LH,2HH)を分離する。順次同様に、低周波成分2LLに対しても、2次元ウェーブレット変換を施し、デコンポジションレベル3に示すサブバンド(3LL,3HL,3LH,3HH)を分離する。図3では、各デコンポジションレベルにおいて符号化の対象となるサブバンドを、網掛けで表してある。例えば、デコンポジションレベル数を3としたとき、網掛けで示したサブバンド(3HL,3LH,3HH,2HL,2LH,2HH,1HL,1LH,1HH)が符号化対象となり、3LLサブバンドは符号化されない。
次いで、指定した符号化の順番で符号化の対象となるビットが定められ、図1に示す量子化・逆量子化部103で対象ビット周辺のビットからコンテキストが生成される。
この量子化の処理が終わったウェーブレット係数は、個々のサブバンド毎に、「プレシンクト」と呼ばれる重複しない矩形に分割される。これは、インプリメンテーションでメモリを効率的に使うために導入されたものである。図4に示したように、一つのプレシンクトは、空間的に一致した3つの矩形領域からなっている。更に、個々のプレシンクトは、重複しない矩形の「コード・ブロック」に分けられる。これは、エントロピー・コーディングを行う際の基本単位となる。
ウェーブレット変換後の係数値は、そのまま量子化し符号化することも可能であるが、JPEG2000では符号化効率を上げるために、係数値を「ビットプレーン」単位に分解し、画素あるいはコード・ブロック毎に「ビットプレーン」に順位付けを行うことができる。
ここで、図5はビットプレーンに順位付けする手順の一例を示す説明図である。図5に示すように、この例は、原画像(32×32画素)を16×16画素のタイル4つで分割した場合で、デコンポジションレベル1のプレシンクトとコード・ブロックの大きさは、各々8×8画素と4×4画素としている。プレシンクトとコード・ブロックの番号は、ラスター順に付けられており、この例では、プレシンクトが番号0から3まで、コード・ブロックが番号0から3まで割り当てられている。タイル境界外に対する画素拡張にはミラーリング法を使い、可逆(5,3)フィルタでウェーブレット変換を行い、デコンポジションレベル1のウェーブレット係数値を求めている。
また、タイル0/プレシンクト3/コード・ブロック3について、代表的な「レイヤ」構成の概念の一例を示す説明図も図5に併せて示す。変換後のコード・ブロックは、サブバンド(1LL,1HL,1LH,1HH)に分割され、各サブバンドにはウェーブレット係数値が割り当てられている。
レイヤの構造は、ウェーブレット係数値を横方向(ビットプレーン方向)から見ると理解し易い。1つのレイヤは任意の数のビットプレーンから構成される。この例では、レイヤ0,1,2,3は、各々、1,3,1,3のビットプレーンから成っている。そして、LSB(Least Significant Bit:最下位ビット)に近いビットプレーンを含むレイヤ程、先に量子化の対象となり、逆に、MSB(Most Significant Bit:最上位ビット)に近いレイヤは最後まで量子化されずに残ることになる。LSBに近いレイヤから破棄する方法はトランケーションと呼ばれ、量子化率を細かく制御することが可能である。
図1に示すエントロピー符号化・復号化部104では、コンテキストと対象ビットから確率推定によって、各コンポーネント111のタイル112に対する符号化を行う。こうして、原画像の全てのコンポーネント111について、タイル112単位で符号化処理が行われる。最後にタグ処理部105は、エントロピー符号化・復号化部104からの全符号化データを1本の符号列データに結合するとともに、それにタグを付加する処理を行う。
図6には、この符号列データの1フレーム分の概略構成を示している。この符号列データの先頭と各タイルの符号データ(bit stream)の先頭にはヘッダ(メインヘッダ(Main header)、タイル境界位置情報等であるタイルパートヘッダ(tile part header))と呼ばれるタグ情報が付加され、その後に、各タイルの符号化データが続く。なお、メインヘッダ(Main header)には、符号化パラメータや量子化パラメータが記述されている。そして、符号列データの終端には、再びタグ(end of codestream)が置かれる。また、図7は、符号化されたウェーブレット係数値が収容されたパケットをサブバンド毎に表わしたコードストリーム構造を示すものである。図7に示すように、タイルによる分割処理を行っても、あるいはタイルによる分割処理を行わなくても、同様のパケット列構造を持つことになる。
一方、符号化データの復号化時には、画像データの符号化時とは逆に、各コンポーネント111の各タイル112の符号列データから画像データを生成する。この場合、タグ処理部105は、外部より入力した符号列データに付加されたタグ情報を解釈し、符号列データを各コンポーネント111の各タイル112の符号列データに分解し、その各コンポーネント111の各タイル112の符号列データ毎に復号化処理(伸長処理)を行う。このとき、符号列データ内のタグ情報に基づく順番で復号化の対象となるビットの位置が定められるとともに、量子化・逆量子化部103で、その対象ビット位置の周辺ビット(既に復号化を終えている)の並びからコンテキストが生成される。エントロピー符号化・復号化部104で、このコンテキストと符号列データから確率推定によって復号化を行い、対象ビットを生成し、それを対象ビットの位置に書き込む。このようにして復号化されたデータは周波数帯域毎に空間分割されているため、これを2次元ウェーブレット変換・逆変換部102で2次元ウェーブレット逆変換を行うことにより、画像データの各コンポーネントの各タイルが復元される。復元されたデータは色空間変換・逆変換部101によって元の表色系の画像データに変換される。
以上が、「離散ウェーブレット変換に基づく符号化・復号化アルゴリズム」の概要である。
次に、JPEG2000のPart6“Compound image file Format”について説明する。JPEG2000のPart6は、絵や文字などの異なる特性を含む複合的な画像に特化した規格であり、非特許文献1に示す国際標準IS−15444−6で規定されている。このようなJPEG2000のPart6の中で定められたJPEG2000データのファイル拡張子は、「JPM」である。このような構造化文書の一例であるJPMファイルは、図8に示すように、コードストリームの位置を示すオフセットを記入するObject Header Box201、参照されるコードストリームBox202やBox203から構成されている。このJPMファイルは、そのファイル内でデータを参照するようにしたり、BOX情報の順番を規定したり、オフセットによる位置指定ではなくIDにより参照できるようにしている。また、図8に示す所定のBOXについては、そのレベルや範囲を維持していれば、その出現回数や出現する順番が変動しても標準互換のJPMファイルとして機能すると規定されている。一例としては、各レイアウトオブジェクト内のオブジェクトに対するコードストリームについては、構造化文書の論理構造を満たし、
1)文書サムネイル(図8中の符号203)以降ファイルの最後尾まで
2)最上位レベルの位置
であれば任意の位置に置いて良いことが規定されている。
続いて、本発明の第1の実施の形態について詳細に説明する。本実施の形態では、画像を符号化したコードストリームが出現する位置の制限を守った上、すなわちファイルの機能的互換性を保った上でコードストリームの位置を移動させて符号構造を変換することにより、少ないメモリ容量あるいは限られたメモリ容量で符号量の少ない一部のコードストリームを高速に読めるようにすることができる。
ここで、図9は本実施の形態の符号変換装置1のハードウェア構成を示すブロック図である。符号変換装置1は、例えばパーソナルコンピュータやワークステーションを主体に構成されている。図9に示すように、このような符号変換装置1は、コンピュータの主要部であって各部を集中的に制御するCPU(Central Processing Unit)2を備えている。このCPU2には、BIOSなどを記憶した読出し専用メモリであるROM(Read Only Memory)3と、各種データを書換え可能に記憶するRAM(Random Access Memory)4とがバス5で接続されている。
さらにバス5には、各種のプログラム等を格納するHDD(Hard Disk Drive)6と、配布されたプログラムであるコンピュータソフトウェアを読み取るための機構としてCD(Compact Disc)−ROM7を読み取るCD−ROMドライブ8と、ネットワーク9を介して外部の他のコンピュータ等と通信により情報を伝達するための通信制御装置10と、CPU2に対する各種命令や情報入力するためのキーボードやマウスなどの入力装置11と、処理経過や結果等を表示するCRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)などの表示装置12とが、図示しないI/Oを介して接続されている。
RAM4は、各種データを書換え可能に記憶する性質を有していることから、CPU2の作業エリアとして機能してバッファ等の役割を果たす。
図9に示すCD−ROM7は、この発明の記憶媒体を実施するものであり、OS(Operating System)や各種のプログラムが記憶されている。CPU2は、CD−ROM7に記憶されているプログラムをCD−ROMドライブ8で読み取り、HDD6にインストールする。
なお、記憶媒体としては、CD−ROM7のみならず、DVDなどの各種の光ディスク、各種光磁気ディスク、フレキシブルディスクなどの各種磁気ディスク等、半導体メモリ等の各種方式のメディアを用いることができる。また、通信制御装置10を介してインターネットなどからプログラムをダウンロードし、HDD6にインストールするようにしてもよい。この場合に、送信側のサーバでプログラムを記憶している記憶装置も、この発明の記憶媒体である。なお、プログラムは、所定のOS(Operating System)上で動作するものであってもよいし、その場合に後述の各種処理の一部の実行をOSに肩代わりさせるものであってもよいし、所定のアプリケーションソフトやOSなどを構成する一群のプログラムファイルの一部として含まれているものであってもよい。
このシステム全体の動作を制御するCPU2は、このシステムの主記憶として使用されるHDD6上にロードされたプログラムに基づいて各種処理を実行する。
次に、符号変換装置1のHDD6にインストールされている各種のプログラムがCPU2に実行させる機能のうち、本実施の形態の符号変換装置1が備える特長的な機能について説明する。
図10は、符号変換装置1の機能構成を示すブロック図である。図10に示すように、符号変換装置1は、バッファ31と、構造化文書符号の構造を解析し、構造化文書の各レイアウトオブジェクトを構成するオブジェクトのコードストリームが参照されている位置を特定する構造解析手段32と、構造化文書の符号構造解析結果に基づいてコードストリームの格納位置を示す位置指示手段33と、コードストリームを移動させる移動手段34と、オフセットを修正する修正手段35と、部分符号でアクセスされたか否かを識別する識別手段36とを備えている。
また、構造解析手段32は、Page Boxを検出するPage Box検出手段32aと、Layout Object Boxを検出するLayout Object Box検出手段32bと、Object Boxを検出するObject Box検出手段32cと、前景、背景、マスクの組を識別する第1識別手段32dと、コードストリームがないことを識別する第2識別手段32eと、外部参照を識別する第3識別手段32fとを備えている。
次に、符号変換装置1における処理動作について説明する。図11は、符号変換装置1における符号変換処理の流れを示すフローチャートである。図11に示すように、符号変換装置1における符号変換処理は、概略的には、ステップS1からステップS5までで文字部や画像部などを含む絵混じり文書ファイル(JPMファイル)をレイヤ分割または領域分割した各レイアウトオブジェクトを構成するオブジェクトのコードストリーム(前景コードストリーム、背景コードストリーム、マスクコードストリーム)の移動を行い、後半のステップS6からステップS15では前半で行なった各オブジェクトに対応するコードストリームの移動に対して各ページ毎にレイアウトオブジェクトに対するコードストリームを移動する、というものである。
図11に示すように、ステップS1では、バッファ31に対象となるファイルを読み込み、存在する全てのレイアウトオブジェクト内のオブジェクトに対するコードストリームの移動が(移動不要の判断も含めて)終了したかどうかをチェックする。これは、符号変換処理の前半部分のオブジェクトの移動が終了したかどうかをチェックする終了条件であり、構造解析手段32内にあるLayout Object Box検出手段32bによってそのファイル内に未処理のレイアウトオブジェクトが検出できなくなることにより、条件が成立する。
さて、この条件が成立しない間は(ステップS1のNo)、ステップS2に進み、バッファ31に読み込んだファイルに存在するレイアウトオブジェクト毎に、当該レイアウトオブジェクト内のオブジェクトが前景、背景、マスクの組になっているか否かを識別する。
レイアウトオブジェクト内のオブジェクトが前景、背景、マスクの組になっていない場合には(ステップS2のNo)、当該レイアウトオブジェクトを構成する各オブジェクトに対応するコードストリームが隣接した位置になるようにするため、ステップS3に進んでオブジェクトコードストリームの移動を行なう。なお、ステップS2の動作は構造解析手段32内にある前景、背景、マスクの組を識別する第1識別手段32dが動作することにより実現され、ステップS3の動作はコードストリームの格納位置を示す位置指示手段33と、コードストリームを移動させる移動手段34と、オフセットを修正する修正手段35とによって実行される。
ここで、ステップS3の処理動作について詳述する。図12は、レイアウトオブジェクトを構成するオブジェクト移動の動作イメージを示す模式図、図13は、オブジェクト移動処理の流れを示すフローチャートである。
前述したように各オブジェクトのコードストリームは一定の条件で任意の位置に置いてよいことから、オブジェクト移動処理前は、図12に示すように各オブジェクトのコードストリーム毎に分かれた状態で散在している。一方、文書をレンダリング(データ可視化)するにあたってはレイアウトオブジェクト毎にレンダリングするため、
1)前景コードストリーム
2)背景コードストリーム
3)マスクコードストリーム
を一組の論理的な塊としてアクセスすることになる。そこで、本実施の形態においては、図12に示すように、オブジェクト移動処理後は、メモリ上に散在している各コードストリームを移動させて一連のメモリ領域にまとめることで、高速かつ省メモリでアクセスすることができるようにしたものである。
図13に示すように、オブジェクトのコードストリームを移動させるにあたっては、ステップS31〜S33及びステップS35に示す条件をチェックする。
まず、ステップS31においては、オブジェクトヘッダに書かれているコードストリームの有無をチェックする。コードストリームが何もない場合とは(ステップS31のYes)、例えば背景だけを出すように構成されたオブジェクトでは、マスクオブジェクトに対するコードストリームは持たない(内容は全て0と仮定することでそのレイアウトオブジェクト領域に対して前景の内容に依存しないで背景だけを出す)場合などである。このようなステップS31の動作は、コードストリームがないことを識別する第2識別手段32eが動作することにより実行される。
また、JPMファイルやPDFファイルでは仕様上外部参照という使い方を許しているので、ステップS32で示すように、対応するコードストリームがそのファイル内にない場合も(ステップS32のYes)、対象外である。ステップS32の動作は、外部参照を識別する第3識別手段32fが動作することにより実現される。
さらに、ステップS33でレイアウトオブジェクトがページサムネイルレイアウトオブジェクトであるか否かを判定するとともに、ステップS35でページサムネイルレイアウトオブジェクトコードストリームは全てのページに渡ってメモリ上の連続する位置を取るように構成しているか否かを判定することにより、コードストリームの移動位置が異なることになる。
まず、ステップS33において、そのオブジェクトがページサムネイルオブジェクトでない通常のオブジェクトであると判定した場合(ステップS33のNo)、ステップS34に進み、そのオブジェクトに対するコードストリームを参照されるページの位置に移動させるとともに、移動したことにより発生するファイルの先頭位置からのオフセットを修正する。なお、コードストリームの格納位置は位置指示手段33によって示され、コードストリームの格納は移動手段34により実行される。
ここで、オフセットの修正について図14を参照しつつ説明する。ここでは、簡単のために、図14に示すように、長いコードストリーム1の後に短いコードストリーム2がある場合を用いて説明する。移動前においては、それぞれのコードストリームへのファイルの先頭からのオフセットと長さが以下の様になっていたとする。
種類 オフセット 長さ
コードストリーム1 a b
コードストリーム2 c d
この様な状態において、図14に示すように、コードストリーム2をコードストリーム1の直前に移動する場合には、オフセットと長さを以下の様に変換すればよい。
種類 オフセット 長さ
コードストリーム1 a+d b
コードストリーム2 a d
すなわち、移動前にコードストリーム1とコードストリーム2の間に他のコードストリームがあった場合においても、それらのコードストリームに対するオフセットにコードストリーム2の長さ分を加算すればよいことになる。このようにしてオフセット値の修正を行い、ステップS34を終了する。なお、このようなオフセットの修正は、修正手段35により実行される。
一方、ステップS33において、コードストリームがページサムネイルオブジェクトに対するコードストリームであると判定した場合には(ステップS33のYes)、ステップS35に進み、複数あるページサムネイルのコードストリームを1つの領域にまとめるか否かを判断する。ここで、ページサムネイルに対応するコードストリームをまとめるか否かのメモリマップイメージを図15に示す。図15に示すように、一般にページ数が100ページを超えるなど、1文書が多数のページで構成されるときは各サムネイルに対応するコードストリームをまとめておいたほうがサムネイルを表示する速度が向上するので、ページサムネイルに対応するコードストリームをまとめるようにする。一方、図15に示すように、ページ数が少ない場合や複数のページサムネイルを1画面に表示することがない場合等は、サムネイルに対応するコードストリームをまとめなくても特に影響はない。したがって、ステップS35ではこうしたアプリケーションの仕様によって決定される要素に従って、そのページサムネイルコードストリームの移動先を異ならせることになる。
1つの領域にまとめないと判定した場合には(ステップS35のNo)、各ページ毎にサムネイルを配置するのでステップS34の処理を行う。
一方、1つの領域にまとめると判定した場合には(ステップS35のYes)、ステップS36に進み、コードストリームをページサムネイル領域に移動し、オフセットを修正する。ステップS36における処理動作は、ステップS34で示した動作において移動先をページサムネイル領域に変更する以外は同様な動作となり、既に説明したとおりである。
なお、ステップS36でページサムネイル領域としたのは、各ページサムネイルのコードストリームが隣接している領域内であれば必ずしもページ順に並んでいなくても、本発明の範囲内であることを示している。また、ステップS34において各オブジェクトに対するコードストリームを配置する場合も同様である。
以上の動作により図13で示したオブジェクトに対するコードストリームの移動が終了する。ここに、コードストリーム移動手段の機能が実行されている。
コードストリームの移動が終了すると、図11のステップS4に進み、次のオブジェクト(背景オブジェクト、マスクオブジェクトなど)に移行し、ステップS2に戻る。このようにしてレイアウトオブジェクト内の前景、背景、マスクの組になっていない各オブジェクトに対してステップS3の処理を繰り返すことにより、1つのレイアウトオブジェクトコードストリームに対する移動が完了する(ステップS2のYes)。
1つのレイアウトオブジェクトコードストリームに対する移動が完了すると(ステップS2のYes)、次のレイアウトオブジェクトを指し(ステップS5)、ステップS1に戻る。
つまり、ステップS1〜S5の処理は、全てのレイアウトオブジェクトについてのオブジェクトコードストリームに対する移動が完了するまで(ステップS1のYes)、繰り返される。
文書全体に渡ってレイアウトオブジェクトに対するコードストリームの移動が終了すると(ステップS1のYes)、これらのレイアウトオブジェクトのコードストリームをページ毎に配置する次の段階に入る。
まず、ステップS6では、外部からの要求で実行する(いわゆるサーバ)形態で構成されているかどうかをチェックする。
いわゆる一括処理ユーティリティ、フィルタなどで構成する場合は動作途中にユーザからのインタラクティブな要求はないので(ステップS6のNo)、ステップS7に進み、処理するページの範囲を先頭ページから終了ページにセットする。
一方、外部からの要求で実行するときは(ステップS6のYes)、ステップS8に進み、ページがアクセスされたか否かをチェックする。このときアクセスされる手順が部分符号(ファイルの一部をアクセスする手順)であれば、本発明はさらに効果を増す。一般にファイル全体をアクセスする「FTP:ファイル転送プロトコル」に対して、部分符号をアクセスするプロトコルの一例としては、非特許文献1で示す外部データ参照手順やJPIPプロトコルがある。こうした手順でアクセスされたか否かの判定は、部分符号でアクセスされたか否かを識別する識別手段36により実行される。
なお、JPIPプロトコルではPlace Holder Boxを使用しない限り1回のView Window要求は1ページ内のアクセスに限られるため、同じページ内であってもユーザがパンやズーム操作により新しいView-Window要求があった時にステップS9以降を実行するように構成しても良い。その際は移動の対象となるコードストリームがビューウインドウの内部か外部かのアクセス履歴に従って次回同じページをアクセスするときに、ビューウインドウ内のオブジェクトを高速、省メモリでアクセスできるようにコードストリームを移動することも本発明の範囲内である。
ステップS8では、こうした手順に従ってページがアクセスされていない間は待機状態を保持するが、アクセスされたときはそのページだけを並べ替えの対象範囲とするため、ステップS9において処理するページはアクセスされたページだけになるよう開始ページと終了ページをセットする。
こうして処理するページの範囲がステップS7またはステップS9において設定されるとステップS10以降の手順を実行する。
続くステップS10では、現在処理中のページが指定範囲内のページか否かをチェックする。現在処理中のページが指定範囲内のページの場合には(ステップS10のYes)、ステップS11に進み、該当ページ内にある画像のコードストリームを格納すべき位置を示す。この処理は、位置指示手段33により実行される。
次に、該当ページ内のレイアウトオブジェクトに対するコードストリームの移動の段階に入る。
ステップS12は、現在のページにある全てのレイアウトオブジェクトの移動処理が終了したか否かの判定、すなわち終了条件の判定を行なう工程であり、現在のページにある全てのレイアウトオブジェクトの移動処理が終了していない場合には(ステップS12のNo)、ステップS13に進む。ステップS13は、レイアウトオブジェクトコードストリームを移動する処理を実行する。
ここで、ステップS13の処理動作について詳述する。図16は、レイアウトオブジェクトコードストリームの移動処理の動作イメージを示す模式図、図17は、オブジェクトコードストリーム移動処理の流れを示すフローチャートである。
まず、ステップS13の動作イメージについて説明する。ステップS13を実行した後のメモリマップの一例として、サムネイルとサムネイル以外のレイアウトオブジェクトを分離し、さらにそれぞれがJPIPによりアクセスされたとき、ビューウインドウにそのコードストリームが一部でも含まれるレイアウトオブジェクトと、全く含まれないレイアウトオブジェクトに分類すると、図16に示すような4領域に分類できる。
領域1:サムネイルレイアウトオブジェクトであってビューウインドウに一部でも含まれるレイアウトオブジェクトのコードストリームを格納する領域
領域2:サムネイルレイアウトオブジェクトであってビューウインドウに全く含まれないレイアウトオブジェクトのコードストリームを格納する領域
領域3:サムネイル以外のレイアウトオブジェクトであってビューウインドウに一部でも含まれるレイアウトオブジェクトのコードストリームを格納する領域
領域4:サムネイル以外のレイアウトオブジェクトであってビューウインドウに全く含まれないレイアウトオブジェクトのコードストリームを格納する領域
オブジェクトコードストリーム移動処理は、図17に示すように、まず、コードストリームに対するレイアウトオブジェクトがページサムネイルレイアウトオブジェクトか否かをチェックする(ステップS131)。これは、非特許文献1に示すようにページサムネイルがあるとすればそのPage Boxの中にある最初のLayout Boxがページサムネイルであることが既定されているためであり、任意の位置への移動はできないからである。
ページサムネイルレイアウトオブジェクトでないときは(ステップS131のNo)、ステップS132に進み、ビューウインドウに一部でも含まれるレイアウトオブジェクトのコードストリームか否かをチェックする。ビューウインドウ内のレイアウトオブジェクトのコードストリームであるときは(ステップS132のYes)、ステップS133に進み、そのコードストリームを領域3の位置に移動させオフセット値を修正する。コードストリームの移動やオフセットは、先にオブジェクトに対するコードストリームの移動を解説した部分で既に説明した通りであり、それが1つのオブジェクトに対するコードストリームだけでなく1つのレイアウトオブジェクトに含まれる、前景オブジェクト/背景オブジェクト/マスクオブジェクトのそれぞれのコードストリームに対して一貫して行われる点が異なるだけで基本となる移動+オフセットの操作は同様であるため説明を省略する。
一方、ビューウインドウ外のレイアウトオブジェクトのコードストリームであると判定されたときは(ステップS132のNo)、ステップS134に進み、そのコードストリームを領域4に移動させてオフセット値を修正する。また、領域4の中でも符号長が昇べき順になる位置に移動させることにより、メモリが少なかったとき、あるいは制限されたメモリで読み込みを行う操作においてより多くのレイアウトオブジェクトを読み込めるようにするため、レイアウトオブジェクトのまとまり(前景+背景+マスク)の符号長で昇べきに並べることによりさらに本発明の効果は増す。
ステップS131でページサムネイルレイアウトオブジェクトであると判定されたときには(ステップS131のYes)、さらにページサムネイルだけを1つの領域にまとめる処理をするようになっているか否かをチェックする(ステップS135)。これもオブジェクトをサムネイルでまとめるか否かについて、図13を用いて説明した趣旨と同じである。
まとめないときには(ステップS135のNo)、ページ毎にサムネイルが分散する形態となるため、ステップS136に進み、ページ内の最初のレイアウトオブジェクトとなるよう移動し、オフセット値を修正する。ここで1つのページ内のレイアウトオブジェクトのコードストリーム自身は必ずしもページ内で参照されるコードストリームのうち先頭であるとは限らず、あくまでもページサムネイルのレイアウトオブジェクトヘッダがそのページ内で先頭であれば良いため、ステップS134のときと同様にコードストリーム自身は対応するレイアウトオブジェクトのコードストリームの符号長を全て加えた値で昇べき順で並べるなど2番目以降になっても良い。
また、ステップS135においてまとめるとしたときには(ステップS135のYes)、ステップS137に進み、さらにビューウインドウ内のレイアウトオブジェクトかどうかをチェックする。この趣旨は、ステップS132で区分したのと同様である。ビューウインドウの外であれば(ステップS137のNo)、ステップS138において領域2の位置に移動してオフセット値を修正する。一方、ビューウインドウに一部でも含まれるレイアウトオブジェクトであった場合は(ステップS137のYes)、ステップS139に進み、領域1に移動しオフセット値を修正する。
なお、ビューウインドウとレイアウトオブジェクトの包含関係については上記の説明では一部でもビューウインドウに含まれる場合はビューウインドウ内としたが、完全に含まれる場合だけにするなどその判定の差異はあったとしても、基本的にレイアウトオブジェクトの位置と大きさによってビューウインドウの内か外かを一意的に判定できるバリエーションは全て本発明の範囲内であることはいうまでもない。
JPIPでアクセスされたときにビューウインドウに含まれるレイアウトオブジェクトは、次回アクセスされるときにはさらに少ないメモリ容量でアクセスできるようにビューウインドウ内のレイアウトオブジェクトはメモリ番地の小さいほうに配置する。これは図17において以下のステップで実現している。
1)ステップS132
2)ステップS133
3)ステップS134
そのときの動作イメージは、図16の領域3、領域4である。
また、JPIPで非常に多数のページに渡る文書をサムネイルで表示するときに、ビューウインドウ内に収まったサムネイルは次回アクセスされるときには再び少ないメモリ容量でアクセスできるようにビューウインドウ内のレイアウトオブジェクトはメモリ番地の小さいほうに配置する。これは図17において以下のステップで実現している。
1)ステップS137
2)ステップS138
3)ステップS139
そのときの動作イメージは、図16の領域1、領域2である。
以上の処理により、指定ページ内の各レイアウトオブジェクトのコードストリームの移動処理(ステップS13)は終了する。ここに、レイアウトオブジェクト移動手段の機能が実行されている。
ステップS13が終了すると、ステップS14に進み、次のレイアウトオブジェクトと次のコードストリームの移動位置を示し、ステップS12に戻る。
このようにしてステップS12からステップS14の手順を繰り返し、ステップS12において全てのレイアウトオブジェクトに対するコードストリームの移動処理が終了したと判定されると(ステップS12のYes)、ステップS15進み、次のページを処理対象にセットする。
外部からの要求によりページがアクセスされた場合は(ステップS6のYes)、ステップS9においてその1ページだけが処理対象になっていたが、一括処理(ステップS6のNo)によりステップS7のパスを通ったときは、最終ページまでステップS10からステップS15に示す操作を繰り返す。
こうしてステップS10において指定範囲のページについて移動処理が終了すると(ステップS10のYes)、その結果を保存し、ステップS1において読み込んだファイルと入れ替えることにより処理は終了する。
図18は、符号構造変換前後のバッファ31の様子を示す模式図である。図18に示すように、符号構造変換前においてはオンメモリだけでは全てのコードストリームは読めないが、符号構造変換後においては同じメモリ容量であっても一部のコードストリームが読めるようになっている。
このように本実施の形態によれば、変換前後において互換性は保ったまま符号構造変換が可能となり、少ないメモリ容量あるいは限られたメモリ容量で符号量の少ない一部のコードストリームを解釈することができる。
なお、本発明はこの実施の形態に制限されることなく、前半と後半を通して行なうユーティリティやメンテナンスツール、サーバ内でクライアントからの要求に従って随時符号変換する装置等も本発明の範囲が及ぶことは言うまでもない。
また、本実施の形態においては、構造化文書での動作を具体的に示すため非特許文献1に示すJPMファイルを例として説明したが、例えば、“4.7 External Objects,PDF Reference fourth edition Adobe Portable Document Format Version 1.5, P295-196, Adobe Systems Incorporated”に示すPDFファイルをはじめ他の構造化文書でも、同様な操作が可能な構成要件をもつファイルに対してもすべて本発明の適用範囲であることは言うまでもない。
なお、本実施の形態においては、クライアントからの要求によりサーバ内でインタラクティブに動作する実施例について説明したが、これに限るものではない。例えば、一括処理ユーティリティ、フィルタで本発明を構成する場合には、図11、図17においてサーバがアクセスされる状況になる部分を外せばよい。具体的には以下のステップを外すことにより実現できる。
1)ステップS6
2)ステップS8
3)ステップS9
4)ステップS132
5)ステップS133
6)ステップS137
7)ステップS139