以下添付図面を参照して、本発明を好適な実施形態に従って詳細に説明する。
[第1の実施形態]
図1は本実施形態に係る動画像符号化装置の構成を示す図である。本実施形態では、H.264符号化方式をベースにとって説明するが、H.264と異なり、参照フレームは時間的に不連続のものを参照することになる。但し、ベースはH.264に限定されない。また、説明を簡単にするため、過去のフレームを参照する前方向予測を例に取るが、これに限定されず、両方向予測に適用してももちろん構わない。また、以下の説明では、フレームの画像データをフレームデータと呼称する場合もある。また、このフレームデータ(フレームの画像)には、このフレームのフレーム番号を示すデータも含まれているものとする。
図1において、19〜22は外部から入力された動画像の各フレームの画像(入力画像)を格納するためのフレームメモリである。26は入力先を選択して出力するセレクタである。1はフレーム内符号化/フレーム間符号化のモードに従って出力先を選択するセレクタである。
2はH.264符号化方式によるイントラ予測を行なうイントラ予測器であり、3は動き予測誤差を求める差分器である。4は整数型直交変換を行ない、入力された係数を量子化する変換/量子化器であり、7はその逆の作用を施す逆量子化/逆変換器である。8は動き予測画像を加算する加算器である。5は変換/量子化器4による量子化結果を符号化するエントロピー符号化器であり、6は発生した複数フレーム分の符号を格納するバッファである。
9、10、11、12はフレームメモリであり、局所復号された画像データとフレームの番号をフレーム単位で格納する。13は入力画像と復号された画像データから最適な動きベクトルを該当するフレームから抽出する動き推定器であり、14は動き推定器13で算出された動きベクトルと該当するフレームの情報から予測画像を生成する動き補償器である。15は算出された動きベクトルと該当するフレームの情報から動きの情報を符号化する動き符号化器である。
17はフレームメモリ9〜12の入出力を制御するフレームメモリ制御器であり、16はバッファ6に格納された符号化データを出力する出力器である。25は入力画像を比較して類似度を算出して区間を設定する区間設定器である。18は区間を代表する代表フレームを判定する代表フレーム判定器である。26は符号化を行なうフレームを選択するセレクタである。27は設定された区間を格納しておく区間メモリであり、28は判定された代表フレームを格納しておく代表フレームメモリである。29は参照する区間を判定する参照フレーム判定器である。
上記のように構成された動画像符号化装置における動画像の符号化動作を以下、説明する。
符号化に先立ち、各フレームメモリ、区間メモリ27、代表フレームメモリ28を初期化する。初期化としては例えば各メモリ内を0のデータで埋める。
また、区間設定器25には、区間の先頭を表す始点値と終点を表す終点値として第1フレームを表す1を設定する。また、出力器16は参照するフレームの最大数を表すヘッダ情報を生成して出力する。
本動画像符号化装置に入力されたフレームの画像データはフレームメモリ19〜23に順に格納される。また、入力された画像データはそれぞれ、直前に入力されたフレームの画像データと共に区間設定器25に入力される。すなわち、第Nフレーム目の画像と第(N−1)フレーム目の画像とがセットなって区間設定器25に入力される。
区間設定器25では入力された2つのフレームデータ(フレームの画像データ)の相違度Rを求める。ここでは説明を簡単にするため、2つの画像で対応する画素同士の画素値の差分の絶対値を全ての画素について加算した総和値を相違度Rとする。
例えば、フレームメモリ19に格納されている第Nフレーム目の画像XNの画素値をXN(i,j)(i,jは画像XNにおける画素の位置)、フレームメモリ20に格納されている第(N−1)フレーム目の画像XN−1の画素値をXN−1(i,j)とする。
この場合、この2つの画像(第Nフレーム目の画像と第(N−1)フレーム目の画像)との間の相違度RNは以下の式に従って求めることができる。
RN=ΣΣ(|XN(i,j)―XN−1(i,j)|) (1)
ここで「ΣΣ」は全てのi、jについて加算することを示している。
そして区間設定器25は、求めた相違度RNが予め設定された閾値Thよりも小さければ終点値に1を加え、Nを1つインクリメントして同様の処理を行なう。
一方、相違度RNが予め設定された閾値Thよりも大きかった場合、または、符号化していないフレームデータでフレームメモリ19〜22がいっぱいになってしまった場合、区間判定器25は区間の始点値と終点値を区間メモリ27の空いた領域または、空いた領域が無ければ最も古い区間を表すデータに上書きして格納する。また、これらの値は代表フレーム判定器18に入力される。
代表フレーム判定器18は区間を表すこれらの値(始点値、終点値)とフレームメモリ19〜22の中でこの区間内の各フレームの画像データを読み込み、相違度Qを求める。本実施形態では、区間の始点値をS、終点値をEとしたとき、第Nフレームとその他のフレーム(第Nフレーム目をのぞく第Sフレーム目から第Eフレーム目までの各フレーム)との相違度QNは
QN=Σ(ΣΣ(|XN(i,j)―XM(i,j)|) (M=S〜E) (2)
すなわち、全てのi、jについて(|XN(i,j)―XM(i,j)|の総和値を求め、更にその結果を全てのM(S〜E)について加算する。特にN=Mの場合は計算を省略することができる。
すなわち本実施形態に係る相違値QNは、第Nフレーム目の画像と第Mフレーム目の画像とで対応する画素同士の画素値の差分の絶対値を全ての画素について加算した総和値を全てのM(M=S、S+1、、、E−1、E)について求め、その総和を計算することにより求められるものである。
代表フレーム判定器18は求めた各相違度QNのうち、最も小さい相違度Qのフレームを選択する。選択したフレームの番号を代表フレームメモリ28に入力する。
そして、区間設定器25は終点値に1を加えたものを始点値と終点値にセットする。
続いて、セレクタ26は区間メモリ27に最近格納した始点値、終点値を参照し、フレームメモリ19〜23のそれぞれが格納するフレームデータにおいて始点値から終点値の間のフレームデータを順に読み出し、セレクタ1に入力する。
セレクタ1は一定間隔、例えば15フレーム毎にフレームをフレーム内符号化するために、出力にイントラ予測器2を選択し、そうでない場合は、フレーム間符号化するために出力に差分器3を選択する。
イントラ予測器2が選択された場合、入力されたフレームデータはブロック毎に予測が行なわれる。一方、差分器3が選択された場合は、入力された画像データはスライス単位で動き推定器13に入力される。
先ず代表フレームメモリ28に保持されている「過去に設定した各区間の代表フレーム番号」を参照して、各区間の代表フレームのデータをフレームメモリ9〜12から読み出し、動き推定器13、動き補償器14により、それぞれの代表フレームの入力画像に対する予測画像を生成する。そしてそれぞれの代表フレームの予測画像と入力画像との誤差(予測誤差)を求め、入力画像との予測誤差が最も小さい代表フレームを特定する。
そして特定した代表フレームのフレーム番号を含む区間の両端を示す情報である始点値、終点値を代表フレームメモリ28から読み出し、読み出した始点値、終点値でもって規定される区間内の各フレームの画像をフレームメモリ9〜12から読み出し、読み出した画像群と入力画像とを用いて、動き推定器13、補償器14により、周知の動き補償による符号化処理を行なう。
そして、入力画像に対する予測画像を動き補償器14により生成するので、これを差分器3に入力する。差分器3は入力画像と予測画像から予測誤差を求める。また、動きベクトルは動き符号化器15で符号化され、バッファ6に格納される。イントラ予測器2または差分器3で得られた結果は変換/量子化器4に入力され、整数型直交変換を行ない、その係数を量子化する。その結果はエントロピー符号化器5と逆量子化/逆変換器7に入力される。エントロピー符号化器5では、入力された量子化結果をエントロピー符号化し、バッファ6にフレーム単位で格納する。
一方、イントラ予測器2、差分器3の何れにおいても予測誤差が出力されるので、この予測誤差が変換/量子化器4,逆量子化/逆変換器7を介して加算器8で、動き補償器14から入力される「入力画像に対する予測画像」と加算される。例えば予測誤差が差分器3から出力された場合、この予測誤差とは、セレクタ26から入力された入力画像と、この入力画像に対する予測画像との差分であるので、加算器8がこの差分と動き補償器14から入力される「入力画像に対する予測画像」と加算することにより、復号画像が復元される。よって、フレームメモリ9〜12には、フレームメモリ19〜22に格納されているフレームデータが復元されて格納されることになる。
以上の動き補償による符号化処理は、参照する画像(上記説明では、特定した代表フレームのフレーム番号を含む区間内の各フレームの画像)を特定する処理以外は周知の動き補償による符号化処理である。
このように本実施形態に係る符号化処理では、連続するフレーム間で画像にさほど差がない(隣接するフレーム間での相違度Rnが閾値Th以下)ようなフレーム列の区間を設定し、更にこの区間内の各フレームにおいてその他のフレームとの差が最も少ないフレームを参照画像のフレームとして設定するので、区間内の各フレームを符号化する際に参照する画像は1つであり、参照すべき画像の数を軽減することができ、より高速に符号化処理を行なうことができる。
なお、逆量子化/逆変換器7では、入力された量子化結果から予測誤差(入力画像と予測画像との差)を得、加算器8はこの予測誤差と動き補償器14からの予測画像とを加算することにより、入力画像を復元する。そして復元した入力画像をフレームメモリ9〜12のうち、データが入っていないフレームメモリか、最も古いフレームの画像データのフレームメモリに格納する。
最後に、バッファ6に格納された符号化データは出力器16により外部に出力する。また、符号化が終了したフレームの画像データはフレームメモリ19〜22のうちから消去される。
以上の処理を本動画像符号化装置に入力される全てのフレームを符号化するまで行なう。
図2は、以上説明した符号化処理のフローチャートである。
先ず、上述の通り、図1に示した各部の初期化を行ない、更に、出力器16は、参照するフレームの最大数を表すヘッダ情報を生成して出力する(ステップS1)。次に、符号化すべき全てのフレームについて符号化処理を行ったか否かを判断する(ステップS2)。符号化すべきフレームがまだ残っている場合には処理をステップS3に進め、符号化していないフレームの画像データでフレームメモリ19〜22がいっぱいになってしまったか否かを判定する(ステップS4)。フレームメモリに余裕があれば処理をステップS4に進め、フレームメモリに余裕がなく満杯であれば処理をステップS8に進める。
フレームメモリに余裕がある場合、フレームメモリ19〜22に符号化対象のフレームデータを順に入力する(ステップS4)。そして区間設定器25により、始点値で示される位置のフレームから順に参照するのであるが、現在参照しているフレームと、この次のフレームとの相違度Rを上記式(1)に従って求める(ステップS5)。そして求めた相違度Rが予め決まっている閾値Thよりも小さいか否かを判断する(ステップS6)。R<Thの場合、区間設定器25により、現在参照しているフレームの画像と、この次のフレームの画像とがさほど差がないと判断され、終点値に1を足して更新し(ステップS7)、ステップS3以降の処理を繰り返す。このようにして、現在参照しているフレームの画像と、この次のフレームの画像とがさほど差がないと判断した場合には、終了点を1つずつ増やして更新していき、始点値と終点値とで規定される区間を更新する。
一方、ステップS6において相違度Rが閾値Th以上の場合、もしくはステップS3においてフレームメモリに余裕がなく満杯である場合、区間設定器25により、現在参照しているフレームの画像と、この次のフレームの画像とに差があると判断され、始点値と終点値とで規定される区間を以降の処理で参照すべく、この始点値、終点値を区間メモリ27に格納する(ステップS8)。
そして、代表フレーム判定器18は、区間を表すこれらの値(始点値、終点値)とフレームメモリ19〜22の中でこの区間内の各フレームの画像データを読み込み、この各フレームについて式(2)に従って相違度Qを求める処理を行なう(ステップS9)。そして各フレームについて求めた相違度Qのうち、最も小さい相違度Qとなったフレームを代表フレームとして設定するため、最も小さい相違度Qとなったフレームのフレーム番号を代表フレームメモリ28に入力し、格納する(ステップS10)。
そして以降の処理により、この区間内の各フレームについて動きベクトルを求め、符号化する処理を行なう。
先ず、区間内の各フレームについて符号化を行ったか否かを判断し(ステップS11)、行っていない場合には処理をステップS12に進め、まだ符号化していないフレームの画像を1つずつ符号化する。
以下に1つのフレームの画像を符号化するための処理について説明する。
先ず、1つのフレームの画像は符号化単位(ここではスライスと呼称する)毎に符号化を行なうのであるが、1つの画像の全ての符号化単位について符号化を行ったか否かを判断する(ステップS12)。
まだ符号化を行っていない符号化単位があった場合には、処理をステップS13に進め、動き補償器14は、代表フレームメモリ28に保持されている「過去に設定した各区間毎の代表フレーム番号」に基づいて、各区間の代表フレームのデータをフレームメモリ9〜12から読み出し、それぞれの代表フレームの符号化対象フレームの画像に対する予測画像を生成し、それぞれの代表フレームに対する予測画像と符号化対象フレームの画像との誤差(予測誤差)を求める(ステップS13)。
そして、符号化対象フレームとの予測誤差が最も小さい代表フレームを特定し、特定した代表フレームのフレーム番号を含む区間の両端を示す情報である始点値、終点値を代表フレームメモリ28から読み出すことで、符号化しようとする符号化単位を符号化するために参照する区間を設定することができる(ステップS14)。
そしてステップS14で設定した区間内の各フレームの画像をフレームメモリ19〜22から読み出し、読み出した画像群と符号化対象の符号化単位とを用いて、この符号化単位に対して符号化処理を行なう(ステップS15)。
ステップS15における処理をより詳細に説明すると、フレーム間符号化のモードが設定されている場合には、動き推定器13は、まだ符号化を行っていない符号化単位について、ステップS14で設定した区間内の各フレームの画像の該当部分と比較して周知の技術により動きベクトルを求め、動き符号化器15はこの動きベクトルを符号化してその符号化結果をバッファ6に出力する。
また、求めた動きベクトルから動き補償器14はこの符号化単位に対する予測画像を生成し、差分器3はこの予測画像と符号化単位との差分を予測誤差として求める。そしてこの予測誤差を変換/量子化器4、エントロピー符号化器5により符号化してバッファ6に出力する。これにより、バッファ6には、この符号化単位に対する符号化結果として、動きベクトルの符号化データ、予測誤差の符号化データが格納されることになる。
一方、フレーム内符号化のモードが設定されている場合には、この符号化単位をそのまま符号化する。
そして次の符号化単位に対する符号化処理を行なうべく、処理をステップS12に戻し、以降の処理を繰り返す。以上のステップS12〜S15の符号化処理は周知のものであるが、本実施形態では、符号化時に参照する画像の選択方法に以上のような特徴がある。
一方、ステップS12において、1つのフレームの画像を構成する符号化単位全てについて符号化処理を行った場合には処理をステップS16に進め、ステップS12〜S15で符号化した対象のフレームの画像をフレームメモリ9〜12の内で画像データを未格納のフレームメモリ、またはフレームメモリ9〜12の内で最も古い番号のフレームを格納しているフレームメモリに格納する(ステップS16)。
そして出力器16はバッファ6に出力された符号化データを外部に出力し(ステップS17)、区間内の次のフレームを符号化すべく、処理をステップS11に戻し、以降の処理を繰り返す。
そしてステップS11で区間内の全てのフレームについて符号化を行った場合には処理をステップS18に進め、区間設定器25は終点値に1を加えたものを始点値と終点値にセットすることで始点値、終点値を更新し(ステップS18)、処理をステップS2に戻し、以降の処理を繰り返す。
以上の説明により、本実施形態に係る動画像符号化装置は、より少ないフレーム数の参照で効率よく最適な動き補償を行なうことが可能になり、高速に符号化することが可能になるといった効果がある。なお、本実施形態では相違度は画像間での画素毎の差分であったが、画像間の類似度を示すものであれば、特に限定するものではない。
また、本実施形態では画素毎の差分をフレームの全ての画素について行なったが、サブサンプリングした画素に対して行なっても構わない。
また本実施形態に係る動画像符号化装置は、図1に示した構成を有するハードウェアとしたが、これに限定するものではなく、他にも例えば、図1に示した各部の機能をソフトウェアでもって実装し、このプログラムをPC(パーソナルコンピュータ)やWS(ワークステーション)などのコンピュータにインストールし、このコンピュータのCPUがこれを実行することにより、このコンピュータは上述した動画像符号化処理を実行することになる。よってこの場合、このコンピュータをもってして本実施形態に係る動画像符号化装置とすることができる。
このように、ソフトウェアでもって実装可能であるのは本実施形態だけではなく、以降の実施形態においても同様である。
[第2の実施形態]
図3は本実施形態に係る動画像符号化装置の構成を示す図である。同図において図1と同じ部分については同じ番号をつけており、その説明を省略する。
117はフレームメモリ9〜12の入出力を制御するフレームメモリ制御器であり、125は入力画像を比較して類似度を算出して区間を設定する区間設定器である。118は区間を代表する代表フレームを判定する代表フレーム判定器である。
以下に本実施形態に係る動画像符号化装置が行なう動画像符号化処理について説明する。
第1の実施形態と同様に、符号化に先立ち、各フレームメモリ、区間メモリ27、代表フレームメモリ28を初期化する。初期化としては例えば各メモリ内を0のデータで埋める。
また、区間設定器125には、区間の先頭を表す始点値と終点を表す終点値として第1フレームを表す1を設定する。また、出力器16は参照するフレームの最大数を表すヘッダ情報を生成して出力する。
動画像を構成する各フレームは順次フレームメモリ19に入力される。セレクタ1は、フレーム内符号化を行なうモードが設定されている場合には、フレームメモリ19に入力され、格納されているフレームデータをマクロブロック単位で順次イントラ予測器2に入力する。そしてイントラ予測器2はブロック毎に予測を行ない、予測結果である予測誤差は変換/量子化器4で整数型直交変換と量子化が行なわれ、その結果はエントロピー符号化器5に入力される。エントロピー符号化器5では、入力された量子化結果をエントロピー符号化し、バッファ6にフレーム単位で格納する。
逆量子化/逆変換器7では、入力された量子化結果から復号画像を得る。フレームメモリ制御器117の指示に従って、フレームメモリ9〜12のうち、空いているフレームメモリ、または最も古い代表フレームの画像データのフレームメモリに復号画像データを格納する。バッファ6に格納された符号化データは出力器16から出力される。
このように、フレーム内符号化を行なう場合については第1の実施形態と同様である。
一方、フレーム間符号化のモードが設定されている場合について説明する。
基本的には第1の実施形態と同様にして符号化処理を行なうのであるが、第1の実施形態と異なるのは、予め区間、及び代表フレームを決めておくのではなく、符号化を行っていくのと並行して、この区間、代表フレームを適宜更新する点にある。以下ではその更新処理について説明する。
第1の実施形態と同様に、差分器3は、入力画像と予測画像との差分を予測誤差として出力するのであるが、この予測誤差は加算器8でこの予測画像に加算され、復号画像を復元し、この復号画像をフレームメモリ9〜12のいずれかに格納される。
そしてフレームメモリ9〜12に格納され、入力された画像データはそれぞれ、直前に入力されたフレームの画像データと共に区間設定器125に入力される。すなわち、第Nフレーム目の画像と第(N−1)フレーム目の画像とがセットなって区間設定器125に入力される。
区間設定器125では入力された2つのフレームデータの相違度Rを式(1)に従って求める。なお、本実施形態においても、相違度Rの求め方はこれに限定するものではない。そして区間設定器125は、求めた相違度Rが予め設定された閾値Thよりも小さければ終点値に1を加え、終点値を更新する。
次に、区間設定器125により更新後の終点値が示すフレームが第Nフレーム目である場合、代表フレーム判定器116は、現在始点値が示すフレームから第(N−1)フレームまでの各フレームの画像と第Nフレーム目の画像とを用いて、式(2)に従って、相違度QNを求める(その場合、「現在始点値が示すフレームから第(N−1)フレームまでの各フレームの画像」が式(2)におけるXM(i,j)に相当し、「第Nフレーム目の画像」がXN(i,j)に相当することになる)。
また、区間設定器125は、第Nフレーム目の画像と、現在の区間の代表フレームとして設定されているフレームの画像データとの相違度SNを式(1)に従って求める。
そして代表フレーム判定器29は、相違度SNと第(N−1)フレームまでを符号化した際の代表フレームとの相違度の累積QD(相違度QDの初期値は0)と加算し、新しい累積相違度QD’を算出する。この累積相違度QD’と相違度QNとの大小比較を行なう。
比較の結果、相違度QNが累積相違度QD‘よりも小さい場合、第Nフレーム目を新しい代表フレームとするため、第Nフレームのフレーム番号(すなわちN)を代表フレームメモリ28に設定する。その後、相違度QDの値として相違度QNの値を代入する。
一方、相違度QNが相違度QD‘以上であれば、代表フレームの更新は行なわず、その後、相違度QDの値として相違度QD‘の値を代入する。
以上の処理により、代表フレーム、及び区間の終点値を、次のフレームの符号化の直前に設定することができる。
図4は、以上説明した符号化処理のフローチャートである。同図において図2と同じ処理ステップについては同じステップ番号をつけており、説明を簡略化する。また本実施形態では、フレーム単位で代表フレームを選択する例をとって説明するが、これに限定されず、第1の実施形態のようにスライスやマクロブロックを単位にしてももちろん構わない。
先ず、上述の通り、図3に示した各部の初期化を行ない、更に、出力器16は、参照するフレームの最大数を表すヘッダ情報を生成して出力する(ステップS1)。次に、符号化すべき全てのフレームについて符号化処理を行ったか否かを判断する(ステップS2)。符号化すべきフレームがまだ残っている場合には処理をステップS4に進め、フレームメモリ19に符号化対象のフレームデータを順に入力する(ステップS4)。
次に、フレーム内符号化、フレーム間符号化の何れのモードが設定されているのかを判断する(ステップS101)。ここでフレーム内符号化を行なう場合には処理をステップS102に進め、セレクタ1はフレームメモリ19からの入力画像をイントラ予測器2に出力し、イントラ予測器2は入力された画像に対して周知のイントラ符号化を行なう(ステップS102)。
一方、フレーム間符号化を行なう場合には処理をステップS104に進め、動き補償器14は、代表フレームメモリ28に保持されている「過去に設定した各区間毎の代表フレーム番号」に基づいて、各区間毎の代表フレームのデータをフレームメモリ9〜12から読み出し、それぞれの代表フレームの符号化対象フレームに対する予測画像を生成し、そしてそれぞれの代表フレームの予測画像と符号化対象フレームの画像との誤差(予測誤差)を求める(ステップS104)。
そして、符号化対象フレームとの予測誤差が最も小さい代表フレームを特定し、特定した代表フレームのフレーム番号を含む区間の両端を示す情報である始点値、終点値を代表フレームメモリ28から読み出すことで、符号化しようとする符号化対象フレームを符号化するために参照する区間を設定することができる(ステップS105)。
そしてステップS105で設定した区間内の各フレームの画像をフレームメモリ9〜12から読み出し、読み出した画像群と符号化対象フレームとを用いて、この符号化対象フレームに対して周知の動き補償による符号化処理を行なう(ステップS106)。
ステップS104からステップS106までの各ステップにおける処理はそれぞれ、符号化単位が異なる以外は、ステップS13からステップS15までの各ステップにおける処理と同じである。
そして以上の処理により、第1の実施形態と同様に、バッファ6には符号化対象の符号化データが格納されるので、出力器16は、バッファ6に格納されたこの符号化データを外部に出力し、更に、ステップS16と同様にして、符号化したフレームの復元画像をフレームメモリ19〜22のうち画像データを未格納のフレームメモリ、またはフレームメモリ9〜12の内で最も古い番号のフレームを格納しているフレームメモリに格納する(ステップS107)。
次に、以降の処理では、次のフレームの符号化のために参照され得る情報、すなわち、代表フレームの位置、及び区間を設定する処理を行なう。
先ず代表フレーム判定器118は、ステップS106で符号化されたフレームの復元画像(ステップS107で復元)と、このフレームの直前のフレームの画像(同様に復元されてフレームメモリ9〜12のいずれかに格納されている)とを比較し、式(1)に基づいて、相違度Rを求める(ステップS108)。
そして求めた相違度Rと閾値Thを比較し(ステップS109)、相違度Rが閾値Th以上であれば処理をステップS110に進め、そうでなければ処理をステップS112に進める。
相違度Rが閾値Th以上である場合、処理をステップS110に進め、ステップS106で符号化したフレームは直前の区間内のフレームには属さない、換言すれば、直前の区間内のどのフレームとも大きな差があるフレームであると判断するので、ステップS106で符号化したフレームを次の新たな区間に属するフレームであると判断し、次の区間の開始点、終了点、及びこの区間における代表フレームの設定処理を行なう。
まず区間設定器125は、区間メモリ27中に新規の区間の開始点、及び終了点としてステップS106で符号化したフレームの番号を設定する(ステップS110)。次に、新たに設定する区間における代表フレームとして、ステップS106で符号化したフレームとすべく、このフレームの番号を代表フレームメモリ28に格納する(ステップS111)。
そして次のフレームの符号化処理を行なうべく、処理をステップS2に戻し、以降の処理を行なう。
一方、ステップS109において相違度Rが閾値Thよりも小さい場合には処理をステップS112に進め、現在区間メモリ27に格納されている終了点に1を加えて、ステップS106で符号化したフレームを直前の区間に含める処理を行なう(ステップS112)。
次に、区間設定器125は上記式(1)に従って上記相違度QN、SNを求める(ステップS113)。より具体的には、更新後の終点値が示すフレーム(ここではステップS106で符号化したフレーム)が第Nフレーム目である場合、代表フレーム判定器116は、現在始点値が示すフレームから第(N−1)フレームまでの各フレームの画像と第Nフレーム目の画像とを用いて、式(2)に従って、相違度QNを求める(その場合、「現在始点値が示すフレームから第(N−1)フレームまでの各フレームの画像」が式(2)におけるXM(i,j)に相当し、「第Nフレーム目の画像」がXN(i,j)に相当することになる)。
また、第Nフレーム目の画像と、現在代表フレームとして設定されているフレームの画像データとの相違度SNを式(1)に従って求める。
そして代表フレーム判定器29は、相違度SNと第(N−1)フレームまでを符号化した際の代表フレームとの相違度の累積QD(相違度QDの初期値は0)と加算し、新しい累積相違度QD’を算出する(ステップS114)。更新後のQDをQD’と表す。
そして、累積相違度QD’と相違度QNとの大小比較を行なう(ステップS115)。
比較の結果、累積相違度QNが相違度QD‘よりも小さい場合、処理をステップS116に進め、第Nフレーム目(すなわちステップS106で符号化したフレーム)を新たな代表フレームとするため、第Nフレームのフレーム番号(すなわちN)を代表フレームメモリ28に設定する(ステップS116)。その後、累積相違度QDの値として相違度QNの値を代入する(ステップS117)。
一方、相違度QNが累積相違度QD‘以上であれば処理をステップS115からステップS118に進め、累積相違度QDの値として累積相違度QD‘の値を代入する(ステップS118)。
そしてステップS117、S118何れの場合であってもその後、次のフレームを符号化するために処理をステップS2に戻し、以降処理を繰り返す。
以上の処理により、次のフレームを符号化する際に参照画像として参照すべきフレーム(代表フレーム)、及び区間の終点値を、次のフレームの符号化の直前に設定することができる。
このような構成と一連の選択動作により、復号画像で区間の設定と代表フレームの判定を行なうため、フレームメモリとして第1の実施形態よりも少ないメモリ容量(本実施形態の場合、入力画像を保持しておくフレームメモリは第1の実施形態が複数なのに比べて単数である)でも高速に動き補償を行なうことが可能になるといった効果がある。
[第3の実施形態]
図5は、本実施形態に係る動画像符号化装置の基本構成を示すブロック図である。
同図において、300はメモリ301にロードされたプログラムやデータを用いて、本装置全体の制御を行なうとともに、後述する各処理を実行するCPUである。301はメモリで、記憶装置304、305からロードされたプログラムやデータを一時的に格納するためのエリアを備えるとともに、CPU300が各処理を実行する際に使用するワークエリアを備える。
303は、本動画像符号化装置に対する各種の設定や、各種の指示などを入力するための端末装置である。304は、CPU300に各種の処理を実行させるためのソフトウェアのプログラムやデータを記憶するための記憶装置で、これらのソフトウェアの一部、もしくは全部はCPU300の制御によりメモリ301にロードされ、CPU300による処理対象となる。
305は、動画像のストリームのデータを記憶する記憶装置で、このストリームの一部、もしくは全部はCPU300の制御によりメモリ301にロードされ、CPU300による処理対象となる。
なお、同図では記憶装置304、305はそれぞれ別個の装置としているが、これに限定するものではなく、1つの記憶装置内に、記憶装置304、305それぞれが記憶するプログラムやデータを記憶させても良い。また、記憶装置304、305はそれぞれリムーバブルな記憶媒体としてもよく、その場合、本動画像符号化装置にはこれら記憶媒体に記録されたプログラムやデータを読み出す装置を付加する必要がある。
306は、動画像を撮像するためのカメラで、撮像された動画像のデータ(各フレームの画像データ)は、記憶装置305内に記録される。307はCRTや液晶画面などにより構成される表示装置で、各種の画像や文字などを表示する。308は通信I/F(インターフェース)で、本動画像符号化装置はこの通信I/F308、そしてLAN、公衆回線、無線回線、放送電波等のネットワーク309を介して外部とデータ通信を行なう。
302は、上述の各部を繋ぐバスやネットワークを含む通信路である。
次に、上記構成を備える動画像符号化装置が行なう、カメラ306により撮像され、記憶装置305に記録された動画像を符号化し、符号化結果を通信I/F308を介してネットワーク309に送出する処理について説明する。なお、符号化方式としてH.264符号化方式を例にとって説明するがこれに限定されず、2フレーム以上の複数フレームを参照して符号化する符号化方式であれば構わない。また、説明を容易にするために前方向予測のみとするが、これに限定されない。さらに、一定の間隔でフレーム内符号化を行なうこととし、それ以外はフレーム間符号化を行なうこととする。
端末装置303に備わっている不図示のキーボードやマウスを用いて符号化指示を入力すると、この指示はCPU300に通知され、CPU300は各部の初期化を行なう。またCPU300は、CPU300に後述の動画像符号化処理を実行させるためのソフトウェア、CPU300に後述の通信処理を行わせるためのソフトウェア等のソフトウェアのプログラムやデータを記憶装置305から読み出してメモリ301にロードする。
図6はメモリ301内のメモリマップの一例を示す図である。同図に示すように、メモリ301には、動画像符号化ソフトウェア、通信ソフトウェアを記憶するためのエリアが設けられているとともに、これらソフトウェアを制御するなどの処理をCPU300に実行させるためのOS(オペレーティングシステム)を記憶するためのエリアも備えている。また、後述する画像エリア(1〜9)、符号エリア、ワーキングエリアも備える。
図7は、CPU300が、この動画像符号化ソフトウェア、通信ソフトウェアを実行することでなされる処理のフローチャートである。
先ず、メモリ301上の各画像エリア、符号エリアをクリアし、ヘッダ情報を生成して符号エリアに格納する(ステップS201)。このとき、ワーキングエリア上に区間を表すテーブルの領域を確保する。テーブルの内容(構成例)を図9に示す。
各レコードは有効フラグ、区間始点値、区間終点値、代表フレーム番号からなり、レコードの数は最大、参照画像を格納する画像エリアの個数になる。本実施形態では、画像エリア1は入力画像を格納するので参照画像は8フレームとなる。レコードxの有効フラグ、区間始点値、区間終点値、代表フレーム番号をそれぞれF(x)、S(x)、E(x)、D(x)とする。
図7に戻って、次に、全てのフレームの符号化が終了したか否かの判定を行なう(ステップS202)。全てのフレームの符号化処理を行っていない場合には処理をステップS203に進め、記憶装置305から、カメラ306が撮像した動画像のうち、1フレーム分のデータを読み出して、メモリ301の画像エリアに格納する(ステップS203)。ステップS203における処理が最初の場合には、画像エリア1に格納する。なお、格納するフレームのデータには、このフレームのフレーム番号も含まれている。
符号化するフレームがフレーム内符号化を行なうフレームであれば、処理をステップS214に進め、そうでなければ処理をステップS205に進め、ステップS203で画像エリアに格納したフレームの画像と、代表フレームである画像データとの動き補償を行なう(ステップS250)。
フレーム内符号化を行なう場合、イントラ予測を行ないながらフレーム内符号化を行なう。(ステップS210)次に、通信ソフトウェアを実行することにより、メモリ301上の符号エリアの符号化データを通信インターフェース308を介して通信回路309に出力し、その後に、メモリ301上の符号エリアの該当する部分をクリアする(ステップS211)。
図8は、ステップS205における処理の詳細を示すフローチャートである。
先ず、レコード数をカウントするための変数xに0を代入して初期化する(ステップS250)。次に、変数xを参照し、変数xの値が、最大のレコード数に達したか否かを判断することで、全レコードについて動き補償処理が終了したか否かを判定し(ステップS251)、終了していれば処理を図7のステップS206に進め、終了していなければ処理をステップS252に進める。
全レコードについて動き補償処理が終了していない場合、レコードxに有効なデータが格納されているか否かを示す有効フラグF(x)を参照し、0か否かを判断する(ステップS252)。
F(x)=0の場合、すなわちレコードxに有効なデータが格納されていない場合(例えば、F(x)=S(x)=E(x)=D(x)=0の場合)、処理をステップS253に進め、変数R(x)に最大数MAXを代入する(ステップS253)。そして変数xの値を1つインクリメントし(ステップS256)、処理をステップS251に戻す。
一方、F(x)≠0の場合、すなわち、レコードxに有効なデータが格納されている場合、処理をステップS252からステップS254に進め、変数R(x)に0を代入し、初期化する(ステップS254)。そして次に、ステップS257〜ステップS259の処理を、ステップS203で画像エリアに格納したフレームの画像を構成する全てのマクロブロックについて行ったか否かを判断する(ステップS255)。
ステップS203で画像エリアに格納したフレームの画像を構成する全てのマクロブロックについてステップS257〜ステップS259の処理を行った場合には処理をステップS256に進める。
一方、ステップS203で画像エリアに格納したフレームの画像を構成する全てのマクロブロックについてステップS257〜ステップS259の処理を行っていない場合には処理をステップS255からステップS257に進め、図9に示したテーブルを参照し、代表フレーム番号D(x)のフレームデータを読み出し、ステップS203で画像メモリに格納したフレームの画像と比較しながら周知の動きベクトルの探索処理を行なう(ステップS257)。
そして、ステップS203で画像エリアに格納した画像と、この動きベクトルに基づいて生成されるこの画像の予測画像との予測誤差ρを求める(ステップS258)。予測誤差を求めるための処理については上記実施形態と同様、周知の技術である。そして求めた予測誤差ρを変数R(x)に加算する(ステップS259)。そして処理をステップS255に戻し、全てのマクロブロックについてステップS257〜ステップS259の処理を繰り返す。これにより、代表フレーム番号D(x)のフレームの画像と、ステップS203で画像エリアに格納された画像とに基づいた予測誤差を求めることができる。
また、以上の処理を、F(x)≠0である全てのレコードについて行なうことにより、各代表画像毎に、ステップS203で画像メモリに格納された画像の予測画像との予測誤差を求めることができる。
図7に戻って、各代表画像毎に、ステップS203で画像エリアに格納された画像の予測画像との予測誤差を求めると、次に、全てのx(本実施形態では0から7)についての変数R(x)の値を参照し、変数R(x)の値を最小にする変数xの値(x_m)を特定し、図9のテーブルからS(x_m)、E(x_m)のデータを読み出すことで、S(x_m)を始点値、E(x_m)を終点値とする区間を、動き補償を行なう区間として選択する(ステップS206)。
そして、ステップS203で画像エリアに格納された画像を、ステップS206で選択された区間内の各フレームの画像との間で上記周知の動き補償による符号化処理であるフレーム間符号化を行なう(ステップS207)。符号化結果のデータはメモリ301上の符号エリアに格納される。また、局所復号された画像データは最も古いフレーム番号の画像エリアに格納される。また、このときの動きベクトル探索を行なった際に算出される予測誤差をマクロブロックごとに求め、その総和値をβとして求めておく。
次に、通信ソフトウェアを実行することにより、メモリ301上の符号エリアの符号化データを通信インターフェース308を介して通信回路309に出力し、その後に、メモリ301上の符号エリアの該当する部分をクリアする(ステップS208)。
次に、ステップS207で求めた上記βの値と、メモリ301の所定のエリアに記憶されている閾値Thとを比較し、β≧Thであるか否かを判断する(ステップS209)。
β≧Thの場合、ステップS212にて、有効フラグが0のレコードを検出し、そのレコードの有効フラグを1にし、その始点値と終点値に符号化したフレームの番号を格納する。もし有効フラグが全て1であれば、各レコードの始点値を比較し、最も小さい(古い)区間にレコードに上書きする。ステップS213にて、代表フレーム番号に符号化したフレームの番号を格納する。
ステップS214にて、図9のテーブルで、復号画像を上書きしたフレームの属するレコードの終点値を1つ繰り上げる。また、最新の区間(符号化したフレームの直前の区間)の終点値を符号化したフレームの番号に変更する。
次のフレームの処理を行なうためにステップS202に戻る。
このような一連の選択動作により、参照するフレーム数を減らし、高速に動き補償処理を実現しながら予測誤差の増大を抑えることができる。
また、符号化時に計算される動き補償時の誤差によって区間の更新を行なうかどうか判断することで、新たな計算を生じることがないため、処理規模の増大を最小限に抑える効果もある。
なお、本実施形態では参照するフレームを8フレームとしたが、これに限定されず、画像エリア等を必要な量だけ確保することでその他の枚数の参照にも対応できることは明らかである。
また本実施形態に係る上記処理を第1、2の実施形態のように、専用のハードウェアでもって実現するようにしても良い。
また本実施形態では、符号化結果は通信インターフェース308を介して外部に出力したが、これに限定するものではなく、例えば、記憶装置305に記録するようにしても良い。
また本実施形態では、カメラ306で撮像された画像データは記憶装置305に一旦記録する例を取ったが、これに限定されず、直接メモリ301の画像エリアに格納してももちろん構わない。
[第4の実施形態]
第3の実施形態とは異なる符号化処理について説明する。
図10は、本実施形態に係る動画像符号化処理のフローチャートである。なお、本実施形態に係る動画像符号化装置は第3の実施形態と同様の構成を備えるものであるとする。従って、図10に示すフローチャートに従った処理は、CPU300が実行する。
また、図10において、図7と同じ処理ステップ部分には同じステップ番号をつけており、その説明を省略する。
フレーム間符号化を行なう場合、先ず、区間の参照回数を記録するための変数T(x)に0を代入し、初期化する(ステップS300)。次に、全てのスライスの符号化が終了したか否かを判断し(ステップS301)、終了していなければ処理をステップS302に進め、図8に示したフローチャートに従った処理をスライス単位で行ない、変数R(x)の値を求める(ステップS302)。
そして、ステップS206と同様にして(本実施形態の場合にはスライス単位に)区間を設定する(ステップS303)。そして設定した区間に対する参照回数を示す変数T(x)の値を1つインクリメントする(ステップS304)。このときの変数xの値は、ステップS303で設定した区間(始点値、終点値)を格納するレコードxの値である。
そして符号化対象のスライスに対して上記実施形態と同様な処理により符号化処理を行なう(ステップS305)。
一方、全てのスライスに対する符号化処理が完了している場合、処理をステップ208に進め、第3の実施形態と同様に、符号化データを出力する(ステップS208)。次に、変数T(x)の値、及び変数xの値を参照し、変数T(x)の値を最大にする変数xの値は最大値であるか否かを判断する(ステップS306)。すなわち、最もよく参照された区間が最新区間か否かの判断を行なう。
最もよく参照された区間が最新区間ではない場合、処理をステップS212に進め、第3の実施形態と同様にしてステップS212からステップS213の処理を行なう。
一方、最もよく参照された区間が最新区間である場合、処理をステップS214に進め、第3の実施形態と同様にして区間変更処理を行ない(ステップS214)、更新された区間の代表フレームを更新する(ステップS307)。
ステップS307における処理をより詳細に説明すると、先ず更新された区間のレコードから区間の始点値S(x)、終点値E(x)を読み出す。新たな区間の代表フレーム番号D(x)は次式にしたがって算出して更新する。
D(x)=(S(x)+E(x))/2 (3)
このような一連の選択動作により、参照するフレーム数を減らし、高速に動く補償処理を実現しながら、予測誤差の増大を抑えることができる。
また、代表フレームを区間の更新と共に行なうので、常に、最適な代表フレームを選択できる。代表フレームを区間の中央とすることによって、時間的に区間をよりよく代表することが可能にもなる。
また、代表フレームを区間の中央としたが、これに限定されず、区間の始点、終点の両フレームとしても構わないし、区間内に複数枚にしてももちろん構わない。
なお、本実施形態においては参照するフレームを8フレームとしたが、これに限定されず、画像エリアなどを必要な量を確保することでその他の枚数の参照にも対応できることは明らかである。
[第5の実施形態]
図12は、本実施形態に係る動画像符号化装置の構成を示すブロック図である。本実施形態では、H.264符号化方式をベースにとって説明するが、これに限定されない。また、説明を容易にするため、過去のフレームを参照する前方向予測を例に取るが、これに限定されず、両方向予測に適用してももちろん構わない。また、説明を容易にするため、参照フレームを3フレームとして説明するが、これに限定されない。
同図において519〜523は動画像を構成する各フレームの画像(入力画像)を格納するフレームメモリである。
525は入力先を選択して出力するセレクタである。51はフレーム内符号化/フレーム間符号化のモードで出力を選択するセレクタ、52はH.264符号化方式によるイントラ予測を行なうイントラ予測器、53は動き予測誤差を求める差分器である。
54は整数型直交変換を行ない、係数を量子化する変換/量子化器、57はその逆の作用を施す逆量子化/逆変換器である。58は動き予測誤差を加算する加算器である。55は量子化結果を符号化するエントロピー符号化器、56は発生した複数フレーム分の符号を格納するバッファである。
59、510、511、512はフレームメモリで、局所復号された画像データとフレームの番号をフレーム単位で格納する。513は入力画像と復号された画像データから最適な動きベクトルを該当するフレームから抽出する動き推定器、514は動き推定器513で算出された動きベクトルと該当するフレームの情報から予測画像を生成する動き補償器である。
515は算出された動きベクトルと該当するフレームの情報から動きの情報を符号化する動き符号化器である。517はフレームメモリ59〜512の入出力を制御するフレームメモリ制御器、516はバッファ56に格納された符号化データと参照情報を合成して出力する出力器である。518は入力画像を比較して代表フレームを判定する代表フレーム判定器である。524は代表フレーム判定器518が代表フレームであると判定した際に、この代表フレームのフレーム番号を出力器516に出力する代表フレームフラグ発生器である。
上記構成を備える本実施形態に係る動画像符号化装置が行なう処理について以下、説明する。
符号化に先立ち、本符号化データが代表フレームを参照する方式であることを示す符号を代表フレームフラグ発生器524が生成して出力器516に出力する。この符号はH.264符号化方式と互換性を保つために、ユーザデータとして符号化されることとするがこれに限定されず、電子的な透かしとして埋め込みを行なってももちろん構わない。
さらに、参照に用いることができるフレーム数などを含むヘッダ情報を出力器516が生成して出力する。このとき、参照に用いることのできるフレーム数は3としておく。また、各フレームメモリは0にリセットされる。
本装置に入力された各フレームの画像データはフレームメモリ519〜523に順に格納される。本実施形態に係る動画像符号化装置に備わっている入力画像格納用フレームメモリの数は5つであるので、一度に格納しておく入力画像の数は5つであるが、入力画像格納用フレームメモリの数はこれに限定するものではないので、当然、一度に格納しておく入力画像の数もこれに限定するものではない。
フレームメモリ519〜523のそれぞれに入力画像が格納されると、代表フレーム判定器518は各フレーム間相違度Rを求める。ここでは説明を容易にするため、第1の実施形態と同様に、それぞれの画像において位置的に対応する画素間の画素値の差分の絶対値の総和を相違度Rとする。
すなわち、フレームメモリ519に格納されている第Nフレームの画素の値をXN(i,j)(i,jは画素の位置)、フレームメモリ520に格納されている第(N+1)フレームの画素の値をXN+1(i,j)、フレームメモリ521に格納されている第(N+2)フレームの画素の値をXN+2(i,j)、フレームメモリ522に格納されている第(N+3)フレームの画素の値をXN+3(i,j)、フレームメモリ523に格納されている第(N+4)フレームの画素の値をXN+4(i,j)とする。
このとき、第Nフレームとその他のフレーム(第(N+1)フレーム目〜第(N+4)フレーム目の各フレーム)との相違度RNは、以下の式でもって求められる。
RN=ΣΣ(|XN(i,j)―X(N+1)(i,j)|)
+ΣΣ(|XN(i,j)―X(N+2)(i,j)|)
+ΣΣ(|XN(i,j)―X(N+3)(i,j)|)
+ΣΣ(|XN(i,j)―X(N+4)(i,j)|) (4)
ここで「ΣΣ」は全てのi、jについて加算することを示している。
同様に、第(N+1)フレームとその他のフレームとの相違度R(N+1)は、以下の式でもって求められる。
RN+1=ΣΣ(|XN+1(i,j)―XN(i,j)|)
+ΣΣ(|XN+1(i,j)―X(N+2)(i,j)|)
+ΣΣ(|XN+1(i,j)―X(N+3)(i,j)|)
+ΣΣ(|XN+1(i,j)―X(N+4)(i,j)|) (5)
以下、同様に相違度R(N+2)、R(N+3)、R(N+4)を求める。
代表フレーム判定器518はこれら相違度RN〜R(N+4)を参照し、最も小さい相違度となったフレームを代表フレームとして選択する。例えば、相違度RN〜R(N+4)のうち、R(N+2)が最も小さい場合、第(N+2)フレーム目を代表フレームとして選択する。
そして代表フレーム判定器518は、最も小さい相違度となったフレームのフレーム番号を保持しておく。
続いて、セレクタ525はフレーム519〜523のフレームデータを順に読み出し、セレクタ51に入力する。セレクタ51は一定間隔、例えば15フレーム毎にフレームをフレーム内符号化するために、出力にイントラ予測器52を選択し、そうでない場合は、フレーム間符号化するために出力に差分器53を選択する。イントラ予測器52が選択された場合、入力されたフレームデータはブロック毎に予測が行なわれる。
一方、差分器53が選択された場合は、入力された画像データはマクロブロック単位で動き推定器513に入力される。
そして、動き推定器513、動き補償器514、動き符号化器515は図1の動き推定器13、動き補償器14、動き符号化器15と同様の処理を行ない、これら5フレームの各フレームに対する動き補償による符号化処理を行なう。なお、これら5フレームの各フレームに対する動き補償を行なう際に参照する画像は以下のようにして生成される画像である。
すなわち、フレームメモリ59〜512に保持しておいた各代表フレームのデータの符号化対象フレームに対する予測画像を生成し、そしてそれぞれの代表フレームの予測画像と符号化対象フレームの画像との誤差(予測誤差)を求め、そして、符号化対象フレームとの予測誤差が最も小さい代表フレームを参照画像とする。
ここで本実施形態に係る特徴は、本実施形態のように一度に5フレーム分しか符号化できなくても、後で5フレーム分の符号化を行なう際にはフレームメモリ59〜512には代表フレームの画像が記憶されているので、一度に5フレーム以上の符号化を行なうことに等しくなる点にある。
また、代表フレーム判定器518は、フレームメモリ519〜523から読み出す各フレームデータのうち、保持された代表フレームの番号によって代表フレームを検知すると、そのフレーム番号を代表フレームフラグ発生器524に出力する。代表フレームフラグ発生器524はこのフレーム番号を出力器516に出力する。なお、代表フレームフラグ発生器524は、通知された最新のフレーム番号を保持しており、新たに通知されるまで、現在保持しているフレーム番号を出力する。なお、代表フレームが特定できるのであれば、フレーム番号に限定するものではない。
最後に、バッファ56に格納された5フレーム分の各フレームの符号化データは出力器516により、代表フレームフラグ発生器524からの「代表フレームのフレーム番号」を付加して外部に出力される。なお、代表フレームが特定できるのであれば、フレーム番号に限定するものではない。
そして、イントラ予測器52、差分器53の何れにおいても注目フレームデータに対する予測誤差が出力されるので、この予測誤差が変換/量子化器54、逆量子化/逆変換器57を介してそのままの状態で加算器58で、後述する動き補償器514から入力される「注目フレームデータに対する予測画像」と加算される。例えば予測誤差が差分器53から出力された場合、この予測誤差とは、セレクタ525から入力された注目フレームデータと、この注目フレームデータに対する予測画像との差分であるので、加算器58がこの差分と動き補償器514から入力される「注目フレームデータに対する予測画像」と加算することにより、注目フレームデータが復元される。フレームメモリ制御器517は代表フレーム判定器518で打表フレームと判定された場合に、復元されたフレームデータがフレームメモリ59〜512に格納するように制御する。
図13は、以上説明した本実施形態に係る符号化処理のフローチャートである。
先ず、出力器516は、以下行なう符号化方式が代表フレームを用いる符号化方式であることを示す情報や、参照するフレームの最大数情報を含むヘッダ情報を生成して出力する(ステップS51)。
次に、符号化処理すべき対象のフレーム全てについて以下の符号化処理を行っていない場合には(ステップS52)、処理をステップS53に進め、以降の処理を行なう。代表フレーム判定器518は、フレームメモリ519〜523の各フレームメモリにフレームデータが格納される(すなわち5フレーム分のフレームデータがフレームメモリ519〜523のそれぞれに用意される)まで処理を待つ(ステップS53)。従ってその間、各フレームメモリ519〜523にはそれぞれ1フレームずつフレームデータが格納される(ステップS54)。
フレームメモリ519〜523の各フレームメモリにフレームデータが格納される(すなわち5フレーム分のフレームデータがフレームメモリ519〜523のそれぞれに用意される)と、処理をステップS55に進め、代表フレーム判定器518は、上記処理により、この5フレーム分の各フレームについて、相違度RNを求める(ステップS55)。そして求めた5つの相違度のうち、最小の相違度となったフレームを代表フレームとして決定する(ステップS56)。その場合、代表フレーム判定器518は、代表フレームのフレーム番号を代表フレームフラグ発生器524に出力する。
そして以下、この5フレーム分の各フレームを符号化する。
先ず、この5フレーム分全てについて符号化処理を行ったかを判断し(ステップS57)、行った場合には処理をステップS52に戻し、以降の処理を繰り返す。一方、この5フレーム分全てについて符号化処理を行っていない場合には処理をステップS58に進め、符号化しようとするフレームが代表フレームであるかを判断する。
符号化しようとするフレームが代表フレームであるか否かは、符号化しようとするフレームのフレーム番号が代表フレーム判定器518により得られるフレーム番号と一致するか否かでもって判定可能であるので(一致する場合には代表フレームであると判定)、この判定を行ない(ステップS58)、符号化対象フレームが代表フレームである場合には処理をステップS59に進め、代表フレームフラグ発生器524は、代表フレームのフレーム番号を出力器516に出力する(ステップS59)。そして符号化対象フレームに対して動き補償による符号化処理を行なうのであるが、この符号化処理は上述の通り、第1の実施形態と同じである。
そして符号化した代表フレームの画像を第1の実施形態と同様にして復号し、復号画像をフレームメモリ59〜512の内、最も古いフレーム番号のフレームを格納しているフレームメモリに格納する(ステップS511)。
一方、符号化しようとするフレームが代表フレームではない場合、処理をステップS58からステップS512に進め、ステップS510と同様の処理でもって符号化を行なう(ステップS512)。
以上の処理により、バッファ56には、5フレーム分の各フレームの符号化データが格納されるので、出力器516はバッファ56からこれら各フレームの符号化データに、代表フレームフラグ発生器524から得られる「代表フレームのフレーム番号」を付加して外部に出力する(ステップS513)。
このような一連の選択動作により、少ないフレーム数で長い時間のフレームを参照することが可能になり、符号化時にメモリ容量を抑制するといった効果がある。また、代表フレームをその他のフレームとの類似度の高いフレームを選択することで、符号化効率を向上させることができる。
また、代表フレームの符号化データを、ユーザデータなどの復号時に無視することができる符号化データとすることで既存のH.264と互換性を保つことも可能となる。
また、本実施形態では参照の対象をフレームとしたが、これに限定されず、スライス等のフレームを分割した単位で行なってももちろん構わない。
また、代表フレームの符号化方式をフレーム内符号化としてもよく、その場合、高い画質のフレームを参照画像データとすることで画質が向上するという効果がある。
[第6の実施形態]
本実施形態は、第5の実施形態に係る動画像符号化装置が出力した符号化結果を復号する復号装置について説明する。
図14は、本実施形態に係る復号装置の構成を示す図である。
5100は符号化データを入力し、後段に分離して出力する入力器である。この符号化データには第5の実施形態に係る説明の通り、代表フレームのフレーム番号が付加されている。
5101は符号化データを復号して量子化結果を得るエントロピー復号器である。5102は量子化結果を逆量子化し、整数型直交変換の逆変換を行なう逆量子化/逆変換器である。5103はH.264符号化方式によるイントラ予測を行なうイントラ予測器であり、5104は逆量子化/逆変換器5102からの動き予測誤差を、動き補償器5110からの予測画像に加算する加算器である。5113は復号した画像を一時格納するフレームメモリである。
5105、5106、5107、5108はフレームメモリであり、復号された画像データとそのフレーム番号をフレーム単位で格納する。本実施形態では第5の実施形態に係る動画像符号化装置が出力した符号化結果を復号するためにフレームメモリの数を4としたが、これに限定するものではない。
5109は動きベクトルと該当するフレームの情報を復号する動き復号器であり、5110は動き復号器5109で復号された動きベクトルと該当するフレームの情報から予測画像を生成する動き補償器である。5111は入力器5100が入力した符号化データに付加されていた「代表フレームのフレーム番号」を参照し、後段のフレームメモリ制御器5112に通知する代表フレーム解析器、5112はフレームメモリ5105〜5108の入出力を制御するフレームメモリ制御器である。
以上の構成を備える、本実施形態に係る復号装置が行なう復号処理について、以下説明する。
先ず、入力器5100は代表フレームを参照する方式である符号参照に用いることができるフレーム数などを含むヘッダ情報を入力し、これを解釈し、後段の各部を初期化する。
そして入力器5100は、各フレームの符号化データ(各フレームの代表フレームのフレーム番号が付加されている)を読み込み、この符号化データに付加されている「代表フレームのフレーム番号」のデータを代表フレーム解析器5111に出力する。
また入力器5100は、この符号化データのうち、動きベクトルに関する符号化データを動き復号器5109に、画像に関する符号化データをエントロピー復号器5101に出力する。
フレームの符号化モードがフレーム内符号化であれば、エントロピー復号器5101は入力された符号化データを復号し、量子化結果を再生する。逆量子化/逆変換器5102はこれを逆量子化し、整数型直交変換の逆変換を施して画像データを再生する。
再生された画像はイントラ予測器5103でブロックごとの予測を行なって再生画像を得る。復号された画像データはフレームメモリ5113に出力される。
フレームメモリ制御器5112は、代表フレーム解析器5111から通知されたフレーム番号と同じフレーム番号の復号データ(すなわち、代表フレームの復号画像)がイントラ予測器5103、もしくは加算器5104から出力されると、この復号画像データを、フレームメモリ5105〜5108のうち最も古いフレーム番号のフレームを格納しているフレームメモリに格納する。
なお、イントラ予測器5103、もしくは加算器5104から出力された復号画像が代表フレームの復号画像ではない場合には、フレームメモリ5105〜5108への復号画像の書き込みは行なわない。
そしてフレームメモリ5113に格納された復号画像のデータは所定のタイミング(例えば所定フレーム数毎、もしくは所定時間毎)でもって外部に出力する。
一方、フレームの符号化モードがフレーム間符号化であれば、動き復号器5109は動きベクトルと参照するフレームの情報を復号し、これに従って動き補償器5110がフレームメモリ5105〜5108を参照して予測誤差を算出し、加算器5104に出力する。エントロピー復号器5101は入力された符号化データを復号し、量子化結果を再生する。逆量子化/逆変換器5102ではこれを逆量子化し整数型直交変換の逆変換を施して予測誤差を再生する。再生された予測誤差は加算器5104でブロックごとに加算を行なって再生画像を得て、フレームメモリ5113に格納する。この場合、フレームメモリ5105〜5108への書き込みは行なわれない。最後に、フレームメモリ5113に格納された画像データは外部に出力される。
すなわち、上記復号処理は、代表フレームの復号画像をフレームメモリ5105〜5108に格納する処理、及び、参照する画像が代表フレームの画像であること以外は、動き補償による符号化処理の符号化結果を復号する周知の処理である。
図15は、以上説明した本実施形態に係る復号処理のフローチャートである。
先ず入力器5100は、符号化データに先立って入力される上記ヘッダ情報を参照し、解析する(ステップS5101)。特に参照可能なフレーム数を解析して保持しておく。
次に、全てのフレームの復号が終了したか否かを判断し(ステップS5102)、終了していなければ処理をステップS5103に進め、入力器5100は各フレームの符号化データを入力する(ステップS5103)。次に、この符号化データに付加されている、このフレームの代表フレームのフレーム番号を、この符号化データから分離して代表フレーム解析器5111に入力し、代表フレーム解析器5111は、このフレーム番号のデータをフレームメモリ制御器5112に出力する(ステップS5104)。
そして、動き復号器5109、動き補償器5110、エントロピー復号器5101、逆量子化/逆変換器5102、イントラ予測器5103もしくは加算器5104により、入力された符号化データをH.264符号化方式の復号方法に従って復号する(ステップS5105)。復号結果のデータ、すなわち、復号画像のデータはフレームメモリ5113に出力される。
フレームメモリ制御器5112には、現在復号されているフレームの代表フレームのフレーム番号がステップS5104で通知されているので、現在復号されているフレームが代表フレームであるか否かを、現在復号されているフレームのフレーム番号を参照することで判断することができる。
よってこの判断により、現在復号されているフレームが代表フレームである場合には処理をステップS5107に進め、フレームメモリ5105〜5108のうち、最も古いフレーム番号のフレームを格納しているフレームメモリを特定し(ステップS5107)、特定したフレームメモリに、復号した代表フレームの復号画像データを格納する(ステップS5108)。
そして、フレームメモリ5113に出力された復号画像のデータを外部に出力する(ステップS5109)。
このような一連の選択動作により、代表フレームの符号化データのみを動き補償時に参照することが可能になり、参照画像を格納するメモリを少なくできるといった効果がある。
また本実施形態に係る復号装置は、図14に示した構成を有するハードウェアとしたが、これに限定するものではなく、他にも例えば、図14に示した各部の機能をソフトウェアでもって実装し、このプログラムをPC(パーソナルコンピュータ)やWS(ワークステーション)などのコンピュータにインストールし、このコンピュータのCPUがこれを実行することにより、このコンピュータは上述した復号処理を実行することになる。よってこの場合、このコンピュータをもってして本実施形態に係る復号装置とすることができる。
[第7の実施形態]
図16は、本実施形態に係る動画像符号化装置の構成を示す図である。なお同図において図12と同じ部分については同じ番号をつけており、その説明を省略する。
5200は符号化しようとする動画像を構成する各フレームの画像(入力画像)を保持するフレームメモリである。5213は動き推定器であり、入力画像データとフレームメモリ59〜512の画像データとを比較して動きベクトルとその参照したフレーム番号を出力する。また、そのときの誤差も出力する。
5202はフレームカウンタであり、フレームメモリ5200から1フレーム出力されるたびに1つカウントアップする。すなわち、フレームメモリ5200から出力されたフレームの数をカウントする。
5201はセレクタで、フレームカウンタ5202によるカウント値を整数Mで割った余りがN(<M)の時に、出力先をイントラ予測器52に切り替え、それ以外では出力先を差分器53に切り替える。なお、このM、Nの値については特に限定するものではなく、要は、セレクタ5201は通常は出力先を差分器53とし、周期的に1回だけ出力先をイントラ予測器52に切り替える。よってこの処理が達成されるのであれば、その構成は特に限定するものではない。以下の説明では例としてM=5、N=1とする。
5218は代表フレームを判定する代表フレーム判定器である。5224は代表フレーム判定器5218が代表フレームであると判定した際に、この代表フレームのフレーム番号を出力器516に出力する代表フレームフラグ発生器である。なお、代表フレームフラグ発生器5224は、通知された最新のフレーム番号を保持しており、新たに通知されるまで、現在保持しているフレーム番号を出力する。
以上の構成を備える、本実施形態に係る動画像符号化装置が行なう処理について以下、説明する。
第5の実施形態と同様に、符号化に先立ち、本符号化データが代表フレームを参照する方式であることを示す符号を代表フレーム符号化器5224が生成して出力器516に出力する。さらに、参照に用いることができるフレーム数などを含むヘッダ情報を出力器516が生成して出力する。このとき、参照に用いることのできるフレーム数は3としておく。また、各フレームメモリは0にリセットされる。また、フレームカウンタ5202が保持するカウント値を0にリセットする。
そしてフレームメモリ5200には、各フレームの画像データが入力され、後段のセレクタ5201に出力するのであるが、フレームカウンタ5202はこの出力毎にカウント値を1つカウントアップする。代表フレーム判定器5218はこのカウント値を常に参照し、カウント値を5で割った余りが1である時にフレームメモリ5200から出力されたフレームを代表フレーム、カウンタ値がそれ以外の時にフレームメモリ5200から出力されたフレームを非代表フレームと判定する。
そして上述の通り、フレームメモリ5200から出力されたフレームデータが代表フレーム、非代表フレームの何れであるかに応じてイントラ予測器52、もしくは差分器53を介して変換/量子化器54に予測誤差として出力されるのであるが、この予測差分が代表フレームの予測差分である(代表フレーム判定器5218が代表フレームであると判定した)場合、第5の実施形態と同様に、逆量子化/逆変換器57、加算器58を動作させて代表フレームの画像を復号し、復号した画像をバッファ56に出力するとともに、復号した画像をフレームメモリ59〜512のうち、最も古いデータに画像データとフレーム番号上書きするようにフレームメモリ制御器517に指示を出す。
更に代表フレームフラグ発生器5224は、代表フレーム判定器5218が代表フレームであると判定した際に代表フレーム判定器5218から送出されたこの代表フレームのフレーム番号を出力器516に出力する。
一方、予測差分が代表フレームの予測差分ではない(代表フレーム判定器5218が代表フレームではないと判定した)場合、第5の実施形態と同様に、逆量子化/逆変換器57、加算器58を動作させて代表フレームの画像を復号し、復号した画像をバッファ56に出力するのであるが、復号した画像をフレームメモリ59〜512には格納しないよう、フレームメモリ制御器517に指示を出す。
また、第5の実施形態と同様に、セレクタ5201によって一定の間隔でフレーム内符号化を行なう場合、入力されたフレームデータはマクロブロック単位でイントラ予測器52に入力され、ブロック毎に予測が行なわれる。その結果は変換/量子化器54で整数型直交変換と量子化が行なわれ、その結果はエントロピー符号化器55に入力される。
エントロピー符号化器55では、入力された量子化結果をエントロピー符号化し、バッファ56にフレーム単位で格納する。代表フレームであれば、逆量子化/逆変換器57では、入力された量子化結果から復号画像を得る。
そしてフレームメモリ制御器517の指示に従って、フレームメモリ59〜512のうち、空いているフレームメモリ、または最も古い代表フレームの画像データのフレームメモリに復号画像データとフレーム番号を格納する。非代表フレームであれば、フレームメモリ59〜512への格納は行なわない。
そしてバッファ56に格納された符号化データは出力器516で代表フレームフラグ発生器5224が出力する代表フレームを付加して出力される。
一方、フレーム間符号化を行なう場合についても第5の実施形態と同じである。すなわち、セレクタ201はフレームデータの出力先を差分器3に切り替える。フレームメモリ5200からはマクロブロック単位でセレクタ5201、動き推定器513に入力され、動き推定器513はフレームメモリ59〜512の内容を読み出し、動きベクトルとフレーム番号を算出し、動き補償器514で予測画像を生成し、差分器53に入力する。差分器53は予測誤差を求め、その結果は変換/量子化器54に入力され、整数型直交変換と量子化を行なう。その結果はエントロピー符号化器55に入力される。エントロピー符号化器55では、入力された量子化結果をエントロピー符号化し、バッファ56にフレーム単位で格納する。
バッファ56に格納された符号化データは出力器516で代表フレームフラグ発生器5224が出力する代表フレームを付加して出力される。
図17は、以上説明した符号化処理のフローチャートである。なお、同図において図14と同じ処理ステップには同じステップ番号をつけており、その説明を省略する。
先ず、上記ステップS51の処理を行ない、次に、フレームカウンタ5202が保持するカウンタ値を0にリセットする(ステップS5200)。次に、全フレームについて符号化を行っていない場合には処理をステップS54に進め、上記ステップS54と同様の処理でもってフレームメモリ5200からフレームデータを後段の各部に出力する(ステップS54)。
そしてフレームメモリ5200から1フレームのフレームデータが出力される毎にフレームカウンタ5202が保持するカウンタ値を1つカウントアップする(ステップS5201)。現在のカウント値をMで割った余りが1の場合(すなわちステップS54でフレームメモリ5200から出力されたフレームのフレーム番号が(nM+1)の場合)、ステップS54でフレームメモリ5200から出力されたフレームが代表フレームであると判定し、処理をステップS5204に進め、先ず、代表フレームフラグ発生器5224により、代表フレーム判定器5218から送出されたこの代表フレームのフレーム番号を出力器516に出力する(ステップS5204)。次に、上記各部によりこの代表フレームに対してフレーム内符号化(イントラ符号化)を行ない(ステップS5205)、更に符号化結果を復号して復元画像を生成し、これをフレームメモリ59〜512のうち、上記条件に従ったフレームメモリに格納する(ステップS5206)。上述の通り、このようにフレームメモリに格納した代表フレームの画像データは、以降符号化されるフレームを符号化する際に参照されうるものである。
一方、現在のカウント値をMで割った余りが1にはならない場合(すなわちステップS54でフレームメモリ5200から出力されたフレームのフレーム番号が(nM+1)ではない場合)、ステップS54でフレームメモリ5200から出力されたフレームは代表フレームではないと判定し、処理をステップS5203に進め、上記各部によりこの非代表フレームに対してフレーム間符号化を行なう(ステップS5203)。
符号化された対象が代表フレーム、非代表フレームの何れであっても、その符号化結果はバッファ56に出力されるので、出力器516は、この符号化結果に代表フレームフラグ発生器5224から出力された「代表フレームのフレーム番号」を付加して外部に出力する(ステップS5206)。
このような構成と一連の選択動作により、一定間隔で代表フレームを設定することで符号化側のフレームメモリを削減することが可能になり、回路を小型化できコストを下げるといった効果がある。
[第8の実施形態]
本実施形態に係る動画像符号化装置は、第3の実施形態と同様の構成を有する装置である。以下では、本実施形態に係る動画像符号化装置によって、第3の実施形態に係る動画像符号化処理とは異なる動画像符号化処理を実行する場合について説明する。
本実施形態に係る動画像符号化装置は第3の実施形態と同様に、カメラ306により撮像され、記憶装置305に記録された動画像を符号化し、符号化結果をメモリ301に格納する、もしくは通信I/F308を介してネットワーク309に送出する。なお、符号化方式としてH.264符号化方式を例にとって説明するがこれに限定されず、2フレーム以上の複数フレームを参照して符号化する符号化方式であれば構わない。また、説明を容易にするために前後3フレームずつを参照することとするが、これに限定されない。
端末装置303に備わっている不図示のキーボードやマウスを用いて符号化指示を入力すると、この指示はCPU300に通知され、CPU300は各部の初期化を行なう。またCPU300は、CPU300に後述の動画像符号化処理を実行させるためのソフトウェア、CPU300に後述の通信処理を行わせるためのソフトウェア等のソフトウェアのプログラムやデータを記憶装置305から読み出してメモリ301にロードする。
図18はメモリ301内のメモリマップの一例を示す図である。同図に示すように、メモリ301には、動画像符号化ソフトウェア、通信ソフトウェアを記憶するためのエリアが設けられているとともに、これらソフトウェアを制御するなどの処理をCPU300に実行させるためのOS(オペレーティングシステム)を記憶するためのエリアも備えている。また、後述する画像エリア(1〜7)、符号エリア(1〜3)、ワーキングエリアも備える。なお、符号エリアの数が3であるのは、参照するフレーム数を3としているためであって、参照するフレーム数が異なれば、符号エリアの数もそれに応じて異ならせる。
図19は、CPU300が、この動画像符号化ソフトウェア、通信ソフトウェアを実行することでなされる処理のフローチャートである。
先ず、以下行なう符号化方式が代表フレームを用いる符号化方式であることを示す情報や、参照するフレームの最大数情報を含むヘッダ情報を生成し、メモリ301に保持しておく(ステップS5301)。
次に、全てのフレームの符号化が終了していない場合には処理をステップS5302からステップS5303に進め、3フレーム分の符号化が終了したか否かを判定する(ステップS5303)。3フレーム分の符号化処理を行っていない場合には処理をステップS5304に進め、記憶装置305から、カメラ306が撮像した動画像のうち、1フレーム分のデータを読み出して、メモリ301の画像エリアに格納する(ステップS5304)。ステップS5304における処理が最初の場合には、画像エリア1に格納する。
次に、ステップS5304で入力したフレームデータをフレーム間符号化/フレーム内符号化の何れかでもって符号化する(ステップS5305)。フレーム間符号化/フレーム内符号化の何れを行なう場合であっても、上記実施形態のいずれかの方法を適用することができる。本実施形態では、フレーム間符号化でもって符号化したものとする。
そしてステップS5305で符号化した結果を符号エリアに格納する(ステップS5306)。なお、ステップS5306における処理を最初に行った場合には、符号エリア1に格納する。
次に、ステップS5305で符号化したフレームの画像を上記実施形態と同様の処理を行なうことで復号し、復号結果(復号画像)を画像エリア2〜4のうち1つに格納する(ステップS5307)。なお、格納する際、各画像エリアに格納されているフレームデータのフレーム番号を参照し、最も古いフレーム番号のフレームデータを格納している画像エリアに格納する。
次に、ステップS5306で格納した画像と、ステップS5307でこの画像を復元した復元画像との歪みを計算する(ステップS5308)。この歪みを求めるための計算の一例として、例えば、2つの画像において位置的に対応する画素同士で画素値の差分の絶対値を計算し、画素毎に計算した差分の絶対値の総和値を計算することで、この1つの画像間の歪み求める。なお、この歪みを求めるための方法については特に限定するものではないが、要は、一度符号化され、そして復号した画像が元の画像とどれだけかけ離れたものになっているのか(相違)を示す指標が値として得られればよい。
そして処理をステップS5303に戻し、以降の処理を繰り返す。そして繰り返した結果、3フレーム分の符号化処理を行った場合、処理をステップS5303からステップS5309に進め、符号化した3フレーム分の各フレームについてステップS5308で求めた歪みを参照し、最も歪みの小さいフレームを、符号化した3フレームの各フレームを代表するフレームである代表フレームとして決定する(ステップS5309)。
そして、決定した代表フレームのフレーム番号を、符号エリアに格納した各符号化データに付加する(ステップS5310)。
そして、代表フレームの復号画像(画像エリア2〜4のいずれかのメモリに格納されており、フレーム番号でもって一意に1つ選択できる)を画像エリア5〜7内、最も古いフレーム番号のフレームを格納している画像エリアに格納する(ステップS5311)。
そして、通信ソフトウェアを実行することにより、メモリ301上の各符号エリアに格納されている各フレームの符号化データを通信インターフェース308を介して通信回路309に出力する(ステップS5312)。なお、ステップS5312では、各フレームの符号化データの出力先はこれに限定するものではなく、メモリ301中の所定のエリアに格納するようにしても良いし、記憶装置304,305などに保存するようにしても良い。
そして、次の3フレームを符号化するために処理をステップS5302に戻し、以降の処理を繰り返す。当然、次の3フレームが存在しない場合には同図に示したフローチャートに従った処理を終了する。
このような一連の選択動作により、符号化による歪みが最も少ないフレームを代表フレームとして選択することで、符号化による画質の劣化を防ぎ、劣化を最小に抑える効果がある。
なお、本実施形態では3フレームずつ符号化しているが、このフレーム数は特に限定するものではない。
[第9の実施形態]
本実施形態は、第8の実施形態に係る動画像符号化装置による符号化データを復号する復号装置に関するものである。本実施形態に係る復号装置は、第3の実施形態と同様の構成を有する装置である。
よって、本実施形態に係る復号装置と第8の実施形態に係る動画像符号化装置とを一体化し、同じ装置内で符号化、復号処理を行なうようにしても良い。その場合、第8の実施形態では、符号化結果をメモリ301内の所定のエリアに記録するなど、装置内で符号化結果を保持しておく必要がある。
また、本実施形態に係る復号装置と第8の実施形態に係る動画像符号化装置とを別個の装置にしてもよく、その場合、第8の実施形態では、符号化結果を通信インターフェース308を介して通信回路309に出力し、本実施形態に係る復号装置に入力する必要がある。
しかし以下の説明は何れの場合であっても本質的な処理は同じである。
図20はメモリ301内のメモリマップの一例を示す図である。同図に示すように、メモリ301には、H.264符号化データを復号する動画像復号ソフトウェア、通信ソフトウェアを記憶するためのエリアが設けられているとともに、これらソフトウェアを制御するなどの処理をCPU300に実行させるためのOS(オペレーティングシステム)を記憶するためのエリアも備えている。また、後述する画像エリア(1〜7)、符号エリア、ワーキングエリアも備える。なお、画像エリア1は復号画像を、画像エリア2〜7は参照画像を格納する為のものである。なお、画像エリア2〜7に画像を格納する際、画像エリア2〜7の順に格納する。
図21は、CPU300が、この動画像復号ソフトウェア、通信ソフトウェアを実行することでなされる処理のフローチャートである。
先ず、符号化データに先立って外部から、もしくはメモリなどの内部から入力される上記ヘッダ情報を参照し、解析するとともに、各種の初期化処理を行なう(ステップS5401)。
次に、全てのフレームの復号が終了したか否かを判断し(ステップS5402)、終了していなければ処理をステップS5403に進め、各フレームの符号化データをメモリ301上の符号エリアに入力する(ステップS5403)。次に、この符号化データに付加されている、このフレームの代表フレームのフレーム番号を、この符号化データから分離する(ステップS5404)。
そして入力された符号化データに対して第6の実施形態で説明したように復号処理を行ない、復号画像を画像エリア1に格納する(ステップS5405)。この復号処理の際、復号対象がフレーム間符号化によるものである場合には、画像エリア2〜7に格納されている参照画像を参照して復号する。また、復号したフレームのフレーム番号をワーキングエリアに格納する。
次に、ステップS5405で復号したフレームが代表フレームであるか否かを、ワーキングエリアに書き込んだフレーム番号を参照し、ステップS5404で分離したフレーム番号に一致するか否かで判断する(ステップS5406)。非代表フレームである場合には処理をステップS5407に進め、画像エリア2〜4のうち、最も古いフレーム番号のフレームデータを格納している画像エリアを特定し(ステップS5407)、特定した画像エリアに画像エリア1に格納されている画像を複写する(ステップS5408)。
一方、代表フレームである場合には処理をステップS5409に進め、画像エリア5〜7のうち、最も古いフレーム番号のフレームデータを格納している画像エリアを特定し(ステップS5409)、特定した画像エリアに画像エリア1に格納されている画像を複写する(ステップS5410)。
そして、画像エリア1に格納されている復号画像データを出力する(ステップS5411)。出力先は特に限定しないが、例えば表示装置307に出力し、表示しても良い。
そして、処理をステップS5402に戻し、以降の処理を繰り返す。
このような一連の選択動作により、時間的に遠いフレームを代表フレームとして保持し、時間的に近いフレームの両方を参照することで、少ない情報量で再生画像を得ることが可能になるという効果がある。
なお、本実施形態においては被参照情報を参照された最後のフレームの位置としたがこれに限定されず、最終的に参照された時刻などの情報でももちろんかまわない。
[第10の実施形態]
図23は本実施形態に係る動画像符号化装置の構成を示す図である。本実施形態では、H.264符号化方式をベースにとって説明するが、H.264と異なり、参照フレームは時間的に不連続のものを参照することになる。但し、ベースはH.264に限定されない。また、説明を簡単にするため、過去のフレームを参照する前方向予測を例に取るが、これに限定されず、両方向予測に適用してももちろん構わない。また、以下の説明では、フレームの画像データをフレームデータと呼称する場合もある。また、このフレームデータ(フレームの画像)には、このフレームのフレーム番号を示すデータも含まれているものとする。
図23において、619〜621は外部から入力された動画像の各フレームの画像(入力画像)のうち、後述する処理により選択された代表フレームの画像を格納するためのフレームメモリである。61はフレーム内符号化/フレーム間符号化のモードに従って出力先を選択するセレクタである。
62はH.264符号化方式によるイントラ予測を行なうイントラ予測器であり、63は動き予測誤差を求める差分器である。64は整数型直交変換を行ない、入力された係数を量子化する変換/量子化器であり、67はその逆の作用を施す逆量子化/逆変換器である。65は変換/量子化器64による量子化結果を符号化するエントロピー符号化器であり、66は発生した複数フレーム分の符号を格納するバッファである。
69、610、611、612はフレームメモリであり、局所復号された画像データとフレームの番号をフレーム単位で格納する。613は入力画像と復号された画像データから最適な動きベクトルを該当するフレームから抽出する動き推定器であり、614は動き推定器613で算出された動きベクトルと該当するフレームの情報から予測画像を生成する動き補償器である。615は算出された動きベクトルと該当するフレームの情報から動きの情報を符号化する動き符号化器である。
617はフレームメモリ69〜612の入出力を制御するフレームメモリ制御器であり、616はバッファ66に格納された符号化データを出力する出力器である。618は入力画像と代表フレームの画像とを比較して類似度を算出する類似度判定器である。622は、代表フレームのフレーム番号を出力器616に出力する代表フレームフラグ発生器である。
上記のように構成された動画像符号化装置における動画像の符号化動作を以下、説明する。
符号化に先立ち、本符号化データが代表フレームを参照する方式であることを示す符号を代表フレームフラグ発生器622が生成して出力器616に出力する。この符号はH.264符号化方式と互換性を保つために、ユーザデータとして符号化されることとするがこれに限定されず、電子的な透かしとして埋め込みを行なってももちろん構わない。
さらに、参照に用いることができるフレーム数などを含むヘッダ情報を出力器616が生成して出力する。このとき、参照に用いることのできるフレーム数は3としておく。また、各フレームメモリは0にリセットされる。
動画像を構成する各フレームの画像(入力画像)は順次セレクタ61、類似度判定器618に入力される。類似度算出器618は入力画像と、フレームメモリ619、620、621に格納されている代表フレームの画像データと比較を行ない、類似度を算出する。本実施形態ではこの類似度の計算方法として、入力画像と代表フレームの画像とで位置的に対応する画素同士の画素値の差分の絶対値を計算し、そして画素毎に計算した絶対値の総和を計算することで求めるが、計算方法はこれに限定するものではなく、他の計算方法を用いても良い。
このようにして類似度判定器618は入力画像と、3つの代表フレームの画像それぞれに対する類似度を求め、求めた3つの類似度のうち最小の類似度と所定の閾値との比較処理を行ない、最小の類似度が所定の閾値以上である場合には、この入力画像を代表フレームの画像として判定する。一方、最小の類似度が所定の閾値以下である場合には、この入力画像を非代表フレームの画像として判定する。
セレクタ61は、類似度判定器618が代表フレームと判定した入力画像に対しては、この入力画像の出力先をイントラ予測器62に切り替え、類似度判定器618が非代表フレームと判定した入力画像に対しては、この入力画像の出力先を差分器63に切り替える。
また、類似度判定器618は、入力画像が代表フレームの画像であると判定した場合には、この入力画像を、フレームメモリ619〜621のうち、最も古いフレーム番号のフレームデータを格納しているフレームメモリに格納する。
また、類似度判定器618は、入力画像が代表フレームの画像であると判定した場合には、この入力画像のフレーム番号を代表フレームフラグ発生器622に通知し、代表フレームフラグ発生器622は、通知されたフレーム番号を出力器616に出力する。なお、代表フレームフラグ発生器622は、通知された最新のフレーム番号を保持しており、新たに通知されるまで、現在保持しているフレーム番号を出力する。
まず、代表フレームの画像データに対してフレーム内符号化を行なう場合について説明する。
入力画像はマクロブロック単位でイントラ予測器62に入力され、ブロック毎に予測が行なわれる。その結果は変換/量子化器64に入力され、整数型直交変換を行ない、その係数を量子化する。その結果はエントロピー符号化器65と逆量子化/逆変換器7に入力される。
エントロピー符号化器65では、入力された量子化結果をエントロピー符号化し、バッファ66にフレーム単位で格納する。逆量子化/逆変換器67では、入力された量子化結果から復号画像を得る。この復号画像は、フレームメモリ制御器617の指示に従って、フレームメモリ69〜612のうち、最も古いフレーム番号の代表フレームを格納しているフレームメモリに格納される。
一方、バッファ66に格納された符号化データは出力器616によって、代表フレームフラグ発生器622からの「代表フレームのフレーム番号」が付加されて外部に出力される。
一方、非代表フレームに対してフレーム間符号化を行なう場合について説明する。入力画像データはマクロブロック単位でセレクタ61と動き推定器613に入力される。動き推定器613はフレームメモリ69〜612に保持されている画像を読み出し、第1の実施形態と同様にして動きベクトルを求める。そして動き補償器614は第1の実施形態と同様にして予測画像を生成し、差分器63に入力する。
差分器63には上述の通りセレクタ61から非代表フレームの入力画像が入力されるので、これと予測画像との差分、すなわち予測誤差を求める。求めた予測誤差は後段の変換/量子化器64に入力され、整数型直交変換によって量子化され、更にその量子化結果はエントロピー符号化器65でエントロピー符号化が施される。そしてエントロピー符号化結果はバッファ66にフレーム単位で格納される。また、動きベクトルについても第1の実施形態と同様にして動き符号化器615で符号化され、バッファ66に格納される。
そして、バッファ66に格納された符号化データは出力器616により、代表フレームフラグ発生器622から出力する代表フレームのフレーム番号とともに出力される。
図24は、以上説明した、本実施形態に係る動画像符号化処理のフローチャートである。
先ず、出力器616は、以下行なう符号化方式が代表フレームを用いる符号化方式であることを示す情報や、参照するフレームの最大数情報を含むヘッダ情報を生成して出力する(ステップS61)。次に、符号化すべき全てのフレームについて符号化処理を行ったか否かを判断する(ステップS62)。符号化すべきフレームがまだ残っている場合には処理をステップS63に進め、類似度判定器618、セレクタ61に符号化対象のフレームデータを順に入力する(ステップS63)。そして類似度判定器618は上述の通り、フレームメモリ619〜621に格納されている各代表フレームの画像と入力画像との類似度を求め(ステップS64)、最小の類似度が所定の閾値以下であるか否かを判断する(ステップS65)。
最小の類似度が所定の閾値以上である場合には処理をステップS66に進め、入力画像を代表フレームの画像であると判断し、この入力画像に対して上述したようにフレーム内符号化処理を行なう(ステップS66)。この符号化処理には第1の実施形態と同様に、符号化した入力画像を復号し、フレームメモリ69〜612のうち、最も古いフレーム番号のフレームを格納しているフレームメモリに格納する処理を含む。
また、代表フレームフラグ発生器622は、この入力画像のフレーム番号を出力器616に出力する(ステップS67)。また、ステップS63で入力した入力画像を、フレームメモリ619〜621のいずれかに格納する(ステップS68)。
一方、最小の類似度が所定の閾値以下である場合には処理をステップS69に進め、入力画像を非代表フレームの画像であると判断し、この入力画像に対して上述したようにフレーム間符号化処理を行なう(ステップS69)。ステップSS66,ステップS69の何れの符号化結果も上述の通り、バッファ66に出力されるので、出力器616はこの符号化結果に代表フレームフラグ発生器622から出力されたフレーム番号を付加し(ステップS611)、外部に出力する(ステップS612)。
このような一連の選択動作により、少ないフレーム数で長い時間のフレームを参照することが可能になり、符号化時にメモリ容量を抑制するといった効果がある。また、代表フレームをフレーム内符号化することで、エラーの伝播による画質の劣化を防ぎ、劣化を最小に抑える効果がある。
また、符号化前の入力画像で類似度を比較することで、符号化による歪の影響を受けずに代表画像を選択することができる。
なお、本実施形態においては代表フレームのみをフレーム内符号化したが、これに限定されず、他のフレーム、例えば、代表フレーム以外を一定間隔でフレーム内符号化してももちろんかまわない。
また、符号化単位なども以上のようにフレーム単位に限定するものではない。
[第11の実施形態]
図25は本実施形態に係る動画像符号化装置の構成を示す図である。図23と同じ部分については同じ番号を付けており、その説明を省略する。
6200は符号化しようとする動画像を構成する各フレームの画像(入力画像)を保持するフレームメモリである。6213は動き推定器であり、入力画像データとフレームメモリ69〜612の画像データとを比較して動きベクトルとその参照したフレーム番号を出力する。また、そのときの誤差も出力する。
6202は類似度判定器で、動き推定器6213から動きベクトル探索時の誤差を入力し、後述の類似度を算出し、入力画像が代表フレームであるか否かを判定する。6201はセレクタで通常の出力先は差分器63とするが、類似度判定器6202が代表フレームであると最後に判定したタイミングから予め決められた間隔毎には出力先をイントラ予測器62に切り替える。
以上の構成を備える、本実施形態に係る動画像符号化装置が行なう処理について以下、説明する。
第10の実施形態と同様に、符号化に先立ち、本符号化データが代表フレームを参照する方式であることを示す符号を代表フレームフラグ発生器622が生成して出力器616に出力する。さらに、参照に用いることができるフレーム数などを含むヘッダ情報を出力器616が生成して出力する。このとき、参照に用いることのできるフレーム数は15としておく。また、各フレームメモリは0にリセットされる。また、フレームカウンタ6202が保持するカウント値を0にリセットする。
そして先ずフレームメモリ制御器617は、フレームメモリ69〜612が保持する各フレームのうち、フレ−ムメモリ6200から入力される入力画像から15フレーム以上離れているフレームについては、削除する。これは、フレームメモリ69〜612が保持する各フレームのフレーム番号、フレ−ムメモリ6200から入力される入力画像のフレーム番号を参照し、入力画像のフレーム番号から15以上異なるフレーム番号を有するフレームデータを削除することによりなされる処理である。これにより、フレ−ムメモリ6200から入力される入力画像から15フレーム以上離れているフレームについては動き推定器6213は参照することができなくなる。
そしてフレームメモリ6200には、各フレームの画像データが入力され、各フレームの画像は後述の符号化に先立ち、動き推定器613に入力される。動き推定器613は、フレームメモリ69〜612に格納されている全ての画像に対してそれぞれのマクロブロック単位で動きベクトルの算出を行なう。
動きベクトルの算出はブロックマッチング法で行なわれる。これは参照画像の該当する部分と入力部分の画素単位での差異の絶対値和が最小となる画素位置の差異を動きベクトルとする方式である。その際の最小の際の絶対値和を誤差として類似度判定器6202に入力する。
類似度判定器6202は、フレームごとに発生した誤差の絶対値の総和を求める。この総和を類似度とする。誤差の絶対値の総和が予め決められた閾値よりも小さければ、入力画像は非代表フレームと判断し、誤差の絶対値の総和が予め決められた閾値よりも大きければ、この入力画像を代表フレームと判断する。
また、類似度判定器6202は、入力画像が代表フレームであると判断した際には、この入力画像のフレーム番号を代表フレームフラグ発生器622に通知するので、代表フレームフラグ発生器622は通知されたフレーム番号を後段の出力器616に出力する。
また、代表フレームの画像、又は一定間隔でフレーム内符号化を行なう場合、第10の実施形態と同様に、入力画像はマクロブロック単位でイントラ予測器62に入力され、ブロック毎に予測が行なわれる。その結果は変換/量子化器64で整数型直交変換と量子化が行なわれ、その結果はエントロピー符号化器65と逆量子化/逆変換器67に入力される。
エントロピー符号化器65は、入力された量子化結果をエントロピー符号化し、その符号化結果をバッファ66にフレーム単位で格納する。逆量子化/逆変換器67は、入力された量子化結果から第10の実施形態と同様にして復号画像を得る。
フレームメモリ制御器617には、類似度判定器6202による判断結果が入力されるので、逆量子化/逆変換器67からの復号画像が代表フレームのものであるか否かを判断することができる。よって復号画像が代表フレームのものである場合には、この入力画像を、フレームメモリ69〜612のうち、最も古いフレーム番号のフレームを格納しているフレームメモリに格納する。
そして以上の処理によりバッファ66に格納された符号化データは、出力器616により、代表フレームフラグ発生器622からの「フレーム番号」が付加されて外部に出力される。
一方、非代表フレームに対してフレーム間符号化を行なう場合にも、第10の実施形態と同様である。すなわち、非代表フレームの入力画像データはマクロブロック単位でセレクタ6201と動き推定器6213に入力される。動き推定器6213はフレームメモリ69〜612に保持されている画像を読み出し、第10の実施形態と同様にして動きベクトルを求める。そして動き補償器614は第10の実施形態と同様にして予測画像を生成し、差分器63に入力する。
差分器63には上述の通りセレクタ6201から非代表フレームの入力画像が入力されるので、これと予測画像との差分、すなわち予測誤差を求める。求めた予測誤差は後段の変換/量子化器64に入力され、整数型直交変換によって量子化され、更にその量子化結果はエントロピー符号化器65でエントロピー符号化が施される。そしてエントロピー符号化結果はバッファ66にフレーム単位で格納される。また、動きベクトルについても第10の実施形態と同様にして動き符号化器615で符号化され、バッファ66に格納される。
そして、バッファ66に格納された符号化データは出力器616により、代表フレームフラグ発生器622から出力する代表フレームのフレーム番号とともに出力される。
図26は、以上説明した、本実施形態に係る動画像符号化処理のフローチャートである。なお、同図において、図24と同じ処理ステップには同じステップ番号を付けており、その説明を省略する。
ステップS6200では上述の通り、フレームメモリ制御器617は、フレームメモリ69〜612が保持する各フレームのうち、フレ−ムメモリ6200から入力される入力画像から15フレーム以上離れているフレームについては、削除する。
またステップS6201では、図24におけるステップS68とは格納先が異なるのみでそれ以外は同じ処理である。すなわちステップS6201では、代表フレームの画像をフレームメモリ69〜612に格納する。
このような構成と一連の選択動作により、局所復号画像を参照することで符号化側のフレームメモリを削減することが可能になり、回路を小型化できコストを下げるといった効果がある。
また、類似度の算出で動き補償後の誤差を使用することで、画像の動きを考慮した類似度を判定でき、精度を向上することができる。
また、代表フレームをフレーム内符号化することで、エラーの伝播による画質の劣化を防ぎ、劣化を最小に抑える効果がある。
また、参照フレーム数を限定することで既存のH.264と互換性を保つことが可能となり、第6の実施形態に係る復号装置のみならず、既存の復号装置でも復号が可能になる。
[第12の実施形態]
本実施形態に係る動画像符号化装置は、第3の実施形態と同様の構成を有する装置である。以下では、本実施形態に係る動画像符号化装置によって、第3の実施形態に係る動画像符号化処理とは異なる動画像符号化処理を実行する場合について説明する。
本実施形態に係る動画像符号化装置は第3の実施形態と同様に、カメラ306により撮像され、記憶装置305に記録された動画像を符号化し、符号化結果をメモリ301に格納する、もしくは通信I/F308を介してネットワーク309に送出する。なお、符号化方式としてH.264符号化方式を例にとって説明するがこれに限定されず、2フレーム以上の複数フレームを参照して符号化する符号化方式であれば構わない。また、説明を容易にするために前後3フレームずつを参照することとするが、これに限定されない。
端末装置303に備わっている不図示のキーボードやマウスを用いて符号化指示を入力すると、この指示はCPU300に通知され、CPU300は各部の初期化を行なう。またCPU300は、CPU300に後述の動画像符号化処理を実行させるためのソフトウェア、CPU300に後述の通信処理を行わせるためのソフトウェア等のソフトウェアのプログラムやデータを記憶装置305から読み出してメモリ301にロードする。
本実施形態に係るメモリ301内のメモリマップの一例としては図20に示したものが適用可能である。
図27は、CPU300が、この動画像符号化ソフトウェア、通信ソフトウェアを実行することでなされる処理のフローチャートである。
先ず、以下行なう符号化方式が代表フレームを用いる符号化方式であることを示す情報や、参照するフレームの最大数情報を含むヘッダ情報を生成し、メモリ301に保持しておく(ステップS6301)。
次に、全てのフレームの符号化が終了していない場合には処理をステップS6302からステップS6303に進め、記憶装置305から、カメラ306が撮像した動画像のうち、1フレーム分のデータを読み出して、メモリ301の画像エリア1に格納する(ステップS6303)。
そして画像エリア4〜7に格納されているそれぞれの画像について、画像エリア1に格納されている画像との類似度を計算する(ステップS6304)。この類似度の計算方法については特に限定しないが、本実施形態では2つの画像間で位置的に対応する画素同士の画素値の差分の絶対値を計算し、それぞれの画素について計算した絶対値の総和値を求め、これをこの2つの画像間の類似度とする。
そして画像エリア4〜7に格納されているそれぞれの画像について求めた類似度のうち、最小の類似度の値が所定の閾値以下であるか否かを判断する(ステップS6305)。最小の類似度の値が所定の閾値以下であれば処理をステップS6306に進め、画像エリア1に格納されている画像は代表フレームにおける画像として判断し、この代表フレームのフレーム番号をメモリ301中の所定のエリア(例えばワーキングエリア)に出力(格納)する(ステップS6306)。そして上記実施形態と同様にしてこの代表フレームの画像に対してフレーム内符号化を施し、その符号化結果を符号エリアに格納する(ステップS6307)。
そして符号化したフレームの画像を上記実施形態と同様の処理を行なうことで復号し、復号結果(復号画像)を画像エリア5以降のうち1つに格納する(ステップS6308)。なお、格納する際、各画像エリアに格納されているフレームデータのフレーム番号を参照し、最も古いフレーム番号のフレームデータを格納している画像エリアに格納する。
一方、最小の類似度の値が所定の閾値以上であれば処理をステップS6309に進め、画像エリア1に格納されている画像は非代表フレームにおける画像として判断し、そして上記実施形態と同様にしてこの代表フレームの画像に対してフレーム内符号化もしくはフレーム間符号化を施し、その符号化結果を符号エリアに格納する(ステップS6309)。
そして符号化したフレームの画像を上記実施形態と同様の処理を行なうことで復号し、復号結果(復号画像)を画像エリア2〜4のうち1つに格納する(ステップS6310)。なお、格納する際、各画像エリアに格納されているフレームデータのフレーム番号を参照し、最も古いフレーム番号のフレームデータを格納している画像エリアに格納する。
そして、通信ソフトウェアを実行することにより、メモリ301上の各符号エリアに格納されている各フレームの符号化データを、ステップS6306で格納したフレーム番号を付加して、通信インターフェース308を介して通信回路309に出力する(ステップS6312)。なお、ステップS6312では、各フレームの符号化データの出力先はこれに限定するものではなく、メモリ301中の所定のエリアに格納する要にしても良いし、記憶装置304、305などに保存するようにしても良い。
そして、次のフレームを符号化するために処理をステップS6302に戻し、以降の処理を繰り返す。当然、次のフレームが存在しない場合には同図に示したフローチャートに従った処理を終了する。
このような一連の選択動作により、時間的に近いフレームと時間的に遠い代表フレームを参照することで、時間的に近くて、類似度の高いフレームも参照が可能になり、符号化効率を改善できる効果がある。
また、代表フレームをフレーム内符号化することで、エラーの伝播による画質の劣化を防ぎ、劣化を最小に抑える効果がある。
[第13の実施形態]
本実施形態は、第12の実施形態に係る動画像符号化装置による符号化データを復号する復号装置に関するものである。本実施形態に係る復号装置は、第3の実施形態と同様の構成を有する装置である。
よって、本実施形態に係る復号装置と第12の実施形態に係る動画像符号化装置とを一体化し、同じ装置内で符号化、復号処理を行なうようにしても良い。その場合、第13の実施形態では、符号化結果をメモリ301内の所定のエリアに記録するなど、装置内で符号化結果を保持しておく必要がある。
また、本実施形態に係る復号装置と第12の実施形態に係る動画像符号化装置とを別個の装置にしてもよく、その場合、第13の実施形態では、符号化結果を通信インターフェース308を介して通信回路309に出力し、本実施形態に係る復号装置に入力する必要がある。
しかし以下の説明は何れの場合であっても本質的な処理は同じである。
本実施形態に係るメモリ301内のメモリマップの一例としては図20に示したものが適用可能である。
図28は、CPU300が、動画像復号ソフトウェア、通信ソフトウェアを実行することでなされる処理のフローチャートである。
先ず、符号化データに先立って外部から、もしくはメモリなどの内部から入力される上記ヘッダ情報を参照し、解析するとともに、各種の初期化処理を行なう(ステップS6401)。
次に、全てのフレームの復号が終了したか否かを判断し(ステップS6402)、終了していなければ処理をステップS6403に進め、各フレームの符号化データをメモリ301上の符号エリアに入力する(ステップS6403)。次に、この符号化データに付加されている、このフレームの代表フレームのフレーム番号を、この符号化データから分離する(ステップS6404)。
そして入力された符号化データに対して第6の実施形態で説明したように復号処理を行ない、復号画像を画像エリア1に格納する(ステップS6405)。この復号処理の際、復号対象がフレーム間符号化によるものである場合には、画像エリア2〜7に格納されている参照画像を参照して復号する。また、復号したフレームのフレーム番号をワーキングエリアに格納する。
次に、ステップS6405で復号したフレームが代表フレームであるか否かを、ワーキングエリアに書き込んだフレーム番号を参照し、ステップS6404で分離したフレーム番号に一致するか否かで判断する(ステップS6406)。非代表フレームである場合には処理をステップS6407に進め、画像エリア2〜4のうち、最も古いフレーム番号のフレームデータを格納している画像エリアを特定し(ステップS6407)、特定した画像エリアに画像エリア1に格納されている画像を複写する(ステップS6408)。
一方、代表フレームである場合には処理をステップS6409に進め、画像エリア5〜7のうち、最も古いフレーム番号のフレームデータを格納している画像エリアを特定し(ステップS6409)、特定した画像エリアに画像エリア1に格納されている画像を複写する(ステップS6410)。
そして、画像エリア1に格納されている復号画像データを出力する(ステップS6411)。出力先は特に限定しないが、例えば表示装置307に出力し、表示しても良い。
そして、処理をステップS6402に戻し、以降の処理を繰り返す。
このような一連の選択動作により、時間的に遠いフレームを代表フレームとして保持し、時間的に近いフレームの両方を参照することで、少ない情報量で再生画像を得ることが可能になるという効果がある。
また、代表フレームをフレーム内符号化することで、高い画質のフレームを参照画像データとすることで画質が向上するという効果がある。
[その他の実施形態]
本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体(または記憶媒体)を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成することになる。
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行ない、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行ない、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
本発明を上記記録媒体に適用する場合、その記録媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。