以下に本発明の実施の形態を説明するが、本明細書に記載の発明と、発明の実施の形態との対応関係を例示すると、次のようになる。この記載は、本明細書に記載されている発明をサポートする実施の形態が本明細書に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、発明に対応するものとして、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その発明に対応するものではないことを意味するものではない。逆に、実施の形態が発明に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その発明以外の発明には対応しないものであることを意味するものでもない。
さらに、この記載は、本明細書に記載されている発明の全てを意味するものではない。換言すれば、この記載は、本明細書に記載されている発明であって、この出願では請求されていない発明の存在、すなわち、将来、分割出願されたり、補正により出現、追加される発明の存在を否定するものではない。
即ち、本発明の符号化装置は、画像データである入力データであって、複数の入力データよりダイナミックレンジと最小値を演算し、演算結果として出力する演算手段(例えば、図8のVQエンコーダ51)と、演算手段の演算結果に基づいて、入力データをコードに変換するコード変換手段(例えば、図8のVQエンコーダ51)と、演算結果とコードとの排他的論理和を求めることにより、演算結果をコードでスクランブル処理するスクランブル手段(例えば、図8のスクランブラ53)と、スクランブル手段によりスクランブル処理された演算結果と、コードとを用いて、入力データを符号化する符号化手段(例えば、図8の合成部54)とを備えることを特徴とする。
本発明の符号化方法は、画像データである入力データであって、複数の入力データよりダイナミックレンジと最小値を演算し、演算結果として出力する演算ステップ(例えば、図9のフローチャートのステップS42の処理)と、演算ステップの処理での演算結果に基づいて、入力データをコードに変換するコード変換ステップ(例えば、図9のフローチャートのステップS42の処理)と、演算結果とコードとの排他的論理和を求めることにより、演算結果をコードでスクランブル処理するスクランブルステップ(例えば、図9のフローチャートのステップS45の処理)と、スクランブルステップの処理でスクランブル処理された演算結果と、コードとを用いて、入力データを符号化する符号化ステップ(例えば、図9のフローチャートのステップS46の処理)とを含むことを特徴とする。
本発明の復号装置は、画像データである入力データであって、複数の入力データよりダイナミックレンジと最小値を演算することにより求められた演算結果に基づいて、入力データが変換されたコードと、演算結果とコードとの排他的論理和を求めることにより、コードによりスクランブル処理された演算結果とを含む符号化された入力データを復号する復号装置であって、符号化された入力データに含まれるコードにより、スクランブル処理された演算結果をデスクランブル処理するデスクランブル手段(例えば、図12のデスクランブラ72)と、符号化された入力データに含まれるコードのエラーを検出するエラー検出手段(例えば、図12のエラー検出部77)と、デスクランブル手段によりデスクランブル処理された演算結果を記憶する記憶手段(例えば、図12のメモリ73)と、記憶手段に記憶されている、エラー検出手段によりエラーが検出されなかった場合の処理で使用された演算結果に基づいて、スクランブル処理された演算結果より、コードを推定する推定手段(例えば、図12のエラー処理部74)と、エラー検出手段のエラー検出結果に基づいて、デスクランブル手段によりデスクランブル処理された演算結果と、符号化された入力データに含まれるコードより、または、デスクランブル手段によりデスクランブル処理された演算結果と、推定手段により推定されたコードより、符号化された入力データを復号する復号手段(例えば、図12のVQデコーダ76)とを備えることを特徴とする。
本発明の復号方法は、画像データである入力データであって、複数の入力データよりダイナミックレンジと最小値を演算することにより求められた演算結果に基づいて、入力データが変換されたコードと、演算結果とコードとの排他的論理和を求めることにより、コードによりスクランブル処理された演算結果とを含む符号化された入力データを復号する復号装置の復号方法であって、符号化された入力データに含まれるコードにより、スクランブル処理された演算結果をデスクランブル処理するデスクランブルステップ(例えば、図13のフローチャートのステップS62の処理)と、符号化された入力データに含まれるコードのエラーを検出するエラー検出ステップ(例えば、図13のフローチャートのステップS64の処理)と、デスクランブルステップの処理でデスクランブル処理された演算結果を記憶する記憶ステップ(例えば、図13のフローチャートのステップS66の処理)と、記憶ステップの処理により記憶されている、エラー検出ステップの処理でエラーが検出されなかった場合の処理で使用された演算結果に基づいて、スクランブル処理された演算結果より、コードを推定する推定ステップ(例えば、図13のフローチャートのステップS63の処理)と、エラー検出ステップの処理でのエラー検出結果に基づいて、デスクランブルステップの処理でデスクランブル処理された演算結果と、符号化された入力データに含まれるコードより、または、デスクランブルステップの処理でデスクランブル処理された演算結果と、推定ステップの処理で推定されたコードより、符号化された入力データを復号する復号ステップ(例えば、図13のフローチャートのステップS68の処理)とを含むことを特徴とする。
図1は、本発明を適用した通信システムの一実施の形態の構成を示す図である。
符号化装置1は、入力データである画像データを画像の画素のブロック毎に、ADRC(Adaptive Dynamic Range Coding)符号化するか、または、VQ(Vector Quantization)符号化して、出力する。
復号装置2は、符号化装置1により符号化された画像データを取得すると、画像中の画素のブロック毎の符号化方式に対応して、ADRC復号するか、または、VQ復号することにより、符号化データより入力データである画像データを再生し、図示せぬディスプレイなどに表示する。
次に、符号化装置1の構成について説明する。
ブロック化部11は、入力画像よりVQ符号化用の画素のブロックを、順次(例えば、ラスタスキャン順に)抽出して、VQ符号化部12に供給すると共に、ADRC符号化用の画素のブロックを順次(例えば、ラスタスキャン順に)抽出して、ADRC符号化部13に供給する。例えば、VQ符号化用の画素のブロック(以下、VQ符号化用ブロックとも称する)は、4画素×4画素の画素のブロックであり、ADRC符号化用の画素のブロック(以下、ADRC符号化用ブロックとも称する)は、8画素×8画素である。尚、各符号化方式に対応する画素のブロックのサイズは、これに限るものではない。
VQ符号化部12は、ブロック化部11より供給されたVQ符号化用ブロックの各画素の画素値に基づいてコードブック15を参照して、ブロック毎にVQ符号化し、符号化したデータを選択部14に供給する。尚、VQの符号化処理については、詳細を後述する。
ADRC符号化部13は、ブロック化部11より供給されたADRC符号化用の画素のブロックの各画素の画素値を用いて、ブロック毎にADRC符号化し、符号化したデータを選択部14に供給する。
選択部14は、VQ符号化部12より供給されたVQ符号化された符号化データと、ADRC符号化された符号化データのダイナミックレンジ(以下、DRとも称する)を所定の閾値と比較し、比較結果に応じてADRC符号化データか、または、VQ符号化データを出力する。
結果として、選択部14により選択される符号化方式で、ブロック毎に符号化方式が異なる符号化データが生成されることになり、例えば、1フレームの画像が図2で示されるようにブロック毎に符号化方式が異なる形式で、画像が符号化される。すなわち、図2においては、斜線が付されたマス目が、4画素×4画素のVQ符号化用のブロックであり、白のマス目が、8画素×8画素のADRC符号化用のブロックである。より詳細には、ADRC符号化データが選択されると、8画素×8画素のブロック分のADRC符号化データが用いられるが、VQ符号化データが選択されると、8画素×8画素分に相当する4個のVQ符号化用ブロックのVQ符号化データが用いられることになる(VQ符号化用ブロックは4画素×4画素のブロックであるので、同等の領域を符号化するには4ブロック分必要となる)。
図2においては、選択部14の選択結果により、1の画像中において、10個のADRC符号化用ブロックに属する画素がADRC符号化され、さらに、56個のVQ符号化用ブロックに属する画素がVQ符号化されていることが示されている。
次に、復号装置2の構成について説明する。
判別部21は、符号化装置1より供給された符号化データを取得すると、それらの符号化データが、VQ符号化されたデータであるのか、または、ADRC符号化されたデータであるのかを判別し、VQ符号化されたデータであると判定した場合、取得した符号化データをVQ復号部22に供給する。また、取得した符号化データが、ADRC符号化データであると判定された場合、判別部21は、取得した符号化データをADRC復号部23に供給する。
VQ復号部22は、判別部21より供給された符号化データをコードブック25に基づいて、VQ復号して合成部24に供給する。尚、コードブック25は、コードブック15と同様のものである。ADRC復号部23は、判別部21より供給された符号化データをADRC復号して合成部24に供給する。合成部24は、VQ復号部22より供給されたVQ復号された入力画像のデータをVQ符号化ブロックに対応付けて記憶すると共に、ADRC復号部23より供給されたADRC復号された入力画像のデータをブロック毎に記憶し、最終的に1枚の画像を構成するデータが全て揃ったところで、それらの復号された入力画像のデータを合成して、入力画像を生成して出力し、図示せぬディスプレイなどに表示する。
次に、図3のフローチャートを参照して、符号化装置1による符号化処理について説明する。
ステップS1において、ブロック化部11は、VQ符号化部12に対しては、VQ符号化用ブロック単位で入力画像の画素より抽出して供給し、ADRC符号化部13に対しては、ADRC符号化用ブロック単位で入力画像の画素より抽出して供給する。
ステップS2において、ADRC符号化部13は、ブロック化部11より供給されたADRC符号化用ブロックの各画素の画素値を用いて、各画素をADRC符号化し、選択部14に供給する。
すなわち、ADRC符号化とは、入力された画像のデータのダイナミックレンジ(DR)に適応した可変長の符号を出力する可変長符号化である。そこで、まず、ADRC符号化部13は、供給されたADRC符号化用ブロックに含まれる画素値の最大値および最小値の差であるダイナミックレンジを検出する。
すなわち、例えば、ADRC符号化用ブロックが、図4で示されている場合、以下のように計算される。尚、図4においては、説明の都合上、ADRC符号化用ブロックは、各画素P1乃至P4からなる2画素×2画素のブロックであり、各画素の画素値は、P1乃至P4で示されるものとする。例えば、図4の各画素の画素値が図5で示されるような場合、DR(=MAX−MIN)は、最大値である画素P4の画素値P4と、最小値である画素P3の差分(P4−P3)となる。尚、図5においては、MAXは、画素P1乃至P4の画素値の最大値を示しており、MINは、最小値を示している。
さらに、ADRC符号化部13は、求められたDRに基づいて、各画素値を元の量子化ビットよりも少ないビット数で再量子化する。すなわち、図5で示されるような場合、DRが最も小さい場合、1ビットで再量子化すると、各画素のコードは、閾値th1(=MIN+DR/2)との比較により決定することになる。すなわち、閾値th1よりも大きい場合、コードを「1」とし、閾値th1よりも小さい場合、コードを「0」とすると、画素P1の画素値のコードは「0」、画素P2の画素値のコードは「1」、画素P3の画素値のコードは「0」、さらに、画素P1の画素値のコードは「1」となる。
そして、ADRC符号化部13は、これらの各画素のコードを順次配列し、ブロック単位のADRCコードを生成する。図5の場合、ADRC符号化部13は、例えば、画素P1乃至P4の順序でコードを配列して、1ビットのADRCコードを生成するものとすると、図4のブロックのADRCコードは、「0101」となる。
ビット数は、DRに比例して設定されるものであり、例えば、DRが大きく、量子化ビットを2にすると、図5の場合、閾値th0(=MIN+1×DR/4=MIN+1×DR/(22))(DR/(2n)は、量子化幅、nは、量子化ビット数)よりも小さいとき、コードを「00」とし、閾値th0以上で閾値th1(=MIN+2×DR/4)よりも小さいとき、コードを「01」とし、閾値th1以上で閾値th2(=MIN+3×DR/4)よりも小さいとき、コードを「10」とし、閾値th2以上のとき、コードを「11」とすると、画素P1のコードは、「00」となり、画素P2のコードは、「10」となり、画素P3のコードは、「00」となり、画素P4のコードは、「11」となる。
従って、このような場合、ADRC符号化部13は、図4のブロックの符号化コードとして「00100011」を生成することになる。
さらに、DRが大きくなるに従って、再量子化に用いられるビット数は、増大し、例えば、最大4ビットに割り付けられる。
ADRC符号化は、このように、ダイナミックレンジが小さいほど、少ないビット数で再量子化することができ、量子化歪の増大を抑えつつ、画素の画素値の冗長度のみを除去して、更にデータ量を少なくすることが可能である。
尚、ADRC符号化部は、生成したADRCコードに、DRとMINの情報を付してADRC符号化データとして選択部14に供給する。
ステップS3において、VQ符号化部12は、ブロック化部11より供給されたVQ符号化用ブロックの各画素の画素値を用いて、各画素をVQ符号化し、選択部14に供給する。
すなわち、VQ符号化部12は、VQ符号化用ブロックの複数の画素をまとめてベクトルとして量子化する。
すなわち、VQ符号化部12は、例えば、VQ符号化用ブロックが図4で示されるような場合、ADRCコードに変換されたコードを10進数にした値を標本化し、これを連続した複数の標本値を要素とするベクトルVbを生成する。すなわち、図4の場合、上述したように、画素P1乃至P4が2ビットでADRC符号化されると、それぞれ、「00」、「10」、「00」、および「11」となる。そこで、これらを10進変換すると、画素P1に対応するコードC(P1)は「0」、画素P2に対応するコードC(P2)は、「1」、画素P3に対応するコードC(P3)は「2」、画素P4に対応するコードC(P4)は「3」となる。従って、VQ符号化部12は、図4のVQ符号化用ブロックに対して、標本値からなるベクトルVb=(C(P1),C(P2),C(P3),C(P4))は、Vb=(C(P1),C(P2),C(P3),C(P4))=(0,1,0,3)となる。
次に、VQ符号化部12は、コードブック15を参照し、登録された複数の代表ベクトルと、計算により求められたベクトルVbと最も近い代表ベクトルに対応するVQコードを、そのブロックのVQコードとして決定する。
ここで、コードブック15とは、例えば、図6で示されるようなものである。図6においては、左側にVQコードが示されており、今の場合、上から「00」、「01」、「10」、および、「11」と示されている。また、右側には、各VQコードに対応する代表ベクトルの各要素が示されており、今の場合、代表ベクトルは、上から(C(P1),C(P2),C(P3),C(P4))=(5,7,2,10),(6,7,10,11),(2,9,10,12),(0,1,0,3)と示されている。すなわち、図6においては、VQコード「00」に対応する代表ベクトルは、(5,7,2,10)であり、VQコード「01」に対応する代表ベクトルは、(6,7,10,11)であり、VQコード「10」に対応する代表ベクトルは、(2,9,10,12)であり、VQコード「11」に対応する代表ベクトルは、(0,1,0,3)であることが示されている。
図6の場合、VQ符号化部12は、VQコード「11」に対応する代表ベクトルと、計算により求められたベクトルVbは、同一であるので、VQコード「11」に対応する代表ベクトルを、ベクトルVbに最も近い代表ベクトルとして選択し、対応するVQコードとして「11」が選択されて、VQ符号化データとして選択部14に供給されることになる。
尚、VQ符号化部12は、生成したVQコードに、DRとMINの情報を付してVQ符号化データとして選択部14に供給するが、この詳細については後述する。
ここで、図3のフローチャートの説明に戻る。
ステップS4において、選択部14は、ADRC符号化部13より供給されたADRC符号化データに付されているDRを所定の閾値と比較し、DRが所定の閾値よりも大きいと判定したとき、その処理は、ステップS5に進む。
ステップS5において、選択部14は、ADRC符号化部13より供給されたADRC符号化データを伝送路に出力する。
ステップS6において、ブロック化部11は、画像の入力がなくなったか否かを判定し、画像の入力が終わったと判定されなかった場合、その処理は、ステップS1に戻り、それ以降の処理が繰り返される。
ステップS4において、DRが所定の閾値よりも大きいくないと判定されたとき、ステップS6において、選択部14は、ADRC符号化部13より供給されたADRC符号化データに対応するADRC符号化用ブロックに対応する領域のVQ符号化用ブロックのVQ符号化データを伝送路に出力する。すなわち、閾値の比較に用いられたADRC符号化用ブロックに対応する4個のVQ符号化用ブロックのVQ符号化データが出力される。
以上の処理により、ADRC符号化用ブロックのDRが所定の閾値よりも大きい場合、VQ符号化データよりもエラー耐性の高いADRC符号化データを採用し、逆に、ADRC符号化用ブロックのDRが所定の閾値よりも小さい場合、ADRC符号化データよりも高圧縮であるVQ符号化方式を採用することにより、高画質かつ高エラー耐性の符号化を実現することができる。即ち、ADRC符号化方式の特徴である符号化の高エラー耐性を維持しながら、DRの小さいエラー耐性を犠牲にしてもあまり影響しない部分を高圧縮率のVQ符号化データとすることにより、高圧縮率の符号化を実現することができる。
次に、図7のフローチャートを参照して、復号処理装置2による復号処理について説明する。
ステップS21において、判別部21は、符号化装置1より送信されてきた符号化データを取得する。
ステップS22において、判別部21は、取得した符号化データが、ADRC符号化データであるかあるか否かを判定し、例えば、ADRC符号化データであると判定した場合、取得した符号化データをADRC復号部23に供給する。
ステップS23において、ADRC復号部23は、取得した符号化データをADRC復号し、復号結果である画像のデータを合成部24に供給する。すなわち、ADRC復号部23は、符号化データに付されているADRC符号化用ブロック毎のDRとMINの情報に基づいて、各コードについて、(DR/(2^(量子化ビット数))×ADRCコード+MIN)を演算することにより各コードを復号する。ここで、「^」は、べき乗を表す。
一方、ステップS22において、取得した符号化データが、ADRC符号化されたものではない、すなわち、VQ符号化されたものであると判定された場合、ステップS24において、VQ復号部22は、符号化データに含まれるVQコードを、コードブック25に基づいてVQ復号し、復号結果である画像データを合成部24に供給する。すなわち、VQコードに対応する代表ベクトルの各要素から各画素の画素値を復号する。
ステップS25において、合成部24は、1フレーム分の復号画像データが供給されたか否かを判定し、例えば、1フレーム分の画像データが供給されていると判定された場合、ステップS26において、それらの復号画像データを1フレーム分の画像として合成して出力し、図示せぬディスプレイに表示させる。
ステップS27において、判別部21は、符号化データの供給が終了したか否かを判定し、終了していないと判定された場合、その処理はステップS21に戻り、それ以降の処理が繰り返される。ステップS27において、符号化データの供給が終了したと判定された場合、その処理は終了する。
ステップS25において、1フレーム分の復号された画像データが蓄えられていないと判定された場合、ステップS26の処理はスキップされる。すなわち、1フレーム分の符号された画像データが蓄えられた場合にのみ、ステップS26の処理により、画像データが出力される。
以上のように、復号装置2では、符号化データの符号化データの符号化方式を判別して符号化データを復号するようにしたので、VQ符号化方式により得られるVQ符号化データと、ADRC符号化方式により得られるADRC符号化データとが混在する符号化データを復号することが可能となり、高画質の復号画像を得ることが可能となる。
なお、符号化データが、VQ符号化データまたはADRC符号化データのうちのいずれであるかは、例えば、VQ符号化データとADRC符号化データのそれぞれに、それらを識別するフラグを付すようにして、そのフラグに基づいて判定するようにすることが可能である。符号化データが、VQ符号化データまたはADRC符号化データのうちのいずれであるかは、その他、そのようなフラグを用いない任意の方法を採用することも可能である。
次に、図8を参照して、VQ符号化部12の詳細な構成について説明する。
VQエンコーダ51は、VQ符号化用ブロックとして入力された各画素の画素値によりベクトルを生成し、そのベクトルに最も近いコードブック15の代表ベクトルに対応するVQコードを決定することにより、VQエンコード処理を実行し、エンコードの結果生成されるDR、MIN(DR、および、MINは、ベクトルVbを生成する際に求められる演算結果の一部)、およびVQコードからなるVQ符号化データを生成し、分離部52に供給する。
分離部52は、VQエンコーダ51より供給されたVQ符号化データのうち、DRおよびMINからなる部分と、VQコードからなる部分とを分離し、DRおよびMINからなる部分をスクランブラ53に供給すると共に、VQコードを、スクランブラ53および合成部54に供給する。
スクランブラ53は、分離部52より供給された、DRおよびMINからなる部分を、VQコードでスクランブル処理したスクランブルデータF_VQ(DR,MIN)を生成し、合成部54に出力する。
合成部54は、スクランブルデータF_VQ(DR,MIN)と、分離部52より供給されたVQコードを合成し、これをVQ符号化データとして出力する。
次に、図9のフローチャートを参照して、図8のVQ符号化部12によるVQエンコード処理について説明する。
ステップS41において、VQエンコーダ51は、VQ符号化用ブロック1個分の画像データが供給されてきたか否かを判定し、VQ符号化用ブロック1個分の画像データが供給されてきたと判定されるまで、その処理を繰り返す。そして、ステップS41において、VQ符号化用ブロック1個分の画像データが供給されてきたと判定された場合、その処理は、ステップS42に進む。
ステップS42において、VQエンコーダ51は、取得したVQ符号化用ブロックの画素値データに基づいて、DR、および、MINを求めて、上述したADRC符号化方式により符号化した後、さらに、ベクトルVbを生成して、さらに、コードブック15に基づいて、ベクトルVbに最も近い代表ベクトルに対応するVQコードを決定する。
ステップS43において、VQエンコーダ51は、例えば、図10で示されるように、DR、MIN、および、VQコードからなるVQ符号化データを生成し、分離部52に供給する。尚、図10においては、DRおよびMINは、それぞれ8ビットであり、VQコードは16ビットであるが、それ以外のビット数であってもよい。
ステップS44において、分離部52は、VQエンコーダ51より供給されたDRおよびMINの部分と、VQコードの部分を分離し、分離したDRおよびMINの部分をスクランブラ53に供給すると共に、分離したVQコードの部分をスクランブラ53、および、合成部54に供給する。
ステップS45において、スクランブラ53は、分離されたDRおよびMINの部分を分離されたVQコードでスクランブル処理し、その結果生成されるスクランブルデータF_VQ(DR,MIN)を合成部54に供給する。スクランブル処理は、分離されたDRおよびMINの部分と、VQコードの部分のデータにより可逆的に演算可能な方法でスクランブル処理されていれば、いかなる方法であってもよく、例えば、DRおよびMINの部分は、合計16ビットであり、また、VQコードも16ビットであるので、これらの各ビット毎にEXOR(Exclusive OR:排他的論理回路)処理するようにしてもよい。
ステップS46において、合成部54は、スクランブラ53より供給されるスクランブルデータF_VQ(DR,MIN)と、分離部52より供給されたVQコードとを合成し、例えば、図11で示されるようなVQ符号化データを生成し、出力する。図11においては、スクランブルデータF_VQ(DR,MIN)は16ビットで構成され、VQコードは、図10と同様に16ビットである。
ステップS47において、VQエンコーダ51は、VQ符号化用ブロックの画像データが終了したか否かを判定し、終了していないと判定された場合、その処理は、ステップS41に戻り、それ以降の処理が繰り返され、画像データが終了したと判定された場合、その処理は終了する。
以上の処理により、DRおよびMINのデータ部分が、VQコードによりスクランブル処理されて、スクランブルデータF_VQ(DR,MIN)としてVQ符号化データに付されることになるため、例えば、VQ符号化データを復号する際、伝送路上でVQデータが破壊された場合にでも、VQデータが破壊されているVQ符号化ブロックの近傍のVQ符号化ブロックのDRおよびMINのデータに基づいて、スクランブルデータF_VQ(DR,MIN)よりVQコードを抽出することで、VQコードを推定(復元)することが可能となり、結果として、エラー耐性を向上させることが可能となる。
次に、図12を参照して、VQ符号化部22の構成の詳細について説明する。
分離部71は、上述した合成部54により合成されたスクランブルデータF_VQ(DR,MIN)とVQコードからなるVQ符号化データを取得し、スクランブルデータF_VQ(DR,MIN)とVQコードを分離して、スクランブルデータF_VQ(DR,MIN)をデスクランブラ72およびエラー処理部74に、VQコードをデスクランブラ72、切替部75の端子75a、および、エラー検出部77にそれぞれ供給する。
デスクランブラ72は、分離部71より供給されたスクランブルデータF_VQ(DR,MIN)を、VQコードでデスクランブル処理し、元のDRおよびMINのデータを生成し、メモリ73および切替部78の端子78aに供給する。具体的な処理は、図8のスクランブラ53によりスクランブル処理される場合の変換処理に対する逆変換処理である。
メモリ73は、デスクランブラ72より供給されたDRおよびMINのデータをそれぞれ2個分記憶しており、データがいっぱいになった場合、古いデータからエラー処理部74および切替部78の端子78bに供給し、新しいデータを上書きする。このような処理により、メモリ73は、今、デスクランブラ72で処理しているVQ符号化用ブロックよりも前に処理されたVQ符号化用ブロックのDRおよびMINのデータをエラー処理部74に供給する。
また、メモリ73は、エラー検出部77がエラーを検出しない場合、新しいデータを上書きする。すなわち、VQコードにエラーが生じていない場合、デスクランブラ72は、正しいデスクランブル処理が実行できず、デスクランブル処理されたDRおよびMINは正確な値に戻されていない可能性があるため、新たに記憶されないようにするためである。
エラー処理部74は、分離部71より供給されたスクランブルデータから、メモリ73より読み出したDRおよびMINのデータを用いて、VQコードを推定(復元)し、切替部75の端子75bに供給する。
切替部75は、エラー検出部77により制御され、スイッチ75cが、端子75aに接続された場合、分離部71より供給されたVQコードをVQデコーダ76に供給する。また、スイッチ75cが端子75bに接続された場合、エラー処理部74により復元されたVQコードがVQデコーダ76に供給される。
VQデコーダ76は、切替部75より供給される、分離部71より供給されるVQコード、または、エラー処理部74により推定されたVQコードのいずれかをコードブック25を参照し、切替部78より供給されるDRおよびMINのデータ基づいてデコード処理し、すなわち、VQコードに対応する代表ベクトルのベクトル要素を用いて画素値を決定し、デコード処理した画像データを図示せぬディスプレイなどに出力し、表示させる。
エラー検出部77は、分離部71より供給されるVQコードにエラーが発生しているか否かを判定し、判定結果に基づいて、メモリ73および切替部75,78を制御する。
切替部78は、エラー検出部77により制御され、スイッチ78cが、端子78aに接続された場合、デスクランブラ72より供給されたDRおよびMINのデータをVQデコーダ76に供給する。また、スイッチ78cが端子78bに接続された場合、メモリ73より供給されたDRおよびMINのデータがVQデコーダ76に供給される。
次に、図13のフローチャートを参照して、図12のVQ復号部22によるVQデコード処理について説明する。ステップS61において、分離部61は、図11で示されるようなVQ符号化データを、スクランブルデータF_VQ(DR,MIN)とVQコードとに分離し、スクランブルデータF_VQ(DR,MIN)をデスクランブラ72およびエラー処理部74に、VQコードをデスクランブラ72、切替部75の端子75a、および、エラー検出部77にそれぞれ供給する。
ステップS62において、デスクランブラ72は、スクランブルデータF_VQ(DR,MIN)をVQコードを用いてデスクランブル処理し、元のDRおよびMINを生成してメモリ73、および、切替部78の端子78aに出力する。
ステップS63において、エラー処理部74は、メモリ73に記憶されている過去に出スクランブル処理されて生成された、DRおよびMINのうち、最も最近のDRおよびMINを読出し、これを用いて分離部71より供給されたスクランブルデータF_VQ(DR,MIN)からVQコードを復元する。
尚、ここで、今の処理しようとしているVQ符号化用ブロックが、1フレーム画像上のn番目のVQ符号化用ブロックnであったとすると、この処理でメモリ73より読み出されるDRおよびMINは、直近のVQコードにエラーが生じなかった(n−X)番目に処理されたVQ符号化用ブロック(n−X)のものである。ここで、直前に処理されたVQ符号化用ブロックにおいてVQコードにエラーが無ければX=1となる。従って、厳密な意味では、供給されたスクランブルデータF_VQ(DR,MIN)をデスクランブルして求められるDRおよびMINではない。しかしながら、DRおよびMINは、画像の特徴から近傍のVQ符号化用ブロック間においては相関が高いため、後述するようにVQコードにエラーが生じて、スクランブルデータF_VQ(DR,MIN)に対応するVQコードが欠落してしまったような場合にでも、近傍のVQ符号化用ブロックのDRおよびMINにより比較的近いVQコードを推定することが可能となる。
ステップS64において、エラー検出部77は、分離部71より供給されたVQコードにエラーが生じていないか、例えば、16ビット以外のビット数のデータになっていたりしていないかを判定し、エラーが生じていないと判定した場合、その処理は、ステップS65に進む。
ステップS65において、エラー検出部77は、切替部75,78のスイッチ75c,78cをそれぞれ制御して、端子75a,78aに接続する。
ステップS66において、エラー検出部77は、今デスクランブラ72より供給されたDRおよびMINの値が信頼のおけるものであるとみなし、メモリ73に対して古いDRおよびMINの値に置き換えて記憶させる。
ステップS68において、VQデコーダ76は、切替部78より供給されるDRおよびMINに基づいて、切替部75より供給されるVQコードをコードブック25を参照して、対応する代表ベクトルの各様子から画素値を決定することによりデコードする。すなわち、今の場合、DRおよびMINは、デスクランブラ72より供給されたものであり、VQコードは、分離部71より供給されたものであるので、VQデコーダ76は、本来の処理すべきVQ符号化用ブロックのVQ符号化データをデコードすることになる。
ステップS69において、分離部71は、VQ符号化データの供給が終了したか否かを判定し、終了していないと判定された場合、その処理は、ステップS61に戻り、それ以降の処理が繰り返され、VQ符号化データの供給が終了したと判定した場合、その処理を終了する。
一方、ステップS64において、エラーが検出された場合、ステップS67において、エラー検出部77は、切替部75,78のスイッチ75c,78cをそれぞれ制御して、端子75b,78bに接続する。
すなわち、DRおよびMINは、メモリ73より供給されたものであり、VQコードは、エラー処理部74より供給されたものであるので、この場合、ステップS68においては、VQデコーダ76は、本来の処理すべきVQ符号化用ブロックの近傍のVQ符号化用ブロックのDRおよびMINを用いて、スクランブルデータF_VQ(DR,MIN)から推定(復元)されたVQコード(近傍のVQ符号化用ブロックのDRおよびMINを用いて、スクランブルデータF_VQ(DR,MIN)から推定されるVQコード)をデコードすることになる。
以上の処理により、VQ符号化データのうち、VQコードが伝送路で破壊され、エラーが生じても、処理しようとするVQ符号化用ブロックの近傍のVQ符号化用ブロックのDRおよびMINを利用することによって、エラーを起こしたVQコードを推測することが可能となり、結果として、符号化通信におけるエラー耐性を向上させることが可能となる
尚、以上においては、VQ符号化データに含まれるDRおよびMINを、VQコードでスクランブル処理する例について説明してきたが、VQコードを用いてDRおよびMINにスクランブル処理をすると、VQコードが隣接してしまうような場合、エラー検出部77でエラーを検出できない程度のノイズがVQコードに影響してしまうと、DRおよびMINを正確にデスクランブルすることができなくなる(VQコード間で干渉してしまう)恐れがある。
そこで、DRおよびMINを直接VQコードでスクランブル処理するのではなく、VQコードに対応付けられるランダム関数によりスクランブル処理するようにしてもよい。
図14は、DRおよびMINを直接VQコードでスクランブル処理するのではなく、VQコードに対応付けられるランダム関数によりスクランブル処理するようにしたVQ符号化部12の構成を示している。尚、図8のVQ符号化部12と同一の構成については、同一の番号を付しており、その説明は適宜省略するものとする。
図14において、図8のVQ符号化部12と異なる点は、ランダム関数発生部91を新たに設け、スクランブラ53に代えて、スクランブラ92を設けた点である。ランダム関数発生部91は、VQコードと個々に対応するが、VQコード間の変化とは無関係なコードを発生する。より詳細には、ランダム関数発生部91は、本来長い循環のパターンで「1」および「0」からなる信号パターンを発生するが、初期値として与えられる値により先頭から所定のビット数までは同じパターンで「1」または「0」が発生する。ここで、初期値の連続性と、発生する所定のビット数までのコードの連続性は無関係である(すなわち、例えば、3個の初期値として1,2,3を考える場合、初期値のそれぞれは相互に連続する値(隣接する値)となっているが、それぞれの初期値で発生するランダム関数のパターンには連続性がない)。
すなわち、例えば、VQコードが2ビットのコードであって、このコードが初期値としてランダム関数発生部91に入力されると、例えば、図15で示すようなパターンのコードを生成する。図15においては、先頭から16ビット目までのパターンが示されている。
すなわち、図15において、ランダム関数発生部91に入力される初期値の値である2ビットのVQコードとして、「00」、「01」、「10」、および、「11」が示されており、それぞれに対応する先頭から16ビットまでのパターンがそれぞれ示されている。図15においては、初期値としてVQコードが「00」の場合、ランダム関数発生部91は、「0101010101010101」のパターンを発生し、初期値としてVQコードが「01」の場合、ランダム関数発生部91は、「0111000111000111」のパターンを発生し、初期値としてVQコードが「10」の場合、ランダム関数発生部91は、「1110001110001110」のパターンを発生し、初期値としてVQコードが「11」の場合、ランダム関数発生部91は、「1001001101101100」のパターンを発生することが示されている。図15で示されるように、連続するVQコードを初期値としても、ランダム関数発生部91により発生されるランダム関数のパターン間には連続性がないことが明らかなので、デスクランブルの際、干渉が生じ難くなる。
そこで、ランダム関数発生部91は、初期値としてVQコードが与えられると、それぞのVQコードには1対1で対応するが、ランダムな「1」、および「0」のパターンを発生し、スクランブラ92は、これによりDRおよびMINをスクランブル処理する。
次に、図16のフローチャートを参照して、図14のVQ符号化部12によるVQエンコード処理について説明する。尚、図16のフローチャートのステップS81乃至S84、および、ステップS87,S88の処理は、図9のフローチャートを参照して説明したステップS1乃至S4、および、S46,S47の処理と同様であるので、その説明は省略する。
ステップS85において、ランダム関数発生部91は、分離部52より供給されたVQコードに基づいて、ランダム関数を発生し、スクランブラ92に供給する。
ステップS86において、スクランブラ92は、分離されたDRおよびMINの部分を、ランダム関数発生部91により発生されたランダム関数でスクランブル処理し、その結果生成されるスクランブルデータF’_VQ(DR,MIN)を合成部54に供給する。
以上の処理により、ランダム関数でDRおよびMINにスクランブル処理を掛けることが可能となるので、伝送路上でVQコードに多少ノイズが含まれても、全く異なる値でスクランブルデータF’_VQ(DR,MIN)をデスクランブルさせることが可能となるので、エラー耐性を向上させることが可能となる。
次に、図17を参照して、上述の図14のVQ符号化部12に対応するVQ復号部22について説明する。尚、図12のVQ復号部22と同一の構成については、同一の番号を付しており、その説明は適宜省略するものとする。
図17において、図12のVQ復号部22と異なる点は、ランダム関数発生部101を新たに設け、デスクランブラ72、メモリ73、および、エラー処理部74に代えて、デスクランブラ102、メモリ103、および、エラー処理部104を設けた点である。
ランダム関数発生部101は、図14のランダム関数発生部91と同様のものであり、初期値となるVQコードによって発生するパターンも同様のものであり、発生したランダム関数をデスクランブラ102およびメモリ103に供給する。
デスクランブラ102は、ランダム関数発生部101により発生されたランダム関数によりスクランブルデータF’_VQ(DR,MIN)をデスクランブル処理し、切替部78の端子78aおよびメモリ103に出力する。
メモリ103は、基本的には、メモリ73と同様のものであるが、デスクランブルされたDRおよびMINに対応付けて、そのときのランダム関数を記憶する。
エラー検出部104は、分離部71より供給されたスクランブルデータから、メモリ103より読み出したDRおよびMIN、並びに、対応するランダム関数のデータを用いて、VQコードを推定(復元)し、切替部75の端子75aに供給する。
次に、図18のフローチャートを参照して、図17のVQ復号部22によるVQデコード処理について説明する。尚、図18のフローチャートのステップS101、および、S105,S106、および、S108乃至S110の処理は、図13のフローチャートを参照して説明したステップS61、および、S64,S65、および、S67乃至S69の処理と同様であるのでその説明は省略する。
ステップS102において、ランダム関数発生部101は、分離部71より供給されたVQコードに基づいて、ランダム関数を発生し、デスクランブラ102に供給する。
ステップS103において、デスクランブラ102は、スクランブルデータF’_VQ(DR,MIN)をランダム関数発生部101より発生されたランダム関数を用いてデスクランブル処理し、元のDRおよびMINを生成してメモリ103、および、切替部78の端子78aに出力する。
ステップS104において、エラー処理部74は、メモリ73に記憶されているDRおよびMIN、並びに、ランダム関数を読出し、これを用いて分離部71より供給されたスクランブルデータF’_VQ(DR,MIN)からVQコードを復元する。
ステップS107において、エラー検出部77は、今デスクランブラ102より供給されたDRおよびMIN、および、ランダム関数発生部101より供給されたランダム関数の値が信頼のおけるものであるとみなし、メモリ103に対して古いDRおよびMIN、並びに、ランダム関数の値に置き換えて記憶させる。
以上の処理により、ランダム関数によりスクランブル処理されたDRおよびMINを、VQコードにより発生されるランダム関数によりデスクランブルするようにしたので、デスクランブル時に生じやすい干渉を抑制することができ、結果として、エラー耐性を向上させることが可能となる。
尚、以上においては、DRおよびMINが、VQコード、または、ランダム関数によりスクランブルされる場合について説明してきたが、スクランブルされる値は、DRおよびMINでなくてもよく、例えば、VQ符号化ブロックの各画素の画素値により得られる平均値と標準偏差などであってもよい。また、ADRC符号化方式においては、DRおよびMINと称する値は、VQ符号化ブロックの各画素の画素値によりADRC符号化データを生成する際の正規化係数とオフセット値であるともいえるので、それらをスクランブルするようにしてもよい。
また、以上においては、VQコード、または、ランダム関数によりスクランブル処理されるのは、DRおよびMINであったが、これは、画像データの特性上、画素間、または、VQ符号化用ブロック間で、その近傍の値と相関のあるデータであればよいので、DRのみ、または、MINのみをVQコード、または、ランダム関数でスクランブル処理してもよい。
以上によれば、符号化データを生成する際、DRやMINなどのVQ符号化用ブロック間で、その近傍の値と相関のあるデータを、VQコードなどのVQ符号化用ブロック間で、その近傍の値と相関のないデータでスクランブルことにより、相関性のあるデータ(例えば、DRやMIN)に、相関性のないデータ(例えば、VQコード)を埋め込むことが可能となるので、伝送路上で、相関性のないデータが欠落するようなことがあっても、相関性のあるデータの相関に基づいて、欠落したデータを推定することが可能となり、結果として、高圧縮率で、かつ、高エラー耐性の符号化データによる通信を可能にする。
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行させることが可能な、例えば汎用のパーソナルコンピュータなどに記録媒体からインストールされる。
図19は、図1の符号化装置1、および、復号装置2の電気的な内部構成をソフトウェアにより実現する場合のパーソナルコンピュータの一実施の形態の構成を示している。パーソナルコンピュータのCPU201は、パーソナルコンピュータの全体の動作を制御する。また、CPU201は、バス204および入出力インタフェース205を介してユーザからキーボードやマウスなどからなる入力部206から指令が入力されると、それに対応してROM(Read Only Memory) 202に格納されているプログラムを実行する。あるいはまた、CPU201は、ドライブ210に接続された磁気ディスク211、光ディスク212、光磁気ディスク213、または半導体メモリ214から読み出され、記憶部208にインストールされたプログラムを、RAM(Random Access Memory)203にロードして実行する。これにより、上述した図1の符号化装置1、および、復号装置2の機能が、ソフトウェアにより実現されている。さらに、CPU201は、通信部209を制御して、外部と通信し、データの授受を実行する。
プログラムが記録されている記録媒体は、図19に示すように、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク211(フレキシブルディスクを含む)、光ディスク212(CD-ROM(Compact Disc-Read Only Memory),DVD(Digital Versatile Disk)を含む)、光磁気ディスク213(MD(Mini-Disc)を含む)、もしくは半導体メモリ214などよりなるパッケージメディアにより構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM202や、記憶部208に含まれるハードディスクなどで構成される。
尚、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理は、もちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理を含むものである。
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
1 符号化装置, 2 復号装置, 12 VQ符号化部, 22 VQ復号部, 51 VQエンコーダ, 52 分離部, 53 スクランブラ, 54 合成部, 71 分離部, 72 デスクランブラ, 73 メモリ, 74 エラー処理部, 75 切替部, 76 VQデコーダ, 77 エラー検出部, 91 ランダム関数発生部, 92 スクランブラ, 101 ランダム関数発生部, 102 デスクランブラ, 103 メモリ, 104 エラー検出部