以下、図面を参照して本発明の実施形態を説明する。
図1は、本発明の一実施形態に係る可変長符号化/復号化装置の構成を示すブロック図である。本実施形態の可変長符号化/復号化装置は、大きく分けて符号語テーブル作成部101、符号化部114、伝送系または蓄積系104および復号化部115からなる。まず、これら各部の機能について簡単に説明すると、符号語テーブル作成部101は情報シンボルの生起確率に基づいて符号語テーブルを作成し、符号化部114内の符号化テーブル102と、復号化部115内の順方向符号語テーブル110および逆方向符号語テーブル112に送る。符号化部114は、情報シンボルを可変長符号に符号化し、その可変長符号を符号化データとして伝送系または蓄積系104へ出力する。復号化部115は、伝送系または蓄積系104を介して入力されてきた符号化データを復号して元の情報シンボルを再生する。
次に、本実施形態の各部の詳細な構成と動作を説明する。符号化部114において、入力された情報シンボルは符号化器103に入力される。一方、符号語テーブル102は、符号語テーブル作成部101によって予め作成された情報シンボルと可変長符号の符号語とを対応させて格納している。符号化器103は符号語テーブル102に格納されている符号語の中から、入力された情報シンボルに対応した符号語を選択して符号化データとして出力する。この符号化データは、伝送系または蓄積系104を通して復号化部115に送られる。この際、符号化データには一定周期毎に同期コードが挿入される。
復号化部115では、伝送系または蓄積系104より入力された符号化データから同期コード検出部105で同期コードを検出し、同期コードと同期コードの間の符号化データをバッファ106に蓄積する。順方向復号化器110では、順方向復号木作成部111からの順方向復号木に基づいて、バッファ106に蓄積された符号化データの先頭から復号を開始し、逆方向復号化器108では、逆方向復号木作成部113からの逆方向復号木に基づいて、バッファ106に蓄積された符号化データの末尾から復号を開始する。
復号値判定部109では、順方向復号化器107によって得られた復号結果(順方向復号値という)と、逆方向復号化器108によって得られた復号結果(逆方向復号値という)から復号値を判定し、最終的な復号結果を出力する。すなわち、復号値判定部109では符号化データに誤りがあると、復号木に出現しないビットパターンが生じることから誤りの存在が分かるので、順方向復号結果と逆方向復号結果から図2に示すように復号値を判定する。図2は、同期コードと同期コードとの間の復号値判定方法を示している。
まず、図2(a)に示すように順方向復号結果と逆方向復号結果で誤りが検出される符号語の位置(誤り検出位置)が交差しない場合は、誤りが検出されなかった復号結果のみを復号値として使用し、二つの誤り検出位置の復号結果は復号値として使用せず、放棄する。
また、図2(b)に示すように順方向復号結果と逆方向復号結果の誤り検出位置が交差する場合は、両方で誤りが検出されなかった復号結果を復号結果値として使用する。また、この場合には二つの誤り検出位置の符号語の間の復号結果は復号値として使用せず、放棄する。
また、図2(c)に示すように順方向復号結果および逆方向復号結果のうち片方向の復号結果にしか誤りが検出されない場合(この例では、順方向復号結果にのみ誤りが検出されている)は、誤り検出位置の符号語に対する復号値を放棄し、それ以後の符号語に対する復号値は逆方向の復号結果を使用する。
さらに、図2(d)に示すように同一の符号語について順方向復号結果および逆方向復号結果の両方に誤りが検出される場合は、図2(c)と同様に誤り検出位置の符号語に対する復号値は放棄し、それ以後の符号語に対する復号値としては逆方向の復号結果を使用する。
符号語テーブル作成部101では、情報シンボルの生起確率に基づいて順方向にも逆方向にも復号可能な符号の符号語テーブルを作成する。符号語テーブル作成部101によって作成された符号語テーブルは、符号化部114内の符号語テーブル102と、復号化部115内の順方向符号語テーブル110および逆方向符号語テーブル112に送られる。順方向復号木作成部111では、順方向符号語テーブル110から順方向復号木を作成する。また、逆方向復号木作成部113では、逆方向符号語テーブル112から逆方向復号木を作成する。
図3は、符号語テーブル作成部101の構成を示すブロック図である。符号選択部21は、情報シンボルの生起確率の情報を入力として、この情報に基づいて選択可能な符号系の中から最も平均符号長の小さいものを選択し、選択結果を符号語構成部22に送る。符号語構成部22では、符号語選択部21で選択された符号の符号語を構成して、符号語テーブルを作成する。符号語構成部22で作成された符号語テーブルは、符号化部114内の符号語テーブル102および復号化部115内の順方向符号語テーブル110に送られる。復号化部115内の逆方向符号語テーブル112には、順方向とは逆向きに記述された符号語テーブルが送られる。
符号選択部21では、入力された情報シンボルを生起確率が大きい順に並べ替えてS={S1 ,S2 ,…,Sn }とし、これらの情報シンボルSの生起確率P={p1 ,p2 ,…,pn }に基づいて、構成可能な符号の集合Cの中から、
を満足する符号cを選択する。ここで、Liは符号語構成部22より与えられる符号語の重みによって計算することができる符号長である。この場合の符号語の重みとは、符号語における“1”または“0”の数をいう。
以下、符号語構成部22における符号語の構成方法について述べる。
図4は、本実施形態による可変長符号の基となる重みが一定の2進符号系列の作り方の例を示している。図4(a)に示すように、start地点からend地点に至る格子状の有向グラフを形成する。この有向グラフについてstart地点からend地点までの経路をたどる際、左側の経路を選択した時は“0”、右側の経路を選択した時は“1”をそれぞれ対応させることにより、図4(b)に示す2進符号系列を生成する。この例では、符号長が5ビットで、重み(“1”の数)が2の2進符号系列を生成している。一般に、符号長がnビットで重みがwの2進符号系列は、n個からw個を選択する組み合わせの数だけ存在する。ここでは、5個から2個を選択する組み合わせの数=10個の2進符号系列が存在することになる。
図5は、符号語構成部22における順方向にも逆方向にも復号可能な可変長符号(以下、リバーシブル符号という)の符号語の第1の構成方法を示している。まず、図5の左側に示すように、符号長が短い順に(情報シンボル−1)個(この場合は、9個)だけ、図4の方法によって重み(“1”の数)が一定(この場合は、1個)の2進符号系列を作成する。次に、図5の右側に示すように、この2進符号系列のそれぞれの先頭と末尾に“1”を追加し、最も短い符号には0”を割り当てることによって、リバーシブル符号の符号語を構成する。このリバーシブル符号は、情報シンボルAに対しては符号“0”、それ以外の情報シンボルB〜Jに対しては符号が“1”から必ず始まり、“1”が全部で3個出現したら符号が終わる符号構成、つまり符号の区切り(符号長)が分かる構成となっている。
可変長符号がリバーシブル符号、すなわち順方向にも逆方向にも復号可能な符号であるための必要十分条件は、全ての符号語が順方向の復号木の葉と逆方向の復号木の葉に割り当てられることである。復号木の葉とは、復号木の末端、つまりそれより先には何も無い個所をいう。例えば、図5の可変長符号は、全ての情報シンボルA〜Jに対応する符号語が図6(a)に示す順方向の復号木の葉にも、図6(b)の逆方向の復号木の葉にも割り当てられることから、順方向にも逆方向にも復号可能であることが分かる。
図5の可変長符号の符号語構成方法のパラメータは、符号語中の“1”の数を重みとし、重みを2以上の自然数wとすることにより、様々な情報シンボルの生起確率に対応することができる。もちろん、ビットを反転させて、“0”の数を重みと考えて議論しても同様である。
図7は、符号語構成部22におけるリバーシブル符号の符号語の第2の構成方法を示している。まず、図7の左側に示すように、符号長が短い順に(情報シンボル/2)個だけ、図4の方法によって重み(“1”の数)が一定(この場合は、1個)の2進符号系列を作成する。次に、図7の中央に示すように、この2進符号系列のそれぞれの先頭と末尾に“1”を追加し、さらに図7の右側に示すように、各符号語をビット反転させた符号語を追加する。
この可変長符号では、各符号の最初にあるシンボルの個数をカウントすることによって符号長が分かる。図7の例では、各符号の最初にあるシンボルが4つ出現したら符号が終わる符号構成、つまり符号の区切り(符号長)が分かる符号構成となっている。
この図7の可変長符号は、全ての情報シンボルA〜Jに対応する符号語が図8(a)に示す順方向の復号木の葉にも、図8(b)の逆方向の復号木の葉にも割り当てられることから、順方向にも逆方向にも復号可能であることが分かる。
図9は、符号語構成部22におけるリバーシブル符号の符号語の第3の構成方法を示している。このリバーシブル符号は、“0”と“1”の数が同じ数になることで、符号語の符号長が分かるような符号構成となっている。すなわち、図9(a)に示す格子状の有向グラフを考え、この有向グラフについてstart地点から出発して左側の経路を選択した時は“0”、右側の経路を選択した時は “1”をそれぞれ対応させ、start地点を通る対角線上の黒丸の点に到達する経路を符号語として生成する。
この場合、全ての情報シンボルA〜Jに対応する符号語が図10(a)に示す順方向の復号木の葉にも、図10(b)の逆方向の復号木の葉にも割り当てられることから、順方向にも逆方向にも復号可能であることが分かる。
次に、本発明に係るリバーシブル符号の短縮化方法について説明する。情報シンボルの数、つまり可変長符号の符号数は有限であるため、可変長符号の一部の符号を短縮化することが可能である。ここで、短縮化とは他の符号の符号長を増やすことなく、一部の符号の符号長を縮めることをいう。図11は、リバーシブル符号の短縮化方法の一例を示している。
例えば、図7に示したリバーシブル符号は情報シンボルG,H,I,Jに対応する符号語の末尾の1ビットを削除しても、順方向および逆方向のいずれの方向からも復号可能である。これを利用して、図11では情報シンボルG,H,I,Jに対応する4つの符号語の符号長を短縮化している。
そして、この図11に示す可変長符号は、全ての情報シンボルA〜Jに対応する符号語が図12(a)に示す順方向の復号木の葉にも、図12(b)の逆方向の復号木の葉にも割り当てられることから、順方向にも逆方向にも復号可能であることが分かる。
次に、図13を参照して本発明に係るリバーシブル符号の拡張化方法について説明する。リバーシブル符号の拡張化は、各符号の先頭および末尾の少なくとも一方に等長符号を付加して、同一の符号長の符号語数を拡大することで実現することができる。図13の例では、左側に示すリバーシブル符号のそれぞれの末尾に2ビットの等長符号を付加している。この場合、リバーシブル符号の各符号は全体的に符号長が2ビット増加しているが、同じ符号長の符号語の数は4倍に拡大されている。一般に、nビットの等長符号を付加した場合、符号長は全体的にnビット増加するが、同じ符号長の符号語の数を2n 倍にすることができる。等長符号は、明らかにリバーシブル符号なので、等長符号をリバーシブル符号の先頭や末尾に付加しても、やはりリバーシブル符号である。
図14は、英語のアルファベットである情報シンボルに対して本発明により可変長符号化を行って得られたリバーシブル符号を公知例(特開平5−300027号公報)に開示されているリバーシブル符号と比較して示したものである。図14中に示される本発明に基づくリバーシブル符号は、図5で示した方法において符号語の重みを0とした時の符号を末尾に2ビットの等長符号を付加することによって拡張化した符号である。
この本発明に基づくリバーシブル符号は、順方向のみ復号可能な可変長符号の最適符号であるハフマン符号には劣るものの、公知例に開示されたリバーシブル符号と比較して平均符号長が短く、優れた性能を持っていることが分かる。これは、公知例のリバーシブル符号は順方向にのみ復号可能な可変長符号であるハフマン符号の末尾にビットを付加したものであるのに対して、本発明では余分なビットを付加することなく、初めからリバーシブル符号を構成するので、無駄なビットパターンが少ないことによる。
次に、本発明の他の実施形態を説明する。
図15は、本発明の他の実施形態に係る可変長符号化/復号化装置の構成を示すブロック図である。本実施形態の可変長符号化/復号化装置は、大きく分けて符号語テーブル作成部201、符号化部213、伝送系または蓄積系205および復号化部214からなる。
これら各部の機能について簡単に説明すると、符号語テーブル作成部201は情報シンボルの生起確率に基づき符号語テーブルを作成して、符号化部213内の符号語テーブル202に送り、さらに作成した符号語テーブルの符号語のパラメータを復号化部214内の復号グラフ・復号値テーブル作成部208に送る。符号化部213は、情報シンボルを可変長符号に符号化し、その可変長符号を符号化データとして伝送系また蓄積系205へ出力する。復号化部214は、伝送系または蓄積系205を介して入力されてきた符号化データを復号して元の情報シンボルを再生する。
次に、本実施形態の各部の詳細な構成と動作を説明する。
符号化部213において、入力された情報シンボルは符号化器203に入力される。符号語テーブル202は、符号語テーブル作成部201によって予め作成された情報シンボルと可変長符号の符号語とを対応させて格納している。但し、符号語テーブル202には入力され得る情報シンボルの全てに対応する符号語が格納されているわけではなく、比較的出現頻度の高い一部の情報シンボルに対応した符号語のみが格納されているものとする。符号化器203は符号語テーブル202に格納されている符号語の中から、入力された情報シンボルに対応した符号語を選択して符号化データとして出力する。
一方、符号化部213に符号語テーブル202に対応する符号語が存在しない情報シンボル、つまり出現頻度の比較的低い情報シンボルが入力されたときは、その情報シンボルに対応した固定長符号を固定長符号符号化部204で作成し、さらに符号語テーブル202中のエスケープ符号を固定長符号の先頭と末尾に付加して符号語とし、これを符号化データとして出力する。
こうして符号化部213内の符号化器203から出力された符号化データは、伝送系または蓄積系205を通して復号化部214に送られる。この際、符号化データには一定周期毎に同期コードが挿入される。
復号化部214は、同期コード検出部206、バッファ207、復号グラフ・復号値テーブル作成部208、順方向復号化器209、固定長復号化部210、逆方向復号化器211および復号値判定部212からなり、まず伝送系または蓄積系205より入力された符号化データから同期コード検出部206で同期コードを検出し、同期コードと同期コードの間の符号化データをバッファ207に蓄積する。順方向復号化器209では、バッファ207に蓄積された符号化データの先頭から復号を開始し、逆方向復号化器211では、バッファ207に蓄積された符号化データの末尾から復号を開始する。復号値判定部212では、順方向復号化器209によって得られた復号結果(順方向復号値という)と、逆方向復号化器211によって得られた復号結果(逆方向復号値という)から復号値を判定し、最終的な復号結果を出力する。
図16は、図15中の符号語テーブル作成部201において、固定長符号の先頭と末尾にエスケープ符号を付加して符号語を構成する方法を示した図である。図16(a)に示すように、符号語テーブル作成部201が作成する符号語は、情報シンボルが“A”以外のときは、“1”の数が3つ出現することで符号の区切りがわかるリバーシブル符号を基本としている。このリバーシブル符号を符号(1)と呼ぶこととする。
一方、図16(b)に示す符号(2)は、符号(1)の情報シンボル“C”に対応する符号語“1011”を固定長符号の先頭と末尾を示すためのエスケープ符号として、3ビットの固定長符号の先頭と末尾に付加することにより構成された符号語を符号(1)に新たに加えたものとなっている。但し、符号(2)のうち符号(1)に相当するリバーシブル符号の部分は、符号(2)でエスケープ符号として用いた符号語“1011”は使用せず、符号(1)により1個少ない情報シンボルA〜Iに対応した符号語のみを用いている。図16(a)(b)を比較して明らかなように、符号(2)は符号化できる情報シンボルの数が符号(1)の「10」から「17」に増えている。
このような符号(2)を復号するためには、図16(a)(b)から分かるように順方向から復号する場合も逆方向から復号する場合も、必ず符号(1)を一度復号することになり、また固定長符号は順方向からも逆方向からも復号可能であるため、符号(1)が順方向からも逆方向からも復号可能ならば、符号(2)も順方向からも逆方向からも復号可能となる。
従来のリバーシブル符号の場合は、入力され得る情報シンボルに対応する符号語を全て符号語テーブルとして符号化部213および復号化部214において用意しておく必要があった。これに対し、符号(2)によると、固定長符号の部分については、3ビットの2進符号として別途に固定長符号符号化部204および固定長符号復号化部210として用意できるので、符号語テーブル202には符号(1)の符号語だけを格納しておけばよい。したがって、従来のリバーシブル符号と比較して、可変長符号化/復号化装置の記憶量を大幅に削減することが可能となる。
復号グラフ・復号値テーブル作成部208は、Shalkwijkのアルゴリズムを基にした復号グラフと、復号値テーブルを作成し、順方向復号化器209および逆方向復号化器211は、これらの復号グラフおよび復号値テーブルに基づいて復号化を行う。
図17は、重み一定の2進符号系列の数え上げの方法を示している。重み一定の2進符号系列の数え上げを行うアルゴリズムとしては、J.P.M.Shalkwijk:“An algorithm for source coding”,IEEE Trans.Infrom Theory,vol.IT-18,no.3,pp.395-399,May 1972.がShalkwijkのアルゴリズムとしてよく知られている。Shalkwijkのアルゴリズムでは、図17(a)に示すように「パスカルの三角形」を基本とした、START地点からEND地点に至る格子状の有向グラフを形成する。各節点に数字で示された値は、START地点の節点の値を1として、各節点に入ってくる2つの矢の起点にある節点の値の合計値となっている。すなわち、各節点の値はパスカルの三角形によって決定される。
そして、図17(a)の有向グラフについて、入力される情報シンボルに従ってSTART地点からEND地点までの経路をたどる際に、左側の経路(矢)を選択したときには符号語の“0”、右側の経路(矢)を選択したときには符号語の“1”をそれぞれ対応させることにより、重み2の2進符号系列を生成することができる。ここで、“0”を選択したときに矢の終点にある節点の値から矢の起点にある節点の値を引いた値を合計した値が、その2進符号系列の同一符号長の符号語についての順序値となる。例えば入力される情報シンボルが“01001”であれば、3つある“0”に対して節点の値の差分の合計である(1−1)+(3−2)+(4−3)=2が順序値となる。ここで、順次値とは同一符号長の異なる符号語を順序付けるための値である。図17(b)は、この場合の情報シンボルと順序値との関係を示している。
このShalkwijkのアルゴリズムを符号化に適用した例は公知であり、その場合は上記の順序値に相当する値を2進符号に変換することによって符号化を行う。これに対し、本実施形態ではこのアルゴリズムを以下に説明するように復号化に用いる。
すなわち、復号グラフ・復号値テーブル作成部208では、上述したShalkwijkのアルゴリズムを基にして有向グラフを復号グラフとして作成する。すなわち、この復号グラフはパスカルの三角形によって決まる値を節点の値とし、符号語の“1”および“0”を矢とした有向グラフであり、その一例を図18 (a)に示す。図18(b)は、この復号グラフを用いた順方向復号化器208および逆方向復号化器211における復号値の計算方法の一例を示している。
図16(a)に示した符号(1)は、先頭が“0”以外のときは“1”が3つ出現した地点で区切りが分かるリバーシブル符号である。この符号(1)のリバーシブル符号の復号値を計算する際には、順方向についてはリバーシブル符号の先頭が“0”ならば復号値を0とし、それ以外のときは先頭と末端の“1”を削除した後、Shalkwijkのアルゴリズムによって順序値を計算する。今、復号しようとしている符号語より符号長の短い符号語の数は、図18(a)におけるEND地点の右斜めの節点の値の合計+1となるので、その値を順序値に足したものが復号値となる。
一方、逆方向については上述の順方向の場合と同様に、まずリバーシブル符号の先頭が“0”ならば復号値を0とし、それ以外のときは先頭と末端の“1”を削除し、さらに残りの部分を反転させた後、Shalkwijkのアルゴリズムで順序値を計算する。そして、この順序値にEND地点の右斜め上にある節点の合計+1を足したものを復号値とする。
図18(a)(b)を参照して具体的に説明すると、例えばリバーシブル符号の復号対象の符号語が“10101”ならば、まず先頭と末端の“1”を削除して“010”とする。この“010”に対してShalkwijkのアルゴリズムで順序値を求めると、2つある“0”に対して、(1−1)+(3−2)=1となる。この場合のEND地点の斜め右上にある節点の値の合計は1+2=3なので、この値+1(=4)を順序値(=1)に加えて、復号値が5として求まることになる。
このような復号グラフを用いて復号化を行うと、記憶量を大きく低減することができる。図19(a)(b)は、従来の復号木を用いる復号化方法と、本実施形態による復号グラフを用いる復号化方法で必要な記憶量の違いを示した図である。両者を節点の数で比較すると、各節点から出る矢の数は共に2つで同じであるが、各節点に入ってくる矢は図19(a)の復号木の場合、必ず1つである。これに対して、図19(b)の復号グラフの場合は、各節点に2つの矢が入ってくるので、その分だけ同じ符号語で必要とする節点の総数が少なくなる。この例では、図19(a)の復号木が15個の節点を必要としているのに対し、図19(b)の復号グラフでは8個の節点で済む。従って、復号グラフを用いる本実施形態の復号化方法は、従来の復号木を用いる方法よりも必要な記憶量が少なくなるという利点がある。
また、本実施形態では図16(b)に示したエスケープ符号を付加した符号 (2)を復号するために、図20(a)に示す符号(1)の復号値テーブルと、図20(b)に示す固定長符号の復号値テーブルの2つを用意し、符号(1)の復号値テーブルでエスケープ符号が復号されたときは、固定長符号の復号値テーブルを読みに行く。例えば、符号語が“10110011011”の場合、先頭の“1011”、すなわちエスケープ符号が復号されたら、次の3ビット“001”は固定長符号であると見なして固定長符号復号化部210で復号を行う。この場合、“001”の復号値として1が得られるので、図20(a)の固定長符号の復号値テーブルから、復号結果は情報シンボル“K”となる。
次に、本発明を動画像符号化/復号化器に適用した一実施形態について説明する。図21は、上述した可変長符号化/復号化装置が組み込まれた動画像符号化/復号化器の概略的構成を示すブロック図である。
図21(a)に示す動画像符号化器709において、情報源符号化器702で符号化されたデータは、動画像多重化部703で可変長符号化、通信路符号化および多重化等が行われ、さらに伝送バッファ704で伝送速度の平滑化がなされた後に、符号化データとして伝送系または蓄積系705に送り出される。符号化制御部701は、伝送バッファ704のバッファ量を考慮して、情報源符号化器702および動画像多重化部703の制御を行う。
一方、図21(b)に示す動画像復号化器710においては、伝送系または蓄積系705からの符号化データが受信バッファ706に一旦溜められ、動画像多重化分離部707で符号化データの多重化分離、通信路符号復号化および可変長符号復号化が行われた後、情報源復号化器708に送られ、最終的に動画像が復号化される。
図22は、図21における動画像符号化器709および動画像多重化分離部707での動画像符号化方式のシンタックスを示している。図22(a)に示すピクチャ階層のうち、上位階層にはマクロブロックのモード情報や動きベクトル情報やINTRA DCなどのDCT係数以外の情報を配し、下位階層にはDCT係数情報を配しており、下位階層部分に本発明によるリバーシブル符号を適用している。
図23(a)(b)は、図21における動画像多重化部703および動画像多重化分離部707のより詳しい構成を示すブロック図である。図23(a)に示す動画像多重化部703においては、図21の情報源符号化器702からの符号化データのうち、マクロブロックのモード情報や動きベクトル情報やINTRA DCなどの、DCT係数以外の情報は上位階層として、上位階層可変長符号化器901で通常の可変長符号化が行われた後、さらに上位階層通信路符号化器902で冗長度は大きいが訂正能力の高い誤り訂正検出符号により通信路符号化され、多重化部905に送られる。
一方、情報源符号化器702からの符号化データのうち、DCT係数は下位階層可変長符号化器903でリバーシブル符号に符号化され、さらに下位階層通信路符号化器904で冗長度の少ない誤り訂正検出符号により通信路符号化された後、多重化部905に送られる。多重化部905では、上位階層の符号化データと下位階層の符号化データを多重化し、伝送バッファ704に送る。
図23(b)に示す動画像多重化分離部707においては、まず受信バッファ706からの符号化データが多重化分離部906で上位階層と下位階層に分離される。上位階層の符号化データは上位階層通信路復号化器907で復号され、その復号結果は上位階層可変長復号化器909に送られる。下位階層の符号化データは下位階層通信路復号化器908で復号され、その復号結果は下位階層可変長復号化器910に送られる。
下位階層可変長復号化器910はリバーシブル符号の復号を行い、復号結果を情報源復号化器708および上位階層可変長復号化器909に送る。上位階層可変長復号化器909は、上位階層の符号化データである可変長符号の復号を行うと共に、下位階層可変長復号化器910の復号結果を基に符号化結果の書き換えを行う。
ここで、図23(a)中の下位階層可変長符号化器903は図15中の符号化部213に、図23(b)中の下位階層可変長復号化器910は図15中の復号化部214にそれぞれ対応している。
本実施形態の動画像符号化/復号化器に見られるように、符号化方式に図22に示したようなシンタックスがある場合には、可変長符号そのものを両方向から復号できるのみでなく、シンタックス的にも両方向から復号できるようにする必要がある。本実施形態では、以下に説明する符号語テーブルを用いることによって、この要求を実現している。
図24〜図28は、下位階層可変長符号化器903で用いるDCT係数の可変長符号の符号語テーブルの一例を示している。また、図29はエスケープ符号の符号語テーブルを示している。
情報源符号化器702では、量子化後の8×8のDCT係数のブロックについてはブロック内のスキャンを行って、LAST(0:ブロックの最後でない非零係数、1:ブロックの最後の非零係数)、RUN(非零係数までの零ランの数)およびLEVEL(係数の絶対値)を求め、動画像符号化器709に送る。
動画像符号化器709内の下位階層可変長符号化器903は、図24〜図25に示すINTRAおよびINTERの非LAST係数、RUN、LEVELにリバーシブル符号(VLC_CODE)を対応させた非LAST係数の符号語テーブル(第1の符号語テーブル)と、図26〜図27に示すINTRAおよびINTERのLAST係数、RUN、LEVELにリバーシブル符号(VLC_CODE)を対応させたLAST係数の符号語テーブル(第2の符号語テーブル)を持っている。そして、モード情報に基づいてINTRAのときはINTRAの非LAST係数とLAST係数の符号語テーブル、INTERのときはINTERの非LAST係数とLAST係数の符号語テーブルをそれぞれ選択して符号化を行う。なお、図26〜図27においてVLC_CODEの最終ビットの“S”はLEVELの符号を表し、“S”が“0”のときLEVELの符号は正、“1”のとき負である。
また、この符号語テーブルに存在しない係数は、図29に示すようにRUNとLEVELの絶対値を固定長符号に符号化し、この固定長符号の先頭と末端にエスケープ符号を付加し、エスケープ符号の最終ビットでLAST係数とLEVELの正負を区別できるように符号化する。図28は、このエスケープ符号の符号語テーブルであり、エスケープ符号として用いられているVLC_CODEの最終ビットの“t”は、固定長符号の先頭に付加されたときはLAST係数か否かを表し、これが“0”のときは非LAST係数、“1”のときはLAST係数である。また、“t”は固定長符号の末尾に付加されたときはLEVELの符号を表し、これが“0”のときLEVELの符号は正、“1”のときは負である。
図30は、本実施形態における符号化データの例を示している。同図に示されるように、下位階層において順方向から復号を行うときは、8×8画素のDCT係数のブロックの末尾に必ずLAST係数の符号が存在するため、ブロックの末尾を判定することができる。一方、逆方向から復号を行うときは、1つアドレスが前のブロックのLAST係数の符号が出現することにより、ブロックの先頭を判定できる。この符号は、LAST係数がINTRAモードとINTERモードで共通化されているため、マククロブロック毎にモードが存在していてもブロックの先頭を判定することができる。
下位階層の最初のブロックについては、予め下位階層可変長符号化器903で下位階層の先頭にダミーのLAST係数を符号化しておくか、あるいは、下位階層可変長復号化器910で、次のフレームの同期符号までのビット数から予め下位階層のビット数を計算しておき、これを復号したビット数と比較するか、あるいは、下位階層可変長復号化器910内のバッファで下位階層の先頭にダミーのLAST係数を挿入する方法をとることにより、逆方向に復号したときに下位階層の先頭を判定することができる。
図24〜図27に示した符号語テーブルに格納されたリバーシブル符号は、順方向の場合、先頭の1ビットが“0”ならば、“0”が2つ出現するまで読み、“1”ならば、“1”が2つ出現するまで読み、その次の1ビットがLEVELの正負を表す最終ビットとなることが分かる。逆方向の場合は、最初の1ビットがLEVELの正負を表しており、次の1ビットが“0”ならば、“0”が2つ出現するまで読み、“1”ならば、“1”が2つ出現するまで読めばよい。
図31は、本実施形態における下位階層可変長符号化器903で用いるDCT係数の可変長符号に適用したリバーシブル符号を復号するための復号グラフを示している。順方向からみて符号語の先頭ビットと末尾の2ビットを除いた符号化データについて、この復号グラフによって復号値を計算することができる。
この復号グラフは、先頭のビットが“0”ならば、“0”が現れれば右の矢を進み、“1”が現れれば左の矢を進むこととする。先頭のビットが“1”ならば、“1”が現れれば右の矢を進み、“0”が現れれば左の矢を進むこととする。
同一の符号長の2進符号系列についての順序値を求めるには、先に説明したShalkwijkのアルゴリズムに従って、左側の矢を選択したときに矢の終点の節点の値から起点の節点の値を引いた値の合計値をその符号長での順序値とすればよい。
一方、復号値を求めるには、先頭のビットが“0”ならば、終端の節点の右斜め上の節点の値の合計値の2倍を順序値に足した値を復号値とすればよい。先頭ビットが“1”ならば、終端の節点の右斜め上の節点の値の合計値の2倍+終端の節点の値に順序値を足した値を復号値とればよい。
例えば、復号対象の符号列が“0110101”ならば、まず順方向からみて先頭の1ビットと末尾の2ビットを除いて、“1101”とする。先頭ビットが“0”なので、復号グラフで“0”が現れれば右の矢を進み、“1”が現れれば左の印を進むことになる。この場合、左の矢を進んだときの節点の差分は(1−1)+(1−1)+(4−3)=1なので、順序値は1である。最上位ビットが“0”なので、終端の節点の右斜め上にある節点の合計の2倍(1+2+3)×2=12に順序1を加えると13となり、この符号語の復号値は13として求められることになる。
図32〜図34は、下位階層可変長復号化器910で用いる復号値テーブルの一例であり、図32〜図33はINTRAおよびINTERの非LAST係数、RUN、LEVELに復号値を対応させた非LAST係数の復号値テーブルであり、図34(a)(b)はINTRAおよびINTERのLAST係数、RUN、LEVELに復号値を対応させたLAST係数の復号値テーブルである。また、図35はエスケープ符号の復号値テーブルである。
この例では、例えば復号値13は図34(a)で分かるように、LAST係数で、RUN数は3、LEVELの絶対値が1であることが分かり、また最下位ビットが“1”であることから、LEVELは負であることが分かる。さらに、図35で分かるように、復号値41が復号された場合は、エスケープ符号が復号されたと判定する。このエスケープ符号の最後のビットでLAST係数か非LAST係数かの判定を行い、その後の13ビットについて固定長符号復号化部210でRUNとLEVELの絶対値を復号した後、再びエスケープ符号を復号し、最後のビットでLEVELの正負を決定する。
一例として、符号化対象の符号列が“110000010000111000101111000010”の場合を考える。この場合、先頭のエスケープ符号“11000010”の最終ビットが“0”なので、非LAST係数であり、その後の13ビットの固定長符号を計算する。この13ビットのうち上位6ビットがRUNを表すので、“000111”でRUNは7、下位7ビットがLEVELの絶対値を表すので、“0001011”でLEVELの絶対値は12、末尾のエスケープ符号“11000010”の最終ビットが“0”なのでLEVELは正、というように復号を行うことができる。
復号値判定部212では、このようにして順方向復号化器209によって得られた復号結果(順方向復号結果という)と、逆方向復号化器211によって得られた復号結果(逆方向復号値という)から復号値を判定し、最終的な復号結果を出力する。すなわち、復号値判定部212では符号化データに誤りがあると、下位階層通信路復号化器908の復号結果、あるいは、符号語として存在しなかったビットパターンが生じることから、誤りの存在が分かるので、これらの順方向復号結果と逆方向復号結果から、図36に示すようにして復号値を判定する。なお、図36は下位階層の復号値判定方法を示している。
まず、図36(a)に示すように順方向復号結果と逆方向復号結果で誤りが検出されるマクロブロックの位置(誤り検出位置)が交差しない場合は、誤りが検出されなかったマクロブロックの復号結果のみを復号値として使用し、二つの誤り検出位置の復号結果は復号値として使用しない。そして、上位階層のモード情報の復号結果に基づいて、INTRAマクロブロックについては前フレームをそのまま表示するように、INTERマクロブロックについては前フレームより動き補償のみで表示するように、上位階層の復号結果を書き換える。
また、図36(b)に示すように順方向復号結果と逆方向復号結果で誤りが検出位置が交差する場合は、両方で誤りが検出されなかった復号結果を復号結果値として使用する。また、この場合には二つの誤り検出位置の符号語の間の復号結果は復号値として使用せず、上位階層のモード情報の復号結果に基づいて、INTRAマクロブロックについては前フレームをそのまま表示するように、INTERマクロブロックについては前フレームより動き補償のみで表示するように、上位階層の復号結果を書き換える。
また、図36(c)に示すように順方向復号結果および逆方向復号結果のうち、片方向の復号結果にしか誤りが検出されない場合(この例では、順方向復号結果のみ誤りが検出されている)は、誤り検出位置のマクロブロックは復号値として使用せず、上位階層のモード情報の復号結果に基づいて、INTRAマクロブロックについては前フレームをそのまま表示するように、INTERマクロブロックについては前フレームより動き補償のみで表示するように、上位階層の復号結果を書き換える。それ以後のマクロブロックに対する復号値は、逆方向の復号結果を使用する。
さらに、図36(d)に示すように同一のマクロブロックで順方向復号結果および逆方向復号結果の両方に誤りが検出される場合は、誤り検出位置のマクロブロックの復号値は放棄して復号値として使用せず、上位階層のモード情報の復号結果に基づいて、INTRAマクロブロックについては前フレームをそのまま表示するように、INTERマクロブロックについては前フレームより動き補償のみで表示するように、上位階層の復号結果を書き換え、それ以後のマクロブロックに対する復号値は逆方向の復号結果を使用する。
マクロブロックの符号化/復号化の順序については、上記実施形態以外の方法でもよく、例えば誤りがあったときに、復号画像のうちより重要な画面中央部が救済されるように、図37に示すような順序とする方法でもよい。すなわち、両方向から復号することを前提とすると、同期符号と同期符号の間の符号化データのうち、最初の方の部分と最後の方の部分が正しく復号される確率が高いので、これの部分が中央部にくるように順序を決めるのである。
なお、上記実施形態ではDCT係数の可変長符号化に本発明を適用したが、他の情報シンボルについても同様の可変長符号化を適用できることは、言うまでもない。
また、上記実施形態では2元符号のみの議論を示したが、多元符号にも拡張することが容易であり、同様な効果を得ることができる。
最後に、本発明の応用例として、本発明による可変長符号化/復号化装置を適用した画像送受信装置の実施形態を図38を用いて説明する。パーソナルコンピュータ(PC)1001に備えら付けられたカメラ1002より入力された画像信号は、PC1001に組み込まれた可変長符号化装置によって符号化される。この場合の情報シンボルは、これに限るものではないが、例えば入力画像信号または入力画像信号と予測画像信号との差である予測誤差信号をDCT回路によって離散コサイン変換し、さらに量子化回路により量子化して得られたDCT係数データなどである。可変長符号化装置から出力される符号化データは、他の音声やデータの情報と多重化された後、無線機1003により無線で送信され、他の無線機1004によって受信される。無線機1004で受信された信号は、画像信号の符号化データおよび音声やデータの情報に分解される。これらのうち、画像信号の符号化データはワークステーション(EWS)1005に組み込まれた可変長符号復号化装置によって復号され、EWS1005のディスプレイに表示される。
一方、EWS1005に備え付けられたカメラ1006より入力された画像信号は、EWS1006に組み込まれた可変長符号化装置を用いて上記と同様に符号化される。符号化データは、他の音声やデータの情報と多重化され、無線機1004により無線で送信され、無線機1003によって受信される。無線機1003によって受信された信号は、画像信号の符号化データおよび音声やデータの情報に分解される。これらのうち、画像信号の符号化データはPC1001に組み込まれた可変長符号復号化装置によって復号され、PC1001のディスプレイに表示される。
本発明の可変長符号化/復号化装置は、情報シンボルの出現頻度に応じた符号長を有し、従来と比較して無駄なビットパターンが少なくて効率がよく、しかも順方向にも逆方向にも復号が可能なリバーシブルの可変長符号を構成することができるので、図38に示した無線伝送路のような誤りが多い伝送路を用いた送受信装置において特に有効である。
以上実施形態で説明したように、本発明の可変長符号化/復号化装置は、従来と比較して、少ない記憶量で復号することができ、従来適用することのできなかったような情報シンボル数が大きな符号化に対しても適用することができる。
具体的には、動画像符号化/復号化装置にも適用することが可能であり、誤りに強い動画像符号化/復号化装置を提供することができる。