実施の形態1.
<装置全体の概要>
図1は、本発明の実施の形態1に係る、JPEG2000方式に基づいた画像符号化装置1の構成を示す機能ブロック図である。図1に示すように、画像符号化装置1は、DCレベルシフト部10、色空間変換部11、タイリング部12、DWT部13、量子化部14、ROI部17、方向変換部24、係数ビットモデリング部20、算術符号化部21、符号量制御部22、及びビットストリーム生成部23を備えて構成されている。
なお、画像符号化装置1を構成するこれら各処理部10〜14,17,20〜23の全部又は一部は、ハードウェアとして構成されていてもよいし、又はマイクロプロセッサを機能させるプログラムとして構成されていてもよい。
DCレベルシフト部10は、外部から画像符号化装置1に入力された画像信号(図1における入力画像)に対して、必要に応じてDCレベル変換処理を行う。
色空間変換部11は、DCレベルシフト部10から入力された画像信号に対して、所定の色空間変換処理を行う。JPEG2000方式によれば、色空間変換処理として、可逆変換用のRCT(Reversible Component Transformation)と、非可逆変換用のICT(Irreversible Component Transformation)とが用意されており、いずれか一方を適宜選択できる。これにより、例えば、色空間変換部11に入力されたRGB信号がYCbCr信号又はYUV信号に変換される。
タイリング部12は、色空間変換部11から入力された画像信号を、タイリング処理によって、「タイル」と称される矩形状の複数の小領域に分割する。なお、かかるタイリング処理は必ずしも必要ではなく、1フレーム分の画像信号をそのまま次段の機能ブロックに出力してもよい。本発明では、タイル歪みの発生を回避又は抑制すべく、1フレーム分の画像信号を1タイルとして処理する場合や、個々のサイズが比較的大きな少数のタイルに分割する処理を想定している。但し、本発明は通常のタイリング処理が行われる装置にも適用可能である。
DWT部13は、タイリング部12から入力された画像信号に対してタイル単位で整数型又は実数型のDWTを施し、その結果得られる変換係数を出力する。DWTでは、2次元画像信号を高域成分(高周波数成分)と低域成分(低周波数成分)とに分割するための1次元フィルタが、垂直及び水平の各方向に関して適用される。具体的には、実数型DWTであれば、9×7タップ、5×3タップ、又は7×5タイプ等のフィルタが使用され、整数型DWTであれば、5×3タップ又は13×7タップ等のフィルタが使用される。また、これらフィルタの処理を畳み込み演算で実行してもよいし、あるいは、畳み込み演算よりも効率的なリフティング構成(Lifting scheme)で実行してもよい。
JPEG2000方式では、垂直及び水平の双方向に関して低域側に分割された帯域成分のみを再帰的に帯域分割していく、いわゆるオクターブ分割方式が採用されている。また、その再帰的に帯域分割を行った回数は、分解レベル(decomposition level)と称される。
図2は、オクターブ分割方式に従って分解レベル「3」のDWTが施された2次元画像120を示す模式図である。分解レベル「1」では、2次元画像120は、垂直方向と水平方向とに上述の1次元フィルタを順次適用することで、HH1,HL1,LH1,及びLL1(図示せず)の4つの帯域成分(サブバンド)に分割される。ここで、「H」は高域成分を、「L」は低域成分をそれぞれ示している。例えば「HL1」は、分解レベル「1」における水平方向の高域成分Hと垂直方向の低域成分Lとから成る帯域成分である。その表記法を一般化すると、「XYn」(X,YはH,Lのいずれか。nは自然数)は、分解レベルnにおける水平方向の帯域成分Xと垂直方向の帯域成分Yとから成る帯域成分を意味する。
分解レベル「2」では、低域成分LL1が、HH2,HL2,LH2,及びLL2(図示せず)に帯域分割される。さらに、分解レベル「3」では、低域成分LL2が、HH3,HL3,LH3,及びLL3に帯域分割される。このようにして生成された帯域成分HH1〜LL3を配列したものが、図2である。図2では分解レベルが「3」のDWTが施された例が示されているが、JPEG2000方式では、一般に、分解レベルが「3」〜「8」程度のDWTが採用される。
量子化部14は、DWT部13から入力された変換係数を、量子化パラメータに従ってスカラー量子化することにより、スカラー量子化後の変換係数QDを出力する。また、量子化部14は、ROI部17によって設定された関心領域の画質を優先させるよう、所定のビットシフト処理を行う機能も有している。
方向変換部24は、量子化部14から入力された変換係数QDを、32×32又は64×64程度のコードブロックに分割する。また、方向変換部24には、例えばユーザによって指定された回転角や反転方向に関する情報を含む回転反転制御情報SSが、外部から入力されている。方向変換部24は、回転反転制御情報SSに基づいて、コードブロック単位で画像の回転処理及び反転処理を行い、回転反転処理後のコードブロックDDを出力する。つまり、方向変換部24は、コードブロック単位で画像の回転処理を行う回転処理部として機能するとともに、コードブロック単位で画像の反転処理を行う反転処理部としても機能する。但し、方向変換部24は、必ずしも回転処理及び反転処理の双方の機能を有する必要はなく、いずれか一方の機能のみを有していてもよい。さらに、方向変換部24は、コードブロックDDに関連する回転角や反転方向に関する情報を含む制御情報EDを出力する。
係数ビットモデリング部20は、方向変換部24から入力されたコードブロックDDを、各ビットの2次元配列として構成される複数のビットプレーンに分解する。図3は、コードブロック121(コードブロックDDに対応)が分解されたn枚のビットプレーン1220〜122n-1(nは自然数)を示す模式図である。図3に示すように、コードブロック121内の任意の1点の変換係数の2進値123が「011・・・0」である場合、この2進値123を構成する各ビットがそれぞれビットプレーン122n-1,122n-2,122n-3,・・・,1220に属するように、コードブロック121が分解される。図3において、ビットプレーン122n-1は、変換係数の最上位ビット(MSB)のみから成る最上位ビットプレーンを表し、ビットプレーン1220は、変換係数の最下位ビット(LSB)のみから成る最下位ビットプレーンを表している。
さらに、係数ビットモデリング部20は、各ビットプレーン122k(k=0〜n−1)内の各ビットのコンテクスト(context)判定を行い、判定結果である各ビットの有意性に応じて、ビットプレーン122kを3種類の符号化パス、即ち、SIGパス(SIGnificance propagation pass),MRパス(Magnitude Refinement pass),及びCLパス(CLeanup pass)に分解する。各符号化パスに関するコンテクスト判定のアルゴリズムは、EBCOTで定められている。それによれば、「有意である」とは、これまでの符号化処理において注目係数がゼロでないと分かっている状態のことを意味し、「有意で無い」とは、係数値がゼロであるか、又はゼロである可能性がある状態のことを意味する。
係数ビットモデリング部20は、SIGパス(有意な係数が周囲にある有意でない係数の符号化パス)、MRパス(有意な係数の符号化パス)、及びCLパス(SIGパス,MRパスに該当しない残りの係数情報の符号化パス)の3種類の符号化パスで、ビットプレーン符号化を実行する。ビットプレーン符号化は、最上位ビットプレーンから最下位ビットプレーンにかけて、各ビットプレーンのビットを4ビット単位で走査し、有意な係数が存在するか否かを判定することで行われる。有意で無い係数(0ビット)のみで構成されるビットプレーンの数はパケットヘッダに記録され、有意な係数が最初に出現したビットプレーンから実際の符号化が開始される。その符号化開始のビットプレーンはCLパスのみで符号化され、当該ビットプレーンよりも下位のビットプレーンは、上記3種類の符号化パスで順次符号化される。
算術符号化部21は、係数ビットモデリング部20から入力された符号化データBDを算術符号化し、その結果得られた符号化データADを出力する。具体的には、MQコーダを用いて、係数ビットモデリング部20から入力された符号化データBDに対して、コンテクストの判定結果に基づいて符号化パス単位で算術符号化を実行する。ここで、算術符号化部21は、符号化対象の一部を算術符号化せずに、当該符号化対象をそのまま符号化データADに含めて出力するバイパス処理を行う場合もある。なお、本実施の形態1では算術符号化を採用するが、本発明はこれに限らず、他の方式のエントロピー符号化を採用しても構わない。
符号量制御部22は、算術符号化部21から入力された符号化データADのレートを制御する機能を有する。具体的に、符号量制御部22は、目標符号量(圧縮画像の最終的な符号量)を得るために、符号化データADを、帯域成分単位、ビットプレーン単位、又はパス単位で、優先度の低いものから順に切り捨てるというポスト量子化を実行する。
ビットストリーム生成部23は、符号量制御部22から入力された符号化データCDと、方向変換部24から入力された制御情報EDと、付加情報(ヘッダ情報、レイヤ構成、スケーラビリティ、量子化テーブル等)とを多重化することによりビットストリームを生成し、圧縮画像として外部に出力する。
<方向変換部24の処理>
以下、図1に示した方向変換部24によって実行されるコードブロック単位での画像の回転反転処理について、詳細に説明する。
図4は、方向変換部24の構成を示す機能ブロック図である。図4に示すように、方向変換部24は、交換制御部240、アドレス生成部242、及び記憶装置241を備えて構成されている。
交換制御部240は、図1に示した量子化部14から入力された変換係数QDを、32×32又は64×64程度のコードブロックATに分割する。記憶装置241はDRAM等の半導体メモリであり、コードブロックATのデータサイズに相当する記憶容量を有している。コードブロックATは、アドレス生成部242によって生成された書き込みアドレスCTWに基づいて、記憶装置241に書き込まれる。
交換制御部240には、回転角や反転方向に関する情報を含む回転反転制御情報SSが、外部から入力されている。コードブロックATを記憶装置241に書き込む場合、交換制御部240は、回転反転制御情報SSと、変換係数QDのサブバンド情報とに基づいて、制御信号DTを生成する。制御信号DTはアドレス生成部242に入力され、アドレス生成部242は、制御信号DTに基づいて書き込みアドレスCTWを生成する。
画像の回転反転処理は、アドレス生成部242が生成する書き込みアドレスCTWによって実現される。つまり、コードブロックATを記憶装置241に書き込む際に、書き込みアドレスCTWに基づいて記憶装置241に所定の順序でアクセスすることにより、回転反転処理が施されたコードブロックDDが記憶装置241に書き込まれる。書き込みアドレスCTWの生成方法については後述する。
その後、アドレス生成部242によって生成された読み出しアドレスCTRに基づいて、ラスタ走査順に記憶装置241にアクセスすることにより、回転反転処理後のコードブロックDDが記憶装置241から読み出される。コードブロックDDは、交換制御部240を介して、図1に示した係数ビットモデリング部20に入力される。また、その際、交換制御部240は、コードブロックDDに関連する回転角や反転方向に関する情報を含む制御情報EDを生成して出力する。制御情報EDは、図1に示したビットストリーム生成部23に入力される。なお、交換制御部240は、コードブロックDDとは別個の信号として制御情報EDを出力するのではなく、コードブロックDDに制御情報EDを付加して出力してもよい。この場合、図1を参照して、制御情報EDは、係数ビットモデリング部20、算術符号化部21、及び符号量制御部22をこの順にパスして、ビットストリーム生成部23に入力される。
なお、以上の説明では、コードブロックATを記憶装置241に書き込む際に書き込みアドレスCTWに基づいて回転反転処理を行い、コードブロックDDを記憶装置241から読み出す際にはラスタ走査順にアクセスする例について述べた。これとは逆に、コードブロックATを記憶装置241に書き込む際にはラスタ走査順で記憶装置241へのアクセスを行い、コードブロックDDを記憶装置241から読み出す際に、読み出しアドレスCTRに基づいて所定の順序で記憶装置241にアクセスすることにより、回転反転処理を行ってもよい。この場合、交換制御部240は、回転反転制御情報SSと変換係数QDのサブバンド情報とに基づいて制御信号DTを生成し、アドレス生成部242は、制御信号DTに基づいて読み出しアドレスCTRを生成する。
図5〜9は、画像の回転処理と変換係数QDのサブバンドとの関係を説明するための模式図である。図5に示した画像に対して一回だけDWTを実行すると、図6に示した変換係数が得られる。LL成分には画像の本質的な部分が含まれ、HL成分には垂直方向に伸びるエッジ情報が含まれる。LH成分には水平方向に伸びるエッジ情報が含まれ、HH成分には斜め方向に伸びるエッジ情報が含まれる。各サブバンドの大きさは、DWT前の原画像の大きさの1/4となる。なお、各サブバンドが1つのコードブロックに対応している場合を想定している。
図6に示した変換係数に対して90°右回転の回転処理を実行すると、図7に示した変換係数が得られる。本実施の形態1に係る画像符号化装置1では、図1に示したように、DWT部13でDWT処理を行った後に方向変換部24で回転処理が行われるため、図5に示した画像が画像符号化装置1への入力画像である場合、図7に示した変換係数が得られることになる。
一方、図5に示した画像に対して90°右回転の回転処理を実行すると図8に示した画像が得られ、図8に示した画像に対して一回だけDWTを実行すると、図9に示した変換係数が得られる。図9に示した変換係数が、目的とする変換係数である。
図7と図9とを比較すると、HL成分及びLH成分の各サブバンドが、互いに入れ替わった関係になっていることが分かる。従って、目的とする図9の変換係数を得るためには、方向変換部24から出力される図7の変換係数(コードブロックDDに相当する)に対して、HL成分とLH成分とを互いに入れ換える処理が必要となる。この入れ換え処理は、制御情報EDに基づいて、ビットストリーム生成部23によって実行される。
90°右回転の回転処理と同様に、270°右回転の場合にも、HL成分とLH成分との入れ換え処理が必要となる。0°右回転や180°右回転の場合には、かかる入れ換え処理は不要である。制御情報EDには回転角に関する情報が含まれているため、ビットストリーム生成部23は、制御情報EDに基づき、回転角が90°又は270°の場合にHL成分とLH成分との入れ換え処理を実行する。
さて次に、変換係数QDの各サブバンドが32×32のコードブロックATに分割される場合を例にとり、図4に示したアドレス生成部242による書き込みアドレスCTWの生成手法について説明する。
図10は、図4に示した記憶装置241の記憶領域を示す模式図である。32×32のコードブロックATに対応して、“0”〜“1023”までのアドレスが、図10に示すようにラスタ走査順に割り当てられている。図10では、コードブロック幅(行方向のサイズ)をCW、コードブロック高さ(列方向のサイズ)をCH、4つの頂点をそれぞれA,B,C,Dと定義している。
一般化すると、頂点A,B,C,Dの各アドレスは、下記のように与えられる。
図10に示した例では、コードブロック幅CW=32、コードブロック高さCH=32であるため、A=0、B=31、C=992、D=1023となる。
図10に対応して、コードブロックATの書き込みの際に記憶装置241にアクセスするアドレス(Access address)kを求める式は、下記式のようになる。
例えば右回転角度0°かつ反転無しの場合は、頂点Aから頂点Bに向けて、頂点Dまでラスタ走査する必要がある。従って、アドレス生成部242は、上記式において、開始アドレスADRSstart=A、MAXW=CW、MAXH=CH、画素増加分Δp=1、ライン増加分Δl=CWとして、アクセスアドレスkを求める。なお、この場合は、ビットストリーム生成部23によるLH成分とHL成分との入れ換え処理は不要である。
また、例えば右回転角度90°かつ反転無しの場合は、頂点Cから頂点Aに向けて、頂点Dまでラスタ走査する必要がある。従って、アドレス生成部242は、上記式において、開始アドレスADRSstart=C、MAXW=CH、MAXH=CW、画素増加分Δp=−CH、ライン増加分Δl=1として、アクセスアドレスkを求める。なお、この場合は、ビットストリーム生成部23によるLH成分とHL成分との入れ換え処理が必要である。
また、例えば右回転角度0°かつ左右反転の場合は、頂点Bから頂点Aに向けて、頂点Cまでラスタ走査する必要がある。従って、アドレス生成部242は、上記式において、開始アドレスADRSstart=B、MAXW=CW、MAXH=CH、画素増加分Δp=−1、ライン増加分Δl=CWとして、アクセスアドレスkを求める。なお、この場合は、ビットストリーム生成部23によるLH成分とHL成分との入れ換え処理は不要である。
また、例えば右回転角度90°かつ上下反転の場合は、頂点Dから頂点Bに向けて、頂点Aまでラスタ走査する必要がある。従って、アドレス生成部242は、上記式において、開始アドレスADRSstart=D、MAXW=CH、MAXH=CW、画素増加分Δp=−CH、ライン増加分Δl=−1として、アクセスアドレスkを求める。なお、この場合は、ビットストリーム生成部23によるLH成分とHL成分との入れ換え処理が必要である。
右回転角度(0°,90°,180°,270°)、左右反転の有無、及び上下反転の有無についての代表的な組合せに関して、開始アドレスADRSstart、MAXW、MAXH、画素増加分Δp、ライン増加分Δl、及びLH成分とHL成分との入れ換え処理の要否(有無)をまとめると、下記の表のようになる。
図4を参照して、アドレス生成部242は、アクセスアドレスkに関する上記式と、この表に関するデータテーブルとを保持している。また、回転反転制御情報SSには、右回転角度、左右反転の有無、及び上下反転の有無に関する情報が含まれており、これらの情報は、制御信号DTとしてアドレス生成部242に与えられる。
アドレス生成部242は、アクセスアドレスkに関する上記式と、上記の表に関するデータテーブルと、制御信号DTとに基づいて、回転角及び反転方向に応じた適切な書き込みアドレスCTWを生成する。これにより、記憶装置241へのコードブロックATの書き込みの際に、所望の回転反転処理が実現される。また、この場合、アドレス生成部242は、右回転角度0°、左右反転無し、及び上下反転無しの条件で読み出しアドレスCTRを生成することにより、記憶装置241からラスタ走査順でコードブロックDDが読み出される。
なお、ここでは、コードブロックATを記憶装置241に書き込む際に回転反転処理を行う例について述べたが、上記の通り、コードブロックDDを記憶装置241から読み出す際に回転反転処理を行うこともできる。この場合、アドレス生成部242は、右回転角度0°、左右反転無し、及び上下反転無しの条件で書き込みアドレスCTWを生成することにより、コードブロックATがラスタ走査順で記憶装置241に書き込まれる。そして、アドレス生成部242が、アクセスアドレスkに関する上記式と、上記の表に関するデータテーブルと、制御信号DTとに基づいて、回転角及び反転方向に応じた適切な読み出しアドレスCTRを生成することにより、記憶装置241からのコードブロックDDの読み出しの際に、所望の回転反転処理が実現される。
<DWT部13の処理>
以下、図1に示したDWT部13によって実行されるDWTの処理内容について、詳細に説明する。
JPEG2000 Part1で使用されるDWT(分解側)には、以下のような規則がある。
・偶数番目の出力はローパスであり、奇数番目の出力はハイパスである。
・Part1 Profile0では、各サブバンドの左上角を原点としているので、最初は必ずローパスの出力になる。
次に、DWTを実行するためにDWT部13に余分に読み出さなくてはならないデータ数について考察する。図11は、9×7タップのフィルタを用いてDWTを実行する場合における、入出力データの位置関係を示す図である。(a)は、注目データ列が偶数番目のデータ(ローパスデータL)から始まって、データ数が偶数個である場合を示しており、(b)は、注目データ列が偶数番目のデータ(ローパスデータL)から始まって、データ数が奇数個である場合を示しており、(c)は、注目データ列が奇数番目のデータ(ハイパスデータH)から始まって、データ数が偶数個である場合を示しており、(d)は、注目データ列が奇数番目のデータ(ハイパスデータH)から始まって、データ数が奇数個である場合を示している。9×7タップのフィルタを使用した場合、開始データの奇数/偶数とデータ数の奇数/偶数との組合せにより、図11に示した4通りのパターンが考えられる。なお、Part1 Profile0では、必ず偶数番目のデータが開始データとなるため、図11の(a)及び(b)の場合のみである。
なお、ロスレス圧縮で使用される5×3タップのフィルタの場合であっても、入出力データの位置関係は図11と同様となる。9×7タップのフィルタを使用した場合との相違点は、フィルタのタップ数が、ローパス側が5タップとなり、ハイパス側が3タップになることだけである。
JPEG2000方式によると、DWTでは、まず垂直フィルタをかけ、次に水平フィルタをかけるという処理の順序が定められている。従って、JPEG2000方式で復号化する場合を考えると、合成フィルタによって完全に元に戻すためには、垂直フィルタ及び水平フィルタの実行順序や、ハイパスデータH及びローパスデータLの配列順序が、重要になってくる。
図12は、16行(第0行目から第15行目まで)×16列(第0列目から第15列目まで)の画像信号に対して、垂直フィルタ→水平フィルタの順で2次元フィルタをかけた状況を示す図である。左図は垂直フィルタをかけた後の状況を示し、右図はさらに水平フィルタをかけた後の状況を示している。
図12の左図に示すように、垂直フィルタをかけることにより、偶数番目の行の垂直成分はローパスデータLとなり、奇数番目の行の垂直成分はハイパスデータHとなる。図12の右図に示すように、さらに水平フィルタをかけることにより、偶数番目の列の水平成分はローパスデータLとなり、奇数番目の列の水平成分はハイパスデータHとなる。なお、図12の右図において、(LL)は水平成分及び垂直成分がいずれもLであることを示し、(HL)は水平成分がHで垂直成分がLであることを示し、(LH)は水平成分がLで垂直成分がHであることを示し、(HH)は水平成分及び垂直成分がいずれもHであることを示している。また、矢印Xは垂直方向を示し、矢印Yは水平方向を示している。
まず、反転処理について検討する。図11の(a)及び(c)のように、データ数が偶数個である場合は、反転処理を行うことによって出力データのH及びLの位置が入れ替わる。一方、図11の(b)及び(d)のように、データ数が奇数個である場合は、反転処理を行っても出力データのH及びLの位置は入れ替わらない。従って、反転処理を行う場合には、ローパスフィルタ及びハイパスフィルタの出力の実行順序を、データ数の奇数/偶数に応じて入れ換える必要がある。
具体的に、DWT部13は、ローパスフィルタ及びハイパスフィルタから成る水平フィルタと、同じくローパスフィルタ及びハイパスフィルタから成る垂直フィルタとを有している。また、図1では図示していないが、回転反転制御情報SSがDWT部13にも入力されている。そして、DWT部13は、回転反転制御情報SSに基づき、左右反転処理を行う場合には、水平フィルタのローパスフィルタ及びハイパスフィルタの出力の実行順序を、反転すべきデータ列のデータ数が奇数である場合には入れ換えず、偶数である場合には入れ換える。同様に、DWT部13は、回転反転制御情報SSに基づき、上下反転処理を行う場合には、垂直フィルタのローパスフィルタ及びハイパスフィルタの出力の実行順序を、反転すべきデータ列のデータ数が奇数である場合には入れ換えず、偶数である場合には入れ換える。
次に、回転処理について検討する。画像符号化装置1において回転処理を行う場合には、JPEG2000方式での復号化の際に合成フィルタによって完全に元に戻すためには、方向変換部24で回転処理を行った後に、(LL),(HL),(LH),(HH)の各成分の位置関係が図12の右図のようになっている必要がある。このことは、反転処理についても同様である。
従って、入力画像に対して例えば左右反転処理と90°右回転処理とを行いたい場合には、その反対の処理として、入力画像に対して左右反転処理と270°右回転処理(90°左回転処理)とが事前に行われたのと同様の状態の画像信号を、方向変換部24に入力する必要がある。図13は、16行×16列の画像信号に対して回転反転処理を行う場合の、事前処理の内容を説明するための図である。図13の左図は、図12の右図の画像信号に対して左右反転処理が行われた状態の画像信号を示しており、図13の右図は、図13の左図の画像信号に対して270°右回転処理が行われた状態の画像信号を示している。つまり、上記の例のように入力画像に対して左右反転処理と90°右回転処理とを行いたい場合には、図13の右図の状態の画像信号を方向変換部24に入力すればよい。
図13の右図の画像信号を得るためには、DWT部13において、垂直フィルタ及び水平フィルタの実行順序を入れ換え、まず水平フィルタをかけ、次に垂直フィルタをかければよい。つまり、図13の右図に関しては、(LL)は垂直成分及び水平成分がいずれもLであることを示し、(HL)は垂直成分がHで水平成分がLであることを示し、(LH)は垂直成分がLで水平成分がHであることを示し、(HH)は垂直成分及び水平成分がいずれもHであることを示している。
上記の例では90°右回転処理を行いたい場合の例について述べたが、270°右回転を行いたい場合についても同様に、垂直フィルタ及び水平フィルタの実行順序を入れ換える必要がある。一方、0°右回転又は180°右回転を行いたい場合には、垂直フィルタ及び水平フィルタの実行順序を入れ換える必要はなく、通常の場合と同様に、まず垂直フィルタをかけ、次に水平フィルタをかければよい。
具体的に、DWT部13は、ローパスフィルタ及びハイパスフィルタから成る水平フィルタと、同じくローパスフィルタ及びハイパスフィルタから成る垂直フィルタとを有している。また、図1では図示していないが、回転反転制御情報SSがDWT部13にも入力されている。そして、DWT部13は、回転反転制御情報SSに基づき、90°右回転又は270°右回転を行いたい場合には、水平フィルタ→垂直フィルタの順にフィルタリング処理を実行する。一方、0°右回転又は180°右回転を行いたい場合には、垂直フィルタ→水平フィルタの順にフィルタリング処理を実行する。
以下、DWT部13の構成及び動作について、さらに詳細に説明する。ここでは、2次元ウェーブレット変換の一種であるラインベースウェーブレット変換の処理内容について説明する。
図14は、ラインベースウェーブレット変換を実現するDWT部13の第1の構成を示す図である。1器の垂直フィルタの後段に2器の水平フィルタが配置された構成となっている。0°右回転又は180°右回転を行いたい場合には、この構成のフィルタが使用される。なお、フィルタの個数は任意であり、フィルタの個数を増やすことによってデータ処理の高速化を図ることができ、逆に、フィルタの個数を減らすことによって回路規模を縮小することができる。データ処理の高速化と回路規模の縮小とはトレードオフの関係にあるため、目的や環境に応じてフィルタの個数を任意に設計すればよい。
図14を参照して、まず、垂直フィルタによるフィルタリング処理が行われる。行に沿って注目列を一列ずつずらしていき、1行分の処理を終えると縦方向(列方向)に1行ずらす。垂直フィルタの係数は、同一行内ではL又はHのいずれか一方であり、1行毎にL,Hが交互に切り換えられる。次に、垂直方向のローパス出力及びハイパス出力のそれぞれについて、水平フィルタによるフィルタリング処理が行われる。行に沿って注目画素を一画素ずつずらしていく。水平フィルタの係数は、1画素毎にL,Hが交互に切り換えられる。その結果、垂直方向のローパス出力に対応する水平フィルタにおいては、水平方向のローパス出力として(LL)成分が得られ、水平方向のハイパス出力として(HL)成分が得られる。垂直方向のハイパス出力に対応する水平フィルタにおいては、水平方向のローパス出力として(LH)成分が得られ、水平方向のハイパス出力として(HH)成分が得られる。
図15は、ラインベースウェーブレット変換を実現するDWT部13の第2の構成を示す図である。2器の水平フィルタの後段に1器の垂直フィルタが配置された構成となっている。90°右回転又は270°右回転を行いたい場合には、この構成のフィルタが使用される。なお、フィルタの個数が任意であることは上述の通りである。
図15を参照して、まず、水平方向の偶数ライン用及び奇数ライン用の各水平フィルタによるフィルタリング処理がそれぞれ行われる。行に沿って注目画素を一画素ずつずらしていく。水平フィルタの係数は、1画素毎にL,Hが交互に切り換えられる。1行分の処理を終えると縦方向に1行ずらし、同様の処理を繰り返す。水平フィルタからの出力が垂直フィルタの行数分貯まると、次に、垂直フィルタによるフィルタリング処理が行われる。行に沿って注目列を一列ずつずらしていき、1行分の処理を終えると縦方向に1行ずらす。垂直フィルタの係数は、同一行内ではL又はHのいずれか一方であり、1行毎にL,Hが交互に切り換えられる。その結果、垂直方向のローパス出力に関しては、水平方向のローパス出力に対応して(LL)成分が得られ、水平方向のハイパス出力に対応して(LH)成分が得られる。垂直方向のハイパス出力に関しては、水平方向のローパス出力に対応して(HL)成分が得られ、水平方向のハイパス出力に対応して(HH)成分が得られる。
なお、構成が互いに異なる図14のフィルタ構成と図15のフィルタ構成とを別個に構築するのではなく、90°右回転又は270°右回転を行いたい場合にも、図14の構成を援用することも可能である。具体的には、図14を参照して、垂直フィルタの係数のL,Hを、同一行内で1列毎に交互に切り換えるとともに、上側の水平フィルタの係数をL、下側の水平フィルタの係数をHに固定すればよい。これにより、図15と同様の(LL)成分、(LH)成分、(HL)成分、及び(HH)成分を出力することができる。
<交換制御部240によるコードブロック分割処理>
以下、図4に示した交換制御部240によって実行されるコードブロックの分割処理の内容について説明する。
図16〜18は、コードブロック121に分割された2次元画像120を示す図である。Part1 Profile0では、図16に示すように、通常は各サブバンドの左上角を原点として、コードブロック121の分割処理が行われる。
図13の左図には左右反転処理が行われた画像信号が示されているが、この画像信号に対応するためには、図17に示すように、各サブバンドの右上角を原点としてコードブロック121の分割処理を行う。
また、図13の右図には左右反転処理と270°右回転処理とが行われた画像信号が示されているが、この画像信号に対応するためには、図18に示すように、各サブバンドの左上角を原点としてコードブロック121の分割処理を行う。
このように、交換制御部240は、回転反転制御情報SSに基づき、各サブバンドの原点の位置を回転角及び反転方向に応じて可変に設定することにより、コードブロック121の分割処理を実行する。
<係数ビットモデリング部20の処理>
以下、図1に示した係数ビットモデリング部20の処理内容について説明する。上記の通り、係数ビットモデリング部20は、図3に示した各ビットプレーン122k内の各ビットのコンテクスト判定を行い、EBCOTに基づいてコンテクストモデリングを行う。
図1には示していないが、係数ビットモデリング部20には、回転反転制御情報SSが入力されている。係数ビットモデリング部20は、回転反転制御情報SSに基づき、回転角が右90°又は右270°である場合は、HL成分のコードブロックDDと、LH成分のコードブロックDDとを互いに入れ換えて、コンテクストモデリングを実行する。一方、回転角が右0°又は右180°である場合は、コードブロックDDの入れ換え処理を行わずに、コンテクストモデリングを実行する。
<ビットストリーム生成部23の処理>
以下、図1に示したビットストリーム生成部23の処理内容について説明する。
ビットストリーム生成部23は、パケット化されたビットストリームを生成する。図19,20は、パケットの構成例を示す模式図である。パケットは、パケットボディと、その先頭に付加されるパケットヘッダとによって構成されている。パケットヘッダには、パケットデータを復号化するために必要となる様々な情報が含まれている。図19に示したパケットのパケットボディには、HL成分のコードブロックに対応する部分の符号化データCDと、LH成分のコードブロックに対応する部分の符号化データCDと、HH成分のコードブロックに対応する部分の符号化データCDとが、この順に配置されている。図20に示したパケットのパケットボディには、LL成分のコードブロックに対応する部分の符号化データCDが配置されている。
図1に示したように、ビットストリーム生成部23には、方向変換部24から制御情報EDが入力されている。制御情報EDには、回転角や反転方向に関する情報が含まれている。
ビットストリーム生成部23は、制御情報EDに基づき、回転角が右90°又は右270°である場合には、図19に示したパケットのパケットボディのうち、LH成分のコードブロックに対応する部分の符号化データCDと、HL成分のコードブロックに対応する部分の符号化データCDとを互いに入れ換えて、パケットデータを生成する。一方、回転角が右0°又は右180°である場合は、符号化データCDの入れ換え処理を行わずに、パケットデータを生成する。
<画像符号化装置1の効果>
本実施の形態1に係る画像符号化装置1によれば、回転処理部としての方向変換部24は、コードブロック単位で画像の回転処理を行う。従って、記憶容量の大きなメモリを使用することなく、タイル歪みを発生させることもなく、効率良く画像の回転処理を実行することができる。
また、アドレス生成部242が、書き込みアドレスCTW及び読み出しアドレスCTRの一方を回転制御情報(回転反転制御情報SS)に基づいて生成するという、比較的簡易な処理によって、画像の回転処理を実行することができる。
また、ビットストリーム生成部23は、回転角が右90°又は右270°である場合に、LH成分のコードブロックに対応する部分の画像データと、HL成分のコードブロックに対応する部分の画像データとを互いに置換する。これにより、回転処理に起因して画像データに不整合が生じる事態を回避することができる。
また、DWT部13は、回転角に応じて垂直フィルタ及び水平フィルタの出力の実行順序を入れ換える。これにより、回転処理前のコードブロック内における各画素のフィルタ係数の組合せ(LL,HL,LH,HH)を、回転角に応じて異なる位置関係とすることができる。従って、回転処理後のコードブロックDD内における(LL),(HL),(LH),(HH)の位置関係がJPEG2000方式での標準の位置関係(図12の右図)となるような、回転処理前のコードブロックを、回転角毎に適切に生成することができる。
また、本実施の形態1に係る画像符号化装置1によれば、反転処理部としての方向変換部24は、コードブロック単位で画像の反転処理を行う。従って、記憶容量の大きなメモリを使用することなく、タイル歪みを発生させることもなく、効率良く画像の反転処理を実行することができる。
また、アドレス生成部242が、書き込みアドレスCTW及び読み出しアドレスCTRの一方を反転制御情報(回転反転制御情報SS)に基づいて生成するという、比較的簡易な処理によって、画像の反転処理を実行することができる。
また、DWT部13は、反転すべきデータ数の奇偶に応じてローパスフィルタ及びハイパスフィルタの出力の実行順序を入れ換える。これにより、反転処理前のコードブロック内における各画素のフィルタ係数の組合せ(LL,HL,LH,HH)を、反転方向に応じて異なる位置関係とすることができる。従って、反転処理後のコードブロックDD内における(LL),(HL),(LH),(HH)の位置関係がJPEG2000方式での標準の位置関係(図12の右図)となるような、反転処理前のコードブロックを、反転方向毎に適切に生成することができる。
実施の形態2.
上記実施の形態1では、入力された画像信号を符号化して圧縮画像を出力する画像符号化装置について説明したが、本実施の形態2では、入力された圧縮画像を復号化して画像信号を出力する画像復号化装置について説明する。以下、上記実施の形態1との相違点を中心に説明する。
<装置全体の概要>
図21は、本発明の実施の形態2に係る、JPEG2000方式に基づいた画像復号化装置400の構成を示す機能ブロック図である。図21に示すように、画像復号化装置400は、DCレベルシフト部410、色空間変換部411、タイリング部412、逆DWT部413、逆量子化部414、方向変換部424、係数ビットモデリング部420、算術復号化部421、及びビットストリーム解析部423を備えて構成されている。
なお、画像復号化装置400を構成するこれら各処理部410〜414,420,421,423,424の全部又は一部は、ハードウェアとして構成されていてもよいし、又はマイクロプロセッサを機能させるプログラムとして構成されていてもよい。
ビットストリーム解析部423は、外部から入力された圧縮画像のビットストリームを解析し、符号化データCDと、付加情報(ヘッダ情報、レイヤ構成、スケーラビリティ、量子化テーブル等)とを分離する。
算術復号化部421は、ビットストリーム解析部423から入力された符号化データCDを算術復号化することにより、復号化データBDを出力する。なお、本実施の形態2では算術復号化を採用するが、本発明はこれに限らず、他の方式のエントロピー復号化を採用しても構わない。
係数ビットモデリング部420は、算術復号化部421から入力された復号化データBDに基づいて、コードブロックDDを生成する。
方向変換部424は、係数ビットモデリング部420から入力されたコードブロックDDに基づいて、変換係数QDを生成する。また、方向変換部424には外部から回転反転制御情報SSが入力されており、方向変換部424は、回転反転制御情報SSに基づいて、コードブロック単位で画像の回転処理及び反転処理を行う。つまり、方向変換部424は、コードブロック単位で画像の回転処理を行う回転処理部として機能するとともに、コードブロック単位で画像の反転処理を行う反転処理部としても機能する。但し、方向変換部424は、必ずしも回転処理及び反転処理の双方の機能を有する必要はなく、いずれか一方の機能のみを有していてもよい。さらに、方向変換部424は、回転角や反転方向に関する情報を含む制御情報EDを出力する。
逆量子化部414は、方向変換部424から入力された変換係数QDをスカラー逆量子化することにより、スカラー逆量子化後の変換係数を出力する。また、逆量子化部414は、所定のビットシフト処理を行う機能も有している。
逆DWT部413は、逆量子化部414から入力された変換係数に対してタイル単位で整数型又は実数型の逆DWTを施し、その変換係数を高域成分と低域成分とに再帰的に帯域合成することにより、複数のタイルに分割された画像信号を生成する。
タイリング部412は、逆DWT部413から入力された画像信号に対して複数のタイルを合成する処理を行うことにより、画像信号を生成する。本発明では、タイル歪みの発生を回避又は抑制すべく、1フレーム分の画像信号が1タイルとして処理されている場合や、個々のサイズが比較的大きな少数のタイルに分割されている場合を想定している。1フレーム分の画像信号が1タイルとして処理されている場合には、逆DWT部413から入力された画像信号をそのまま次段の機能ブロックに出力すればよい。但し、本発明は通常のタイリング処理が行われている装置にも適用可能である。
色空間変換部411は、タイリング部412から入力された画像信号に対して、所定の色空間変換処理を行う。例えば、YCbCr信号又はYUV信号をRGB信号に変換して出力する。
DCレベルシフト部410は、色空間変換部411から入力された画像信号に対して、必要に応じてDCレベル変換処理を行うことにより、画像信号(図21における出力画像)を外部に出力する。
<方向変換部424の処理>
以下、図21に示した方向変換部424によって実行されるコードブロック単位での画像の回転反転処理について、詳細に説明する。
図22は、方向変換部424の構成を示す機能ブロック図である。図22に示すように、方向変換部424は、交換制御部4240、アドレス生成部4242、及び記憶装置4241を備えて構成されている。
記憶装置4241はDRAM等の半導体メモリであり、コードブロックDDのデータサイズに相当する記憶容量を有している。交換制御部4240は、図21に示した係数ビットモデリング部420から入力されたコードブロックDDを、アドレス生成部4242によって生成された書き込みアドレスCTWに基づいて、記憶装置4241に書き込む。
交換制御部4240には、回転角や反転方向に関する情報を含む回転反転制御情報SSが、外部から入力されている。コードブロックDDを記憶装置4241に書き込む場合、交換制御部4240は、回転反転制御情報SSと、コードブロックDDのサブバンド情報とに基づいて、制御信号DTを生成する。制御信号DTはアドレス生成部4242に入力され、アドレス生成部4242は、制御信号DTに基づいて書き込みアドレスCTWを生成する。
画像の回転反転処理は、アドレス生成部4242が生成する書き込みアドレスCTWによって実現される。つまり、コードブロックDDを記憶装置4241に書き込む際に、書き込みアドレスCTWに基づいて記憶装置4241に所定の順序でアクセスすることにより、回転反転処理が施されたコードブロックBTが記憶装置4241に書き込まれる。書き込みアドレスCTWの生成方法は、上記実施の形態1と同様である。
その後、アドレス生成部4242によって生成された読み出しアドレスCTRに基づいて、ラスタ走査順に記憶装置4241にアクセスすることにより、回転反転処理後のコードブロックBTが記憶装置4241から読み出される。交換制御部4240は、コードブロックBTに基づいて変換係数QDを生成する。また、その際、交換制御部4240は、回転角や反転方向に関する情報を含む制御情報EDを生成して出力する。制御情報EDは、図21に示したビットストリーム解析部423に入力される。
なお、以上の説明では、コードブロックDDを記憶装置4241に書き込む際に書き込みアドレスCTWに基づいて回転反転処理を行い、コードブロックBTを記憶装置4241から読み出す際にはラスタ走査順にアクセスする例について述べた。これとは逆に、コードブロックDDを記憶装置4241に書き込む際にはラスタ走査順で記憶装置4241へのアクセスを行い、コードブロックBTを記憶装置4241から読み出す際に、読み出しアドレスCTRに基づいて所定の順序で記憶装置4241にアクセスすることにより、回転反転処理を行ってもよい。この場合、交換制御部4240は、回転反転制御情報SSとコードブロックDDのサブバンド情報とに基づいて制御信号DTを生成し、アドレス生成部4242は、制御信号DTに基づいて読み出しアドレスCTRを生成する。
上記実施の形態1と同様に、回転角が右90°又は右270°の場合は、方向変換部424に入力されるコードブロックDDに対して、HL成分とLH成分とを互いに入れ換える処理が必要となる。この入れ換え処理は、制御情報EDに基づいて、ビットストリーム解析部423によって実行される。0°右回転や180°右回転の場合には、かかる入れ換え処理は不要である。
<逆DWT部413の処理>
以下、図22に示した逆DWT部413によって実行される逆DWTの処理内容について、詳細に説明する。
JPEG2000 Part1で使用される逆DWT(合成側)には、以下のような規則がある。
・9×7タップのフィルタでは、偶数番目の入力は7画素であり、奇数番目の入力は9画素である。
・Part1 Profile0では、各サブバンドの左上角を原点としているので、最初は必ずローパスの入力になる。
次に、逆DWTを実行するために逆DWT部413に余分に読み出さなくてはならないデータ数について考察する。図23は、9×7タップのフィルタを用いて逆DWTを実行する場合における、入出力データの位置関係を示す図である。(a)は、注目データ列が偶数番目のデータ(ローパスデータL)から始まって、データ数が偶数個である場合を示しており、(b)は、注目データ列が偶数番目のデータ(ローパスデータL)から始まって、データ数が奇数個である場合を示しており、(c)は、注目データ列が奇数番目のデータ(ハイパスデータH)から始まって、データ数が偶数個である場合を示しており、(d)は、注目データ列が奇数番目のデータ(ハイパスデータH)から始まって、データ数が奇数個である場合を示している。9×7タップのフィルタを使用した場合、開始データの奇数/偶数とデータ数の奇数/偶数との組合せにより、図23に示した4通りのパターンが考えられる。なお、Part1 Profile0では、必ず偶数番目のデータが開始データとなるため、図23の(a)及び(b)の場合のみである。
偶数番目の画素を合成する場合は7タップのフィルタとなっており、奇数番目の画素を合成する場合は9タップのフィルタとなっている。
JPEG2000方式によると、逆DWTでは、まず合成水平フィルタをかけ、次に合成垂直フィルタをかけるという処理の順序が定められている。従って、JPEG2000方式で復号化する場合を考えると、合成フィルタによって完全に元に戻すためには、垂直フィルタ及び水平フィルタの実行順序や、ハイパスデータH及びローパスデータLの配列順序が、重要になってくる。
図24は、16行(第0行目から第15行目まで)×16列(第0列目から第15列目まで)の画像信号に対して、合成水平フィルタ→合成垂直フィルタの順で2次元フィルタをかける状況を示す図である。図24の左図は、合成水平フィルタをかける前の状況を示しており、右図は、合成水平フィルタをかけた後の状況を示している。
図24の左図において、(LL)は水平成分及び垂直成分がいずれもLであることを示し、(HL)は水平成分がHで垂直成分がLであることを示し、(LH)は水平成分がLで垂直成分がHであることを示し、(HH)は水平成分及び垂直成分がいずれもHであることを示している。また、矢印Xは垂直方向を示し、矢印Yは水平方向を示している。
図24の右図に示すように、合成水平フィルタをかけることにより、偶数番目の行はローパスデータLとなり、奇数番目の行はハイパスデータHとなる。
まず、反転処理について検討する。図23の(a)及び(c)のように、データ数が偶数個である場合は、反転処理が行われたことによって入力データのH及びLの位置が入れ替わる。一方、図23の(b)及び(d)のように、データ数が奇数個である場合は、反転処理が行われても入力データのH及びLの位置は入れ替わらない。従って、反転処理を行う場合には、ローパスフィルタ及びハイパスフィルタの入力の実行順序を、データ数の奇数/偶数に応じて入れ換える必要がある。
具体的に、逆DWT部413は、ローパスフィルタ及びハイパスフィルタから成る合成水平フィルタと、同じくローパスフィルタ及びハイパスフィルタから成る合成垂直フィルタとを有している。また、図21では図示していないが、回転反転制御情報SSが逆DWT部413にも入力されている。そして、逆DWT部413は、回転反転制御情報SSに基づき、左右反転処理が行われた場合には、合成水平フィルタのローパスフィルタ及びハイパスフィルタの入力の実行順序を、反転されたデータ列のデータ数が奇数である場合には入れ換えず、偶数である場合には入れ換える。同様に、逆DWT部413は、回転反転制御情報SSに基づき、上下反転処理が行われた場合には、垂直フィルタのローパスフィルタ及びハイパスフィルタの入力の実行順序を、反転されたデータ列のデータ数が奇数である場合には入れ換えず、偶数である場合には入れ換える。
次に、回転処理について検討する。画像復号化装置400において回転処理を行う場合には、方向変換部424で回転処理を行う前に、(LL),(HL),(LH),(HH)の各成分の位置関係が図12の右図のようになっている。このことは、反転処理についても同様である。
図12の右図の画像信号に対して左右反転処理を行うと、図13の左図のようになる。また、図13の左図の画像信号に対して270°右回転処理を行うと、図13の右図のようになる。
図13の右図の画像信号を合成するためには、逆DWT部413において、合成水平フィルタ及び合成垂直フィルタの実行順序を入れ換え、まず合成垂直フィルタをかけ、次に合成水平フィルタをかければよい。つまり、図13の右図に関しては、(LL)は垂直成分及び水平成分がいずれもLであることを示し、(HL)は垂直成分がHで水平成分がLであることを示し、(LH)は垂直成分がLで水平成分がHであることを示し、(HH)は垂直成分及び水平成分がいずれもHであることを示している。
上記の例では90°右回転処理を行った場合の例について述べたが、270°右回転を行った場合についても同様に、合成水平フィルタ及び合成垂直フィルタの実行順序を入れ換える必要がある。一方、0°右回転又は180°右回転を行った場合には、合成水平フィルタ及び合成垂直フィルタの実行順序を入れ換える必要はなく、通常の場合と同様に、まず合成水平フィルタをかけ、次に合成垂直フィルタをかければよい。
具体的に、逆DWT部413は、ローパスフィルタ及びハイパスフィルタから成る合成水平フィルタと、同じくローパスフィルタ及びハイパスフィルタから成る合成垂直フィルタとを有している。また、図21では図示していないが、回転反転制御情報SSが逆DWT部413にも入力されている。そして、逆DWT部413は、回転反転制御情報SSに基づき、90°右回転又は270°右回転を行った場合には、合成垂直フィルタ→合成水平フィルタの順にフィルタリング処理を実行する。一方、0°右回転又は180°右回転を行った場合には、合成水平フィルタ→合成垂直フィルタの順にフィルタリング処理を実行する。
以下、逆DWT部413の構成及び動作について、さらに詳細に説明する。ここでは、2次元逆ウェーブレット変換の一種であるラインベース逆ウェーブレット変換の処理内容について説明する。
図25は、ラインベース逆ウェーブレット変換を実現する逆DWT部413の第1の構成を示す図である。2器の合成水平フィルタの後段に1器の合成垂直フィルタが配置された構成となっている。0°右回転又は180°右回転を行った場合には、この構成のフィルタが使用される。
図25を参照して、まず、水平方向の偶数ライン用及び奇数ライン用の各合成水平フィルタによるフィルタリング処理がそれぞれ行われる。行に沿って注目画素を一画素ずつずらしていく。合成水平フィルタの係数は、1画素毎にL,Hが交互に切り換えられる。1行分の処理を終えると縦方向に1行ずらし、同様の処理を繰り返す。合成水平フィルタからの出力が合成垂直フィルタの行数分貯まると、次に、合成垂直フィルタによるフィルタリング処理が行われる。行に沿って注目列を一列ずつずらしていき、1行分の処理を終えると縦方向に1行ずらす。合成垂直フィルタの係数は、同一行内ではL又はHのいずれか一方であり、1行毎にL,Hが交互に切り換えられる。
図26は、ラインベース逆ウェーブレット変換を実現する逆DWT部413の第2の構成を示す図である。1器の合成垂直フィルタの後段に2器の合成水平フィルタが配置された構成となっている。90°右回転又は270°右回転を行った場合には、この構成のフィルタが使用される。
図26を参照して、まず、合成垂直フィルタによるフィルタリング処理が行われる。行に沿って注目列を一列ずつずらしていき、1行分の処理を終えると縦方向に1行ずらす。合成垂直フィルタの係数は、同一行内ではL又はHのいずれか一方であり、1行毎にL,Hが交互に切り換えられる。次に、垂直偶数出力及び垂直奇数出力のそれぞれについて、合成水平フィルタによるフィルタリング処理が行われる。行に沿って注目画素を一画素ずつずらしていく。合成水平フィルタの係数は、1画素毎にL,Hが交互に切り換えられる。
なお、構成が互いに異なる図25のフィルタ構成と図26のフィルタ構成とを別個に構築するのではなく、90°右回転又は270°右回転を行った場合にも、合成垂直フィルタ及び合成水平フィルタの各係数を適切に設定することで、図25の構成を援用することが可能である。
<ビットストリーム解析部423の処理>
以下、図21に示したビットストリーム解析部423の処理内容について説明する。
ビットストリーム解析部423には、パケット化されたビットストリームが、外部から入力される。図19に示したように、パケットは、パケットボディとパケットヘッダとによって構成されており、パケットボディには、HL成分のコードブロックに対応する部分の符号化データCDと、LH成分のコードブロックに対応する部分の符号化データCDと、HH成分のコードブロックに対応する部分の符号化データCDとが、この順に配置されている。
図21に示したように、ビットストリーム解析部423には、方向変換部424から制御情報EDが入力されている。制御情報EDには、回転角や反転方向に関する情報が含まれている。
ビットストリーム解析部423は、制御情報EDに基づき、回転角が右90°又は右270°である場合には、図19に示したパケットのパケットボディのうち、LH成分のコードブロックに対応する部分の画像データと、HL成分のコードブロックに対応する部分の画像データとを互いに入れ換えて、図21に示した符号化データCDを生成する。一方、回転角が右0°又は右180°である場合は、画像データの入れ換え処理を行わずに、図21に示した符号化データCDを生成する。
<画像復号化装置400の効果>
本実施の形態2に係る画像復号化装置400によれば、回転処理部としての方向変換部424は、コードブロック単位で画像の回転処理を行う。従って、記憶容量の大きなメモリを使用することなく、タイル歪みを発生させることもなく、効率良く画像の回転処理を実行することができる。
また、アドレス生成部4242が書き込みアドレスCTW及び読み出しアドレスCTRの一方を回転制御情報(回転反転制御情報SS)に基づいて生成するという、比較的簡易な処理によって、画像の回転処理を実行することができる。
また、ビットストリーム解析部423は、回転角が右90°又は右270°である場合に、LH成分のコードブロックに対応する部分の画像データと、HL成分のコードブロックに対応する部分の画像データとを互いに置換する。これにより、回転処理に起因して符号化データCDに不整合が生じる事態を回避することができる。
また、逆DWT部413は、回転角に応じて合成垂直フィルタ及び合成水平フィルタの実行順序を入れ換える。これにより、回転処理後のコードブロックBTから得られた変換係数QDを、回転角に応じて適切に合成することができる。
また、本実施の形態2に係る画像復号化装置400によれば、反転処理部としての方向変換部424は、コードブロック単位で画像の反転処理を行う。従って、記憶容量の大きなメモリを使用することなく、タイル歪みを発生させることもなく、効率良く画像の反転処理を実行することができる。
また、アドレス生成部4242が、書き込みアドレスCTW及び読み出しアドレスCTRの一方を反転制御情報(回転反転制御情報SS)に基づいて生成するという、比較的簡易な処理によって、画像の反転処理を実行することができる。
また、逆DWT部413は、反転されたデータ数の奇偶に応じてローパスフィルタ及びハイパスフィルタの入力の実行順序を入れ換える。これにより、反転処理後のコードブロックBTから得られた変換係数QDを、反転方向に応じて適切に合成することができる。