以下図面に従って本発明に係る実施形態を詳細に説明する。なお、以下の実施形態は本発明を限定するものではなく、また、本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。また、同一の構成については、同じ符号を付して説明する。
[第1の実施形態]
図1は、本実施形態における画像処理装置のブロック構成図である。この装置は、たとえばパーソナルコンピュータやワークステーション等であってもよい。本装置は、CPU101、入力部102、蓄積部103、メモリ104、表示部105を有する。CPU101は、装置全体の制御を司るものであり、メモリ104に格納されたプログラムを実行することで本装置を画像処理装置として機能させる。入力部102は、ユーザからの指示や、画像データなどを入力する部分である。これは、キーボードやマウスなどのポインティングシステムを含む。蓄積部103であり、画像データ、プログラムなどを蓄積する部分で、通常はハードディスクなどが用いられる。メモリ104は、ROMやRAMを含み、処理に必要なプログラム、データ、作業領域などをCPU101に提供する。表示部105は、通常は液晶ディスプレイなどが用いられ、画像や各種処理メニュー等の表示を行い、入力部102と共にユーザインターフェースとして機能する。
また、後述するフローチャートの処理に必要な制御プログラムは、蓄積部103に格納されているか、メモリ104のROMに格納されているものとする。蓄積部103に格納されている場合は、一旦メモリ104内のRAMに読み込まれてからCPU101により実行される。なお、システム構成については、上記以外にも様々な構成要素が存在するが、本発明の主眼ではないので、その説明は省略する。
図2(a)は本実施形態における符号化処理に係るブロック構成図である。図示における各要素は、CPU101がメモリ104に格納されたプログラムを実行することで実現されるものである。ただし、図示の幾つかは、ハードウェアで実現させても構わない。なお、符号化対象の画像データは、蓄積部103に既に格納されているものとして説明する。
色成分分解部201は、符号化対象の画像データを入力し、その画像データから各色成分データのプレーンに分解する。実施形態では、入力画像データが1画素当たりR,G、Bの3色成分で構成されるものとする。それ故、色成分分解部201は、R成分のみで構成されるRプレーン、G成分のみで構成されるGプレーン、B成分のみで構成されるBプレーンを生成し、各プレーンを順にDWT部202に供給する。つまり、DWT部202にとっては、色成分分解部201からモノクロ多値画像データを受信することになる。なお、入力画像データが4成分で構成される場合には、色成分分解部201は4つプレーンを生成し、順にDWT部202に供給する。更に、入力画像データがベイヤ配列の画素で構成される場合、色成分分解部201は、Rプレーン、G1プレーン、G2プレーン、Bプレーンを生成し、順にDWT部202に供給する。
DWT部202は、入力したモノクロ多値画像データに対してDWT(Discrete Wavelet Transform)を適用することで複数のサブバンドのDWT係数を生成し、量子化部203に供給する。量子化部203は、DWT部202から供給された複数のサブバンドのDWT係数を量子化し、量子化後のDWT係数を符号化方式判定部204に供給する。
符号化方式判定部204は、着目DWT係数の符号化方式の判定(後述)と選択を行う。本実施形態では、「ゴロム符号化」「0係数のランレングス符号化」のいずれかの符号化方式を選択する。そのため、判定結果によって、量子化後のDWT係数はゴロム符号化部205、ランレングス符号化部206のいずれかに振り分けられる。その後、両者から生成された符号化データを符号生成部207が予め設定されたデータフォーマット順に並べ替え、画像データの符号化データとして出力する。なお、ランレングス符号化で0係数のランを符号化するのは、実施形態における符号化対象がDWT変換係数であり、その多くが“0”になり易いためである。
図2(b)は、同図(a)で生成された符号化画像データファイルの復号処理に係るブロック構成図である。同図の各要素は、CPU101がメモリ104に格納されたプログラムを実行することで実現されるものである。なお、復号対象の画像データファイルは、蓄積部103に既に格納されているものとして説明する。
ヘッダ解析部221は、復号対象の画像データファイルのヘッダを解析し、復号に必要な情報を取得する。符号化方式判定部222は、着目DWT係数が「ゴロム符号化」、「0値の係数のランレングス符号化」のいずれかで符号化されたかを判定し、その判定に応じて、符号化データをゴロム復号部223、ランレングス復号部224のいずれかに振り分けられる。ゴロム復号部223及びランレングス復号部224は、復号して得られた係数を、復号用情報一時保存部225に保存する。逆量子化部226は、復号用情報一時保存部225に格納された係数を逆量子化する。逆DWT部227は、逆量子化後の係数に対して逆DWTを適用することで、色成分データを生成する。色成分合成部228は、各色成分データを合成し、カラー画像を生成し、出力する。
上記構成における実施形態における、1枚の画像データ(1色成分の画像データ)の符号化処理を、図5のフローチャートに従って説明する。なお、符号化に先立ち、ゴロム符号化部205が符号化する際に利用するkパラメータを所定の値で初期化する。この初期値の値は復号側と共通になっていれば良く、その値は特に問わない。
ステップS501にて、色成分分解部201は、入力した符号化対象の画像データから、色成分毎のプレーンデータを取得する。ステップS502にて、DWT部202は、ステップS501で取得したプレーンデータに対してDWTを適用し、DWT係数を得る。本実施形態では、DWTで用いるフィルタとして、JPEG2000で使用されている5−3タップフィルタを用いて、垂直・水平方向それぞれについて2回適用するものとする。したがって、実施形態におけるDWT部202は、入力した画像データから、図4に示すように低周波サブバンドから2LL、2HL、2LH、2HH、1HL、1LH、1HHの7つサブバンドのDWT係数を生成することになる。以降、これらのサブバンドを、上述の順番の0〜6の番号を対応付け、図示のようにSB(0)乃至SB(6)とも表記する。
ステップS503にて、量子化部203はDWT係数を量子化する。ステップS504にて、符号化方式判定部204は、サブバンド番号を表すカウンタiを“0”で初期化する。そして、ステップS505にて、符号化方式判定部204は、サブバンドsb(i)のDWT係数を、ゴロム符号化部205、ランレングス符号化部206を利用して符号化を行う。このステップS505の処理の詳細は後に説明する。
ステップS505においてサブバンドsb(i)の符号化を終えると、ステップS506にて、符号化方式判定部204はサブバンド番号のカウンタiに“1”を加算し、カウンタを進める。そして、ステップS507にて、符号化方式判定部204は、全てのサブバンドの符号化が終了したかどうかを判定する。すなわち、サブバンド番号カウンタiがサブバンドの数(本実施形態では“7”)と等しければ、すべてのサブバンドの符号化が終了したと判定できる。この場合、本処理を終了する。まだ、符号化が終了していないサブバンドが残っていると判定した場合、符号化方式判定部204は処理をステップS505へ処理を戻す。
なお、上記処理を全色成分(全プレーン)について行うことになるが、生成された各色成分の符号化データは1つのファイルとして蓄積部103に格納される。このとき、CPU101は、復号に必要な情報をファイルヘッダに格納する。
次に、上記ステップS505の1つのサブバンドの符号化処理を図6のフローチャートを使って説明する。
サブバンド内の係数の符号化は、基本的にラスタースキャン順に行われる。そのため、ステップS601にて、符号化方式判定部204は、符号化しようとしているサブバンドSB(i)(実施形態ではi=0、1、…6のいずれか)に含まれるDWT係数の総ライン数Hsbを取得する。なお、このHsbは、符号化対象の画像データのサイズ、DWTの適用回数、並びに、着目しているサブバンドがいずれであるのかに応じて一義的に決まるものである。また、サブバンドsb(i)における1ライン分のDWT係数の個数も、これらに基づき一義的に決まる。
ステップS602にて、符号化方式判定部204は、ライン番号用のカウンタLに0を代入し、初期化する。次のステップS603にて、符号化方式判定部204は、サブバンドSB(i)のLライン目のDWT係数を取得する。
以下のステップS604〜S608の処理は、Lライン目のDWT係数の先頭から順に着目係数xとして符号化方式の選択処理と符号化処理となる。
ステップS604には、符号化方式判定部204は、着目係数xをランレングス符号化するかどうかを判定する。この判定は特に限定はないが、例えば、着目係数xの周囲の既に符号化が完了している係数の値に基づいて判定する。具体的には、図3に示すように、着目係数xの周囲係数a、b、c、dを参照係数とし、すべての参照係数a乃至dが0であれば、着目係数xからランレングス符号化を開始すると判定する。なお、着目係数xが、サブバンドの最初のライン上に位置する場合やラインの先頭や終端に位置する場合、周囲係数のいくつかが存在しない場合がある。このような場合、その係数の値を“0”と仮定するものとする。
さて、着目係数xについてランレングス符号化を行うと判定した場合(a=b=c=d=0の場合)、符号化方式判定部204は処理をステップS605へ処理を進める。そうでなければ、ステップS606へ処理を進める。
ステップS605にて、ランレングス符号化部206は、着目係数xが“0”であれば、xに後続する係数の値が“0”である限り値“0”のラン長を算出(カウント)し、ランレングス符号化する。そして、着目係数xが直前の係数と異なった場合、ランレングス符号化部206はラン終端となったと判定し、それまで算出した計数値の符号化データを生成する。そして、ランレングス符号化部206は、ラン終端となった係数をゴロム符号化するため、処理をステップS606に進める。また、ステップS605に最初に移った場合、着目係数xが0でない場合も起こり得る。この場合、ラン長が0の符号語を出力し、着目係数xをラン終端としてステップS606へ処理を進める。
ステップS606にて、ゴロム符号化部205はDWT係数単位に符号化を行う。具体的には、ゴロム符号化部205、ステップS604から処理が入ってきたDWT係数、またはステップS605でラン終端となったDWT係数を、着目係数x用に更新されたkパラメータを用いてゴロム符号化する。ステップS607にて、ゴロム符号化部205は、ゴロム符号化で使用するkパラメータを、着目係数xが位置するラインの上ラインのkパラメータを参照しながら更新する。すなわち、着目係数xのkパラメータを更新する際に、周囲係数b、dに位置するラインのkパラメータを参照して、着目係数xの次に符号化する係数に対するkパラメータを決定する。
次にステップS608にて、符号化方式判定部222は、Lライン目のDWT係数の全ての符号化を終えたか否かを判定する。符号化を終えていると判断すれば、ステップS609へ進み、そうでなければ、処理をステップS604へ戻す。
ステップS609では、符号化方式判定部222は、DWT係数ライン用カウンタLに“1”を加算し更新する。ステップS609にて、符号化方式判定部222は、カウンタLとステップS601で取得した、係数ライン数Hsbを比較する。L=Hsbであれば、着目サブバンドsb(i)のすべてのDWT係数の符号化が終えたことになるので、このフローを終了する。そうでなければ、符号化方式判定部222は、ステップS603へ処理を戻し、まだ符号化されていないDWT係数ラインを符号化する。
以上説明したように、本実施形態の符号化においては、符号化モードの判定時およびサブバンドのkパラメータ更新時に、着目係数xが存在するラインの1つ前のライン上に位置する係数値およびkパラメータを使用する。
次に、上述した符号化処理で得た符号化データを、2スレッドにて効率よく復号するための支援情報を生成・保存する方法について説明する。なお、実施形態では、この支援情報を、符号化データに付加するので、以降では付加情報と呼ぶ。ここで、2つのスレッドに係る処理の負担に偏りが発生しないようにすることが望ましい。それ故、画像の高さを2分割し、上半分を一方のスレッドで復号し、下半分をもう一方のスレッドで復号するようにする。ここで理解を容易にするため、符号化対象の画像データのサイズは水平方向3840画素×垂直方向2160画素とする。従って、実施形態では、画像データを、3840×1080画素に2分割するものとし、指定された画素位置からデコードするための付加情報を保存する処理について説明する。
図7は本実施形態の付加情報の保存処理のフローチャートである。なお、本処理も、CPU101がメモリ104に格納されたプログラムを実行することで実現されるものである。
ステップS701にて、CPU101は画像全面を復号する。詳細は後述から明らかになるが、実施形態では、部分復号を可能とするための付加情報の符号化画像データファイルの後端に付加する。つまり付加情報を追加することでファイルのサイズが大きくなる。そのため、付加情報の開始位置を示す特定する情報をファイルヘッダに格納する。単純には、付加情報を付加する以前のファイルサイズをファイルヘッダに格納すればよいであろう。なお画像全面の復号処理については後にフローチャートを使って詳しく説明する。
ステップS702にて、CPU101はステップS701で復号した画像全体を表示部105に表示する。ステップS703にて、CPU101は、部分復号のための付加情報を保存する必要があるかを判断する。本実施形態では、ステップS702で表示された画像に対して、ユーザが入力部102(マウス等)を使って高速復号するための符号化データの生成の指定を入力した場合、CPU101は部分復号用の付加情報を保存すると判断する。付加情報を保存すると判断された場合はステップS704へ進む。そうでなければ、このフローを終了する。
ステップS704にて、CPU101は、部分復号する領域の先頭ライン位置を取得する。本実施形態では、2分割するため、部分復号の先頭ライン位置として画像下半分の先頭ライン1081が取得されたものとする。もし、3分割や4分割など3以上に分割する場合には、(分割数−1)個の値が部分復号する領域の先頭ライン位置として取得される。ステップS705では、付加情報を保存するサブバンド番号を取得する。本実施形態では、2LL以外のサブバンドsb(1)〜sb(6)を付加情報保存サブバンドとしてあらかじめ決められているものとする。次に、ステップS706では、ステップS705で取得したサブバンド番号のサブバンドに対する付加情報を出力し、このフローを終了する。
次に、ステップS701の画像全面の復号処理を、図8のフローチャートを用いて説明する。
ステップS801にて、CPU101は、色成分番号のカウンタCに“0”を代入し、初期化する。なお、実施形態では、画像データはR,G,Bの3成分を有するものとしている。そこで、例えばカウンタC=0はR成分を、C=1はG成分を、C=2はB成分をそれぞれ表すものとする。
ステップS802にて、CPU101は、サブバンド番号用のカウンタiに“0”を代入する。ステップS803にて、CPU101は、カウンタCで示される色成分のサブバンドsb(i)のDWT係数の幅(水平方向の係数の数)Wsbとライン数(垂直方向の係数の数)Hsbを取得する。ステップS804にて、CPU101は、色成分C、サブバンドsb(i)のライン番号用カウンタL(C,i)に“0”を代入し初期化する。
ステップS805にて、CPU101は、ラインL(C,i)の符号データ先頭までのオフセット値をメモリ104に予め確保された一時記憶領域に保存する。ステップS806にて、CPU101は、L(C,i)ラインのDWT係数を復号し、係数情報を生成する。この復号処理は符号化の逆の処理になる。それ故、CPU101は、L(C,sb)−1のDWT係数を参照して、“0”係数のランレングス復号か、ゴロム復号かを判定する。判定結果をもとにDWT係数を復号し、符号化と同じようにkパラメータを更新する。CPU101は、このような復号処理を1ライン分のDWT係数が得られるまで繰り返しながら、その情報を一時保存領域に保存する。この処理については図9のフローチャートを用いて後に詳しく説明する。
このステップS807にて、CPU101は、ステップS806でデコードされたDWT係数を逆量子化する。ステップS808にて、CPU101は、ライン番号用カウンタL(C,i)に“1”を加算し更新する。ステップS809にて、CPU101は、ステップS808で更新されたライン番号用カウンタL(C,i)と、ステップS803で取得したDWT係数ライン数Hsbを比較する。両者が等しければ、CPU101は、このサブバンドのすべてのDWT係数は復号できたものと判定し、処理をステップS810へ進む。そうでなければ、CPU101は、処理をステップS805へ戻し、残りのDWT係数を復号する。
ステップS810にて、CPU101は、サブバンド番号用カウンタiに“1”を加算し更新する。ステップS811ではすべてのサブバンドのデータが終了したかどうかを判定する。すなわち本実施形態の場合、カウンタiがサブバンド数“7”と等しければ、全サブバンドの復号が終了したものと判定する。終了と判定場合には、CPU101は処理をステップS812へ進め、そうでなければ処理をステップS803に戻し、残りのサブバンドの復号処理を行う。
ステップS812にて、CPU101は逆量子化後のDWT係数に対して逆DWTを実施する。ステップS813にて、CPU101は、色成分用のカウンタCに“1”を加算し更新する。ステップS814にて、CPU101は、すべての色成分の復号が終了したかどうかを判定する。すなわち、カウンタCが色成分数と同一であれば、CPU101はすべての復号が終了したものとし、ステップS815へ進む。そうでなければ、処理をステップS802へ戻す。ステップS815にて、CPU101は、デコードされたすべての色成分を合成し、表示可能な形式に変換し、本フローを終了する。
次に、ステップS807のDWT係数1ライン分の復号および係数情報の生成処理について、図9のフローチャートを用いて説明する。ステップS901にて、CPU101は、係数の位置を特定するがための係数カウンタXsbを0で初期化する。ステップS902では、ランレングス復号、ゴロム復号の判定に必要な参照係数の値を取得する。本実施形態の場合、図3に示す係数xの復号時には、既にデコードが終了している周囲係数a、b、c、dを参照する。そのため、CPU101は、周囲係数a、b、c、dの値を参照係数値として取得することになる。また、係数xがサブバンドの上端または左右端に位置する場合は、参照係数が存在しないが、その場合は存在しない係数を0と仮定する。
ステップS903にて、CPU101は、ステップS902で取得した参照係数の値から、デコード対象の着目係数(ライン先頭からXsb番目の係数)がランレングス符号化されているかを判断する。本実施形態の場合、符号化時と同様、着目係数の周囲a,b,c,dの関係が「a=b=c=d=0」であれば、着目係数はランレングス符号化されていると判定する。そうでなければ、ランレングス符号化されていないと判定する。ランレングス符号化と判定された場合は、CPU101は処理をステップS904へ進め、そうでなければ、処理をステップS907へ進める。
ステップS904にて、CPU101は、符号化データを復号し、ラン長RLを取得する。そして、CPU101は、DWT係数としてRL個の“0”を出力する。本実施形態におけるランレングス符号化部206は、着目DWT係数が0の場合のラン長を符号化しているためである。ステップS905にて、CPU101は、係数情報として、RLビットの“0”をメモリ104の一次保存用領域に保存する。次に、ステップS914にて、“0”として復号されたRL個のDWT係数に対応するkパラメータとして、直前のkパラメータをRL個保存する。そして、ステップS906にて、CPU101は、係数カウンタXsbにラン長RLを加算し更新する。次の復号対象の係数の位置をラン長分RLだけ進めるためである。次に、ステップS911にて、CPU101は、係数カウンタXsbとステップS803で取得したサブバンドの幅Wsbを比較する。XsbとWsbが同じであれば、CPU101は、本係数ラインのすべてのDWT係数の復号が終了したと判断し、このフローを終了する。そうでなければ、CPU101は処理をステップS907へ進める。
ステップS907にて、CPU101は、着目係数がゴロム符号で符号化されていると見なし、着目係数用に更新されたkパラメータに基づいてゴロム復号し、1つのDWT係数を出力する。そして、ゴロム符号化で利用するkパラメータを更新し、メモリ104の一次保存用領域に保存する。kパラメータの更新は符号化時と同様に、周囲係数b、dに位置するラインのkパラメータを参照する。ステップS912では、ステップS907で復号したDWT係数値が“0”であったかどうかを判定する。“0”ではなかったら、ステップS908へ進み、“0”であったら、ステップS913へ進む。ステップS908では、復号したDWT係数の情報として、1ビットの“1”をメモリ領域に保存する。ステップS913では、復号したDWT係数の情報として、1ビットの“0”をメモリ領域に保存する。すなわち、一次保存用領域には、DWT係数それぞれが0か非0かを表すビット列が生成され、そのバイト数は(Wsb+7)/8の商である。ステップS909にて、CPU101は係数カウンタXsbに1を加算し更新する。ステップS910にて、CPU101は、係数カウンタXsbとステップS803で取得したサブバンドの幅Wsbを比較する。XsbとWsbが同じであれば、CPU101は、本係数ラインのすべてのDWT係数の復号が終了したと判断し、このフローを終了する。そうでなければ、CPU101は処理をステップS902へ戻し、次のDWT係数を復号処理と、係数情報およびkパラメータの保存処理を行う。
以上説明したような処理により、図10に示すような係数情報が、メモリ104の一次保存用領域に保存されることになる。すなわち、各色成分の、各サブバンドに対して、DWT係数1ライン毎に、その符号データまでのオフセット値、各DWT係数を復号する際に利用するkパラメータの値、各DWT係数の0/非0情報のビット列が保存される。
図10のような係数情報を参照すると、符号化データ中の、或る1つの色成分に着目したとき、その色成分の任意のサブバンドで任意のラインの係数データ(量子化後のDWT係数データ)の符号化データの位置を特定できる。しかも、そのラインにおけるゴロム符号化された位置とランレングス符号化された位置が判明し、ゴロム符号化された係数については利用したkパラメータの推移を、1つ前のラインの情報を参照することで取得できる。よって、任意のサブバンドの任意のラインを、他のラインとは独立して復号できることになる。
次に、ステップS706の付加情報の出力処理を、図11のフローチャートを使って説明する。
ステップS1101にて、CPU101は、部分復号画素位置を保存する。本実施形態の場合、「1081」となる。ステップS1102にて、CPU101は、色成分のカウンタCを“0”で初期化する。ステップS1103にて、CPU101は、サブバンド番号用のカウンタiを“0”で初期化する。ステップS1104では、サブバンドsb(i)が付加情報保存対象かどうかを判定する。すなわち、サブバンドsb(i)がステップS705で取得した番号であるかどうかを判定する。CPU101は、S705で取得した番号であると判定した場合、処理をステップS1105へ進め、そうでなければ処理をステップS1108へ進める。なお、実施形態では、付加情報は、サブバンドsb(0)を除く、sb(1)〜sb(6)に対して付加するものとしている。
ステップS1105にて、CPU101は、サブバンドsb(i)のデコードに必要なDWT係数ラインの先頭番号Mを算出する。このMは、ステップS1101で取得した復号を開始する画素位置および、DWTフィルタのタップ数、DWTフィルタの適用回数によって異なる。本実施形態の場合、必要となるDWT係数の範囲を図12A乃至12Dの太枠で示す。したがって、本実施形態の場合、部分復号画素位置を4で割った時の商をNと表すと、各サブバンドにおいて、表1に示す値が取得される。
本実施形態では開始画素位置が1081=270×4+1であるため、サブバンドsb(0)〜sb(6)のそれぞれに対して、270、270、269、269、540、539,539の値が取得できる。
次に、ステップS1106にて、CPU101は、色成分Cと、サブバンドsb(i)のDWT係数ラインMの符号化データまでのオフセット値をファイルの終端に出力する。ステップS1107にて、CPU101は、色成分C、サブバンドsb(i)のライン(M−1)のDWT係数に関する0/非0情報とkパラメータをファイルの終端に出力する。ステップS1108ではサブバンド番号iに“1”を加算する。ステップS1107、S1108で出力した情報を復号時に参照することで、該当位置から復号できる。ステップS1109にて、CPU101は、サブバンド番号iとサブバンド数を比較し、すべてのサブバンドに関して付加情報の出力処理を終えたかどうかを判断する。すべてのサブバンドの処理が終わっている場合、CPU101は処理をステップS1110へ進め、そうでなければ、ステップS1106へ処理を戻す。
ステップS1110にて、CPU101は、色成分のカウンタCに“1”を加算する。ステップS1111にて、CPU101は、カウンタCと色成分数を比較する。Cが色成分数に達していれば、すべての色成分に関する情報を保存したことになる。それ故、CPU101は、このフローを終了する。また、カウンタCが色成分数と異なる場合、CPU101は、処理をステップS1103へ戻し、未処理の色成分に係る処理を行う。
次に、図11に示すフローに従って付加情報が付与された符号化データから部分復号する処理手順を図13のフローを参照して説明する。なお、部分復号処理は図8のフローを使って説明した画像全面の復号処理と共通する部分が多い。そこで、図13においても、図8と同じ処理をするステップについては、図8と同じ番号を付与し、詳しい説明については割愛する。
ステップS1301にて、CPU101は、表示範囲を取得する。本実施形態では、3840x2160の画像を画像の高さ方向に2分割して復号する。したがって、先頭ラインから1080ラインまでの第1の領域と、1081ライン目から終端ライン(2160ライン)までの第2の領域のいずれかが復号範囲として取得される。以下は、上記の第1、第2の領域のいずれかの復号処理となる。
ステップS1302にて、CPU101は、ファイルヘッダを解析し、色空間名、色成分数、DWTの適用回数や利用したフィルタサイズといった情報を取得する。本実施形態の場合、5−3タップフィルタを垂直・水平方向に2回ずつ適用している。ステップS1303にて、CPU101は、ステップS1301で取得した復号範囲を生成するに当たり、各サブバンドの復号開始位置Psb()、終了位置Qsb()を取得する。実施形態では、DWTを水平、垂直とも2回ずつ実行する例を示しているので、サブバンドの個数は7である。それ故、CPU101は、サブバンドsb(0)の復号開始位置Psb(0)および終了位置Qsb(0)、サブバンドsb(1)の復号開始位置Psb(1)及び終了位置Qsb(1)、…、サブバンドsb(6)の復号開始位置Psb(6)及び終了位置Qsb(6)を取得する。ここで、復号開始位置Psb()とは、ステップS1105で取得したMと同じ値である。したがって、本実施形態の場合、第1の領域の場合はすべてサブバンドに対して、Psb(i)=0(ただし、i=0〜6)となる。また、第2の領域の場合はPsb(0)〜P(6)のそれぞれは、270、270、269、269、540、539,539の各値が取得される。終了位置Qsb()は、開始位置と同様に、表示範囲の終端画素位置およびフィルタタップ数、DWT適用回数によって一意に決めることができる。本実施形態の場合、終端画素位置を4で割った時の商をNと表すと、各サブバンドにおいて、表2に示す値が取得される。
本実施形態の場合、第1の領域の表示範囲の終端は1080=270×4+0であるため、Qsb(0)〜Qsb(6)のそれぞれに対して、270、270、270、270、540、540、540の値が取得される。一方、第2の領域の表示範囲の終端は画像終端であるため、サブバンドの高さと同一の値が取得される。
次に、ステップS801にて、CPU101は、色成分番号用のカウンタCに“0”を代入し、初期化する。ステップS802にて、CPU101は、サブバンド番号の変数iに“0”を代入し初期化する。ステップS1304にて、CPU101は、サブバンドsb(i)に対して、復号範囲に関する付加情報が保存されているかどうかを判断する。付加情報があると判断した場合、CPU101は処理をステップS1305へ進める。また、否の場合、CPU101は処理をステップS1307へ進める。本実施形態の場合、サブバンド番号iが1以上の場合には付加情報が保存されているため、ステップS1305へ進む。
ステップS1305にて、CPU101は、色成分Cのサブバンドsb(i)に対応する付加情報を取得する。すなわち、Psb(i)の符号化データへのオフセット、Psb(i)−1ライン目の各DWT係数の0/非0情報のビット列および、kパラメータが取得される。ステップS1306にて、CPU101は、ステップS1305にて取得した符号データのオフセット位置に読み出し開始位置を移動する。
一方、本実施形態の場合、サブバンドsb(0)の場合には付加情報が保存されていないため、処理はステップS1307へ進む。ステップS1307にて、CPU101は、サブバンドSbの復号開始位置Psb(i)の1つ前のライン上まで復号する。
ステップS1308にて、CPU101は、ステップS1305で取得したPsb(i)−1ライン目の各DWT係数の0/非0情報のビット列および、kパラメータの値を、デコード時に参照する上ライン情報としてセットし、処理をステップS1309へ進める。或いは、CPU101は、ステップS1307での復号処理の過程で取得したQsb(i)−1ライン目の各DWT係数情報およびkパラメータの値をデコード時に参照する上ライン情報としてセットする。
ステップS1309にて、CPU101は、色成分C、サブバンド番号iのライン番号のカウンタL(C,i)をPsb(i)で初期化する。ステップS1310にて、CPU101は、DWT係数のL(C,i)を復号する。次に、ステップS807にて、CPU101は、ステップS1310で復号したDWT係数ラインの逆量子化を行う。そして、ステップS808には、CPU101は、ライン番号のカウンタL(C,sb)に“1”を加算する。ステップS1311にて、CPU101は、ラインカウンタL(C,i)と復号終了位置Qsb(i)とを比較する。両者が同じ値であれば、CPU101は復号終了位置まで復号したと判断し、処理をステップS810へ進む。そうでなければ、CPU101は、処理をステップS1310へ戻す。ステップS810〜ステップS815は既に説明した処理と同一であるので、ここでの説明は割愛する。
以上説明したように、一旦、付加情報の生成をすれば、任意の位置から容易に部分復号できることになる。さらに、復号画素位置、フィルタタップ数およびフィルタ適用回数を参照し、各サブバンドのDWT係数に対して復号開始位置を算出するため、画像全面を復号した後に切り抜いた結果と完全に一致させることができる。
なお、本実施形態では、付加情報はファイルの最後に付与したが、これに限るものではない。たとえば、ヘッダの中にユーザが自由に使用できる領域があれば、その領域に出力してもよい。あるいは、付加情報を別ファイルとして保存してもよい。
[第1の実施形態の変形例]
上記第1の実施形態では、符号化方式に応じて付加情報を保存するサブバンドを選択していた。本変形例では、サブバンドのDWT係数の数から付加情報を保存するサブバンドを選択する方法について述べる。
第1の実施形態と本変形例との差異は、付加情報の保存のフローチャートである。本変形例の付加情報の保存のフローチャートを図14に示す。図14の処理ステップのうち、第1の実施形態と同様の処理ステップに関しては、図7と同じ番号を付与し、ここでの説明は割愛する。
ステップS701〜ステップS704は第1の実施形態と同様の動作である。ステップS1401にて、CPU101は、DWT係数の数が、画素数の1/4より大きいサブバンド番号を、付加情報を付与するサブバンドの番号として取得する。本実施形態では、高周波サブバンドのうち、サイズが小さいサブバンド2HL、2LH,2HHを除いた、サブバンド番号4〜6の3サブバンド{1HL、1LH、1HH}となる。したがって、S706にて、CPU101は、サブバンド番号4〜6の付加情報を出力する。ステップS706に関しては第1の実施形態と同様の処理である。
本変形例の付加情報保存方法を用いると、DWT係数の数が多いサブバンドに対してのみ付加情報を付与することができる。そのため、付加情報の量を第1の実施形態よりも更に小さくすることができる。また、サブバンドの復号処理に要する時間はDWT係数の数に依存するため、復号処理にかかる時間が大きいサブバンドのみ付加情報を付与しているとも言える。
[第2の実施形態]
第1の実施形態では、サブバンドによって付加情報を付与するかどうかを決定する方法について説明した。本第2の実施形態においては、符号量が大きい色成分にのみ付加情報を付与する例について説明する。
本第2の実施形態が第1の実施形態と異なるのは、付加情報の保存処理である。本第2の実施形態の付加情報の保存処理について図15を用いて説明する。図15において、第1の実施形態の図7のフローチャートと同様の動作ステップには、図7と同じ番号を付与し、ここでの説明は割愛する。
ステップS701にて、CPU101は、第1の実施形態と同様に画像全面の復号を行う。ステップS1501において、CPU101は各色成分の符号量を取得する。各色成分の符号量は符号データのヘッダ部分に記載されている場合は、ヘッダから読み込むことで取得できる。ヘッダ部分に記載がない場合は、ステップS701において、各色成分を復号した際に取得すればよい。符号量の取得方法に関しては本件の主眼ではないので、説明を割愛する。ステップS702〜S705では、CPU101は、第1の実施形態と同様の処理を行う。
ステップS1502にて、CPU101は、符号量が最大の色成分番号を取得する。次に、ステップS1503にて、CPU101はステップS1502で取得した色成分番号に関して、ステップS705で取得したサブバンド番号に対して、付加情報を出力し、このフローを終了する。
次に、ステップS1503の付加情報の出力処理フローについて、図16を用いて説明する。図16のうち、第1の実施形態と同じ処理ステップについては、図11と同じ番号を付与し、詳しい説明は割愛する。
ステップS1101にて、CPU101は、部分復号画素位置を保存する。ステップS1102にて、CPU101は、色成分のカウンタCに“0”を代入し初期化する。ステップS1601にて、CPU101は、色成分Cが付加情報の保存対象の色成分かどうかを判定する。本実施形態のCPU101は、ステップS1502で取得した色成分番号と一致すれば付加情報保存対象と判定し、処理をステップS1103へ進む。不一致の場合、CPU101は処理をステップS1110へ処理を進める。
ステップS1103〜ステップS1109は第1の実施形態と同様の処理である。すなわち、付加情報保存対象である色成分Cの中の、付加情報保存対象となっているサブバンドに関して、付加情報を出力する。次に、ステップS1110にて、CPU101は、カウンタCに“1”を加算し更新する。ステップS1111にて、CPU101は、カウンタCと色成分数を比較する。カウンタCが色成分数と同一であれば、すべての色成分についての付加情報出力が終了したものとし、このフローを終了する。そうでなければ、ステップS1601へ処理を戻す。
以上説明した処理制御を行うことで、符号量が大きい色成分のみに付加情報を付与することになる。符号量が大きい場合は、一般に復号処理も時間がかかる。復号結果を表示前に色成分合成をする必要がある。そのため、特に色成分毎にスレッドを立てて復号する場合などには、本実施形態のように符号量が大きい色成分の復号時間を短縮することが、スレッド分割を使った高速復号・表示の際には有効である。さらに、サブサンプリングなどにより色成分毎に画像サイズが異なる場合には、本実施形態の方法は特に有効である。
また、本第2の実施形態では第1の実施形態と同様に、あらかじめ決められたサブバンドに対して付加情報を保存していたが、第1の実施形態の変形例のように、サブバンドのDWT係数の数で決めてもよい。
上記実施形態では、2スレッド復号について説明したが、スレッド数Tに適用する場合には、画像の高さHをT等分し、先頭のラインを除く、H/Tライン間隔(i=1、2、…)で復号開始位置とする付加情報を生成すればよい。
[第2の実施形態の変形例]
第2の実施形態では、1画像(フレーム)内の色成分毎に符号量を取得し、符号量の多い色成分について付加情報を付与した。しかし、1画像の符号量に応じて、閾値を超えた場合に、付加情報を付与すると判断してもよい。たとえば、連続静止画による動画、すなわち、時間相関を符号化時に利用しない動画の場合、通常はフレーム毎の符号量に大きな差はない。しかし、シーンチェンジなどにより前フレームとコンテンツの内容が大きく異なると、符号量が大きく変わる場合がある。動画の場合には、フレームレートを一定にして復号できなければ、再生が滞る。そのような場合には、各(画像)フレームにおいて、符号量の増減を計測し、シーンチェンジなどの符号量が大きいフレームに対しては付加情報を付与する方法が有効である。付加情報の出力基準は、第2の実施形態のように色成分毎に決定してもよいし、第1の実施形態のようにすべての色成分に対してサブバンド毎に決定してもよい。
[第3の実施形態]
上記第1、第2の実施形態では、画像の高さを2分割し、分割された各領域にスレッドを割り当て、スレッド毎に分割して復号する例で説明した。このような場合には、通常であれば、画像のほぼ真ん中の位置から部分復号することになる。しかし、各フレームに施した画像処理の結果を確認するために、該当箇所を等倍表示で繰り返し再生し、確認するような場合には、部分復号の開始位置は必ずしも画像の真ん中ではない。画像の上部の方だけを部分デコードするのであれば、画像の上端から復号し、必要な部分を表示してもよい。そこで、本第3の実施形態では、部分復号の開始位置によって付加情報を出力するかどうかを決定する方法について説明する。
本第3の実施形態が第1の実施形態と異なるのは、付加情報の出力処理の部分である。本第3の実施形態の付加情報の出力処理について、図17を用いて説明する。なお、図17のフローチャートの中で、第1の実施形態と同じ動作をするステップに対しては図11と同じ番号を付与し、詳細な説明は割愛する。
ステップS1101にて、CPU101は、第1の実施形態と同様に部分復号画素位置を保存する。ステップS1701にて、CPU101は、ステップS1101で取得した部分復号開始位置から、垂直方向画素の位置を復号開始ラインとして取得し、あらかじめ決められた閾値Thと比較する。本実施形態では、閾値Thとして画像の高さ(垂直方向の画素数)の1/4を設定する。したがって、画像の高さが2160であれば、Th=2160/4=540となる。CPU101は、復号開始ラインが閾値Th以下の場合、付加情報を付与する必要はないと判断し、このフローを終了する。一方、復号開始ラインが閾値Thよりも大きい場合、CPU101は付加情報を付与すべきと判断し、処理をステップS1102に進める。ステップS1102以降は第1の実施形態と同様の動作であるので、ここでの説明は割愛する。
本第3の実施形態の付加情報出力判断によれば、部分復号開始位置が閾値Thよりも下方にあるときのみ、付加情報を付与することになる。閾値Thを変更することで、付加情報によりファイルサイズを大きくするのに見合うだけの高速化の効果を得られるときのみ、付加情報を付与することができる。
[第3の実施形態の変形例]
上記第3の実施形態では、復号開始位置である画素位置によって付加情報の付与を決定しているが、復号開始位置に必要な、各サブバンドにおけるDWT係数の復号開始位置によってきめてもよい。たとえば、DWT係数の復号開始位置が135ライン目以降であれば付加情報を付与し、そうでなければ付与しないというような判断である。この場合、復号開始画素位置が540(=4×135)画素だとすると、表1よりサブバンド0〜6のデコード開始DWT係数ラインは135、134、135、134、269、270、269となる。したがって、サブバンド0、2、4〜6については付加情報を付与することになる。
[他の実施形態]
画像をタイルなどの矩形やストライプのような短冊領域に分割し、分割領域毎に符号データが独立している場合でも、第1〜第3の実施形態で説明した付加情報の生成および出力を適用できる。その場合は、符号データが独立している分割領域を第1〜第3の実施形態の1画像として考えることで、容易に付加情報を付ける/つけないなどの判断をすればよい。すなわち、部分復号の画素位置が、独立した符号データの先頭位置と一致していれば、付加情報を付与する必要はない。
また、本実施形態では、すべてのサブバンドを同じ符号化方式で符号化していたが、これに限るものではない。たとえば、低周波サブバンドは、JPEG LSのように、ランレングスと、予測符号化とを組み合わせる方法でも構わない。JPEG LSの場合は、参照係数a,b,c,dを使って、隣り合う2近傍係数の3差分値で符号化方式の判定を行うため、上ラインの係数値のそのものを持つ必要がある。このような場合は、付加情報の情報量が大きくなる可能性があるため、サブバンド毎の符号化方式によって付加情報を保存する/しないを決定しても構わない。
また、本実施形態では、DWT係数値毎に符号化を行う例を示したが、これに限るものではない。たとえば、複数のDWT係数をビットプレーンに分割し、ビットプレーンに対して、他のDWT係数のビットプレーンを参照して符号化を行う場合にも適用可能である。その場合には、デコードを開始するDWT係数について、参照する必要があるDWT係数のビットプレーン情報を付加情報として保持すればよい。
また、本実施形態では、DWT係数の0/非0情報を0,1のビット列でそのまま出力したが、この0,1のビット列をランレングス符号化により更に圧縮符号化して保存してもよい。ランレングス符号化で圧縮することにより付加情報のデータ量を小さくできる。さらに、本実施形態のように、DWT係数の符号化時にランレングス符号化を用いていれば、付加情報の取得のために新たにランレングス符号を復号する機構を追加する必要もない。
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。