以下、図面を参照して開示の技術の実施形態の一例を詳細に説明する。
図1には、本実施形態に係る符号化装置1が示されている。符号化装置1は、例えばMPEG2やH.264等の規格に従って動画像を符号化する装置であって、縮小部10、第1動き探索部11、判定部12、主符号化処理部13、メモリコントローラ14、メインメモリ15を備えている。なお、符号化装置1の各機能部は例えば電子回路等で実現することができ、例えば半導体集積回路、より詳しくはASIC(Application Specific Integrated Circuit)等で実現してもよい。
メインメモリ15は、例えば、SDRAM(Synchronous Dynamic Random Access Memory)等のメモリモジュールとすることができる。メインメモリ15には、縮小画メモリ16、原画メモリ17、及びフレームメモリ18の各記憶領域が設けられている。
メインメモリ15は、メモリコントローラ14に接続されている。メモリコントローラ14は、書込要求や読出要求を受信して、該受信した要求に応じてメインメモリ15に対する読み書き(メモリ制御)を行う。
縮小部10及び第1動き探索部11は、二段階の動き探索処理を含むフレーム間予測符号化処理において、一段階目の動き探索(以下、第1動き探索という)を行うための構成要素である。ここで、フレーム間予測符号化は、異なる時刻のフレーム画像に基づいて予測画像を生成し、符号化対象の画像と予測画像の差分(誤差)画像を符号化する周知の方法である。
縮小部10には、符号化処理前の動画像に含まれるフレーム画像(以下、符号化処理後のフレーム画像と区別するため、原画像と呼称する)が入力される。縮小部10は、原画像を縮小した縮小画像を生成し、メモリコントローラ14を介してメインメモリ15の縮小画メモリ16に記憶する。
なお、原画像は、メモリコントローラ14を介してメインメモリ15の原画メモリ17にも記憶される。
第1動き探索部11は、メモリコントローラ14を介して縮小画メモリ16から縮小画像を読出し、該読出した縮小画像を用いて動き探索を行う。以下、第1動き探索部11が行う動き探索を第1動き探索と呼称する。
第1動き探索部11は、第1動き探索の処理単位として予め定められたブロック(領域)毎に、第1動き探索を行う。第1動き探索部11は、参照フレーム画像を部分的に参照して第1動き探索を行う。本実施形態において、参照フレーム画像は、処理対象のブロックを含む原画像(処理対象フレーム画像)と異なる時刻の原画像を縮小した縮小画像とされる。第1動き探索では、縮小画像内の第1探索範囲の画像を参照して動きベクトルを探索する第1処理と、縮小画像内の第2探索範囲の画像を参照して動きベクトルを探索する第2処理とが行われる。ここで、動きベクトルとは、参照フレーム画像から選択されたブロックと処理対象のブロックとの相対的な位置関係(ずれ量及びずれ方向)を示すデータをいう。また、ブロックとは、画像を複数の領域に分割したときの各領域、或いは各領域の画像をいう。なお、第2探索範囲は、第1探索範囲より小さく第1探索範囲に含まれるものとする。第1探索範囲のサイズ及び位置と、第2探索範囲のサイズ及び位置は、処理対象のブロックのサイズ及び位置に応じて予め定められている。
また、第1動き探索では、左から右へ向かう方向へ処理対象のブロックが順次切替えられる。また、画像の右端のブロックまで処理が終了すると、1ライン下の行の左端のブロックに処理対象が切替えられる。また、第1動き探索の処理対象とされるブロックは、例えば符号化装置1に信号発生部を設け、信号発生部により所定の時間間隔で発生した切替信号により順次切替えられることができる。
図2に、第1動き探索部11の概略構成図の一例を示す。第1動き探索部11は、保持部36、制御部37、算出部38、原画バッファ39、及び参照バッファ40を備えている。
制御部37は、信号発生部から所定の時間間隔で発生する切替信号を受信する等により切替えタイミングが到来すると、第1動き探索部11を構成する各構成要素を制御して、第1動き探索の処理対象が次のブロックに切替わるようにする。また、メモリコントローラ14に対して読出要求を出力する。これにより、メインメモリ15の縮小画メモリ16から、切替えにより次に第1動き探索の処理対象とされる原画像の縮小画像内のブロックの画像が読出されて原画バッファ39に蓄積される。また、メインメモリ15から、切替え以前に処理対象とされた原画像の縮小画像内の第1探索範囲に対応する画像が参照画像として参照バッファ40に蓄積される。
具体的には、制御部37は、メモリコントローラ14に対する読出要求に読出対象の範囲、及び読出した画像の格納先アドレスを含めて出力し、原画バッファ39及び参照バッファ40の更新を行う。メモリコントローラ14は、読出要求により指定された読出対象の範囲の縮小画像を読出して、読出要求により指定された格納先アドレスに格納する。
原画バッファ39及び参照バッファ40は、例えば、FIFOメモリ(先入れ先出し型メモリ)としてもよい。この場合、不要となったブロックの記憶領域が未使用領域とされ、メインメモリ15から読出された画像を記憶する記憶先となり得る。
さらに、制御部37は、算出部38での評価値算出対象となり、保持部36で保持される対象となる動きベクトルを次々に生成して、算出部38及び保持部36へと送る。
算出部38は、原画バッファ39に記憶されている処理対象のブロックの画像と、参照バッファ40に記憶されている処理対象とは異なる時刻の参照フレーム画像内の第1探索範囲から、制御部37から送られてきた動きベクトルを元に選択されたブロック(以下、候補ブロックという)とを比較する。そして、算出部38は、各候補ブロックと、処理対象のブロックとの類似度の評価値として、SAD(差分絶対値和:Sum of Absolute Differences)を算出する。
なお、第2探索範囲は第1探索範囲に含まれるため、算出部38は、第2探索範囲に含まれる各候補ブロックについてSADを別途算出しなくてもよい。また、ここでは、算出部38がSADを算出する例について説明したが、SSD(差分二乗和:Sum of Squared Differences)、SATD(Sum of Absolute Transformed Differences)等、他の評価値を算出するようにしてもよい。また、動きベクトルの影響を考慮した評価値を算出するようにしても良い。また、他の周知の技術を用いて良い。
保持部36は、各ブロックで最初に制御部37から送られてくる動きベクトルと、この動きベクトルを元に算出部38で算出された評価値とを無条件で第1処理結果候補として保持する。以降は、算出部38から評価値が送られてくるごとに、保持されている第一処理結果候補の評価値と比較する。比較の結果、新たに送られてきた評価値が保持されている評価値よりも良かった場合は、その評価値と、その評価値に対応する動きベクトルとで第一処理結果候補を更新する。この処理を制御部37から送られる全てのベクトルと、そのベクトルについて算出部38で算出された評価値について繰り返すことで、最終的には、このブロックの動きベクトル候補の中で最良の評価値を示す動きベクトルと対応する評価値とが第1処理結果候補が保持されるので、該保持されている第1処理結果候補がこのブロックにおける第1動き探索の第1処理の動きベクトル及び評価値として選択される。
また、保持部36は、第2処理においては、制御部37から送られてくる動きベクトルのうち第2探索範囲に属するものと、その動きベクトルについて算出部38で算出される評価値とについてのみ、上記保持部36の第1処理の動作説明において述べた「最初の候補の保持」と、「より良い評価値を示した値での更新」とを行う。第2処理においても、保持され更新される候補(第2処理結果候補)は、第1処理結果候補同様に動きベクトルと評価値との組とされる。最終的には、このブロックの第2探索範囲内の動きベクトル候補の中で最良の評価値を示す動きベクトルと対応する評価値とが第2処理結果候補として保持されるので、該保持されている第2処理結果候補がこのブロックにおける第1動き探索の第2処理の動きベクトル及び評価値として選択される。
以下では、第1処理で探索された動きベクトルを第1動きベクトルと呼称し、第2処理で探索された動きベクトルを第2動きベクトルと呼称する。また、第1動きベクトルに対応するSADを第1評価値と呼称し、第2動きベクトルに対応するSADを第2評価値と呼称する。第1動きベクトル、第1評価値、第2動きベクトル、及び第2評価値の各々は、判定部12に出力される。
なお、判定部12に出力される第1評価値及び第2評価値は、SADではなくSSD、SATD、動きベクトルの影響を考量した評価値、その他周知の技術によるものなど、符号化効率を示すと考えられる値であれば特に限定されない。
このように、第1動き探索部11では、第1動き探索に縮小画像を用いるため、演算量が大幅に削減され、動き探索が効率化する。
なお、本実施形態では、第1動き探索において、処理対象のブロックが含まれる処理対象フレーム画像とは異なる時刻のフレーム画像の縮小画像が参照フレーム画像として用いられたが、これに限定されない。例えば、第1動き探索において、処理対象のブロックが含まれる処理対象フレーム画像とは異なる時刻のフレーム画像の復号画像の縮小画像を、参照フレーム画像として用いてもよい。復号画像は、後述する主符号化処理部13において生成される。
第1動き探索部11で探索された第1動きベクトル及び第2動きベクトルの何れかが後述する主符号化処理部13において行われる第2動き探索に用いられるが、どちらの動きベクトルを用いるかは、判定部12の判定結果に依存する。
判定部12は、1つのフレーム画像に含まれる第2動き探索の処理単位となる複数のブロックの各々が、第1動きベクトルを用いて第2動き探索を行うブロック(以下、特定ブロックという)と、第2動きベクトルを用いて第2動き探索を行うブロック(以下、非特定ブロックという)の何れであるかを判定する。判定方法の具体例は後述する。判定部12は、判定結果として、特定ブロックと判定したブロックについては、第1動きベクトルを主符号化処理部13に出力し、非特定ブロックと判定したブロックについては、第2動きベクトルを主符号化処理部13に出力する。以下、第1動きベクトル及び第2動きベクトルのうち、判定部12から判定結果として出力された動きベクトルを判定動きベクトルと呼称する。
主符号化処理部13は、予測誤差画像生成部20、直交変換・量子化部21、逆直交変換・逆量子化部22、復号画像生成部23、フィルタ部24、第2動き探索部25、及びフレーム間予測部26を備えている。更にまた、主符号化処理部13は、参照画像メモリ回路27、フレーム内予測モード決定部28、フレーム内予測部29、切替部30、及びエントロピー符号化部31も備えている。
予測誤差画像生成部20には、原画像が符号化対象として供給される。
また、予測誤差画像生成部20には、フレーム間予測部26或いはフレーム内予測部29からから予測画像が供給される。予測画像については後述する。予測誤差画像生成部20は、符号化対象の画像と、予測画像との差分を示す差分情報を演算し、この差分情報を予測誤差画像の情報として直交変換・量子化部21に供給する。このように、予測誤差画像生成部20において予測誤差画像が生成される。
直交変換・量子化部21は、供給された予測誤差画像の情報に変換処理を施し、予測誤差画像を水平及び垂直方向の周波数成分に分離する。更に、直交変換・量子化部21は、変換処理で得られた各周波数成分の情報を量子化する。直交変換・量子化部21は、該情報を量子化することにより予測誤差画像の符号量を低減する。直交変換・量子化部21は、量子化後の情報を逆直交変換・逆量子化部22及びエントロピー符号化部31に供給する。
逆直交変換・逆量子化部22は、直交変換・量子化部21からから供給された情報を逆量子化した後、逆変換処理する。ここで、逆変換処理とは、直交変換・量子化部21で行われる変換処理と逆方向に変換する処理をいう。
逆直交変換・逆量子化部22によって復号処理が行われることにより、符号化前の予測誤差画像と対応する誤差画像の情報が得られる。該情報を再生予測誤差画像と呼称する。
復号画像生成部23には、逆直交変換・逆量子化部22で生成された再生予測誤差画像が供給される。また、復号画像生成部23には、フレーム間予測部26或いはフレーム内予測部29から予測画像が供給される。復号画像生成部23は、再生予測誤差画像と予測画像とを加算することにより、符号化対象の画像を復号した画像(復号画像)を生成する。生成された復号画像は、フィルタ部24に出力される他、フレーム内予測符号化(後述)においてはフレーム内予測モード決定部28及びフレーム内予測部29にも出力される。
フィルタ部24は、復号画像生成部23で生成された復号画像にフィルタ処理を施し、メモリコントローラ14を介してメインメモリ15のフレームメモリ18に格納する。符号化処理は、ブロック単位で処理されるため、ブロックの境界部分にノイズが生じることがある。フィルタ部24は、該符号化により生じたノイズを低減する。
フレームメモリ18は、フィルタ部24から供給された復号画像の各々が蓄積されるメモリである。フレームメモリ18に蓄積された復号画像は、後述する第2動き探索部25及びフレーム間予測部26において、他のフレーム画像を符号化するときの動きベクトル検出や動き補償等で参照される。復号画像を参照する際には、後述する参照画像メモリ回路27を介して参照する場合と、フレームメモリ18から直接読出して参照する場合とがある。詳細は後述する。
フレーム内予測モード決定部28及びフレーム内予測部29は、フレーム内予測符号化方法で符号化を行うときの予測画像をブロック単位で生成するための構成要素である。ここで、フレーム内予測符号化方法は、他のフレーム画像を用いず、符号化対象となるフレーム画像の情報のみで画像を符号化・復号する方法である。具体的には、1枚のフレーム画像を複数のブロックに分割したときの符号化対象のブロックの周辺のブロックの画像から、所定方向に沿って近傍の画像の動きを推定して、符号化対象のブロックの画像を予測し、符号化対象のブロックの画像との差分を符号化する。
フレーム内予測モード決定部28は、符号化対象の原画像に応じて、フレーム内予測符号化方法で符号化を行うときの予測モードを決定する。
フレーム内予測部29は、フレーム内予測モード決定部28で決定された予測モードで、フレーム内予測モード決定部28を介して入力された原画像に基づき、符号化対象のブロックの画像を予測して、該予測した予測画像を出力する。
第2動き探索部25、フレーム間予測部26、及び参照画像メモリ回路27は、二段階の動き探索処理を含むフレーム間予測符号化処理において、二段階目の動き探索(以下、第2動き探索という)を行うための構成要素である。なお、第2動き探索では、前述した復号画像が参照フレーム画像とされ、該参照フレーム画像が部分的に参照されて動き探索が行われる。復号画像は、縮小せず等倍で用いられる。
また、第2動き探索でも、第1動き探索と同様に、処理対象フレーム内で左から右へ向かう方向へ処理対象のブロックが順次切替えられる。また、画像の右端のブロックまで処理が終了すると、1ライン下の行の左端のブロックに処理対象が切替えられる。また、第2動き探索の処理対象とされるブロックは、例えば第2動き探索部25に信号発生部を設け、該信号発生部により所定の時間間隔で発生した切替信号により順次切替えられるようにしてもよい。
なお、第1動き探索の処理単位のブロックを元の倍率に戻したときのサイズと、第2動き探索の処理単位のブロックのサイズは、同じであってもよいし、異なっていてもよい。以下では、第1動き探索の処理単位のブロックの元の倍率に戻したときのサイズと、第2動き探索の処理単位のブロックのサイズとが同じである場合を例に挙げて説明する。
参照画像メモリ回路27は、図3に示すように、制御部41及び参照画像メモリ42を備えている。参照画像メモリ42は、例えば、SRAM(Static Random Access Memory)等のメモリモジュールとすることができ、復号画像が記憶されるフレームメモリ18から部分的に読出された画像が参照画像として記憶される。参照画像メモリ42は、制御部41に接続されている。制御部41は、参照画像メモリ42に対する読み書き(メモリ制御)を行う。
参照画像メモリ42には、第2動き探索において、処理対象のブロックを非特定ブロックとしたときに探索範囲として設定される可能性がある範囲(以下、設定可能範囲という)の画像が参照画像として記憶される。設定可能範囲は、第1動き探索で用いられた第2探索範囲を含み、該第2探索範囲よりも若干大きなサイズとすることもできる。例えば、第2探索範囲より数画素分外側の範囲が設定可能範囲としてもよい。ただし、設定可能範囲は第1探索範囲よりも小さい。
参照画像メモリ回路27の制御部41は、切替えタイミングが到来すると、少なくとも切替直後に第2動き探索の処理対象とされるブロックに対応する設定可能範囲の参照画像が参照画像メモリ42に記憶された状態となるように更新制御を行うものとする。制御部41は、参照画像メモリ42の更新制御として、メモリコントローラ14に対して読出要求を出力して、必要な範囲の参照画像を取得し、参照画像メモリ42に書込む(記憶する)と共に、参照画像メモリ42から不要な範囲の参照画像を消去する制御を行う。
ここで、参照画像メモリ42の更新制御の一例について、図5及び図6を参照して説明する。
図5は、処理対象のブロックB1についての第2動き探索の処理開始直前の参照画像メモリ42の記憶状態を模式的に示す図である。また、図6は、ブロックB1の次に処理対象とされるブロックB2についての第2動き探索の処理開始直前の参照画像メモリ42の記憶状態を模式的に示す図である。
図5において、領域80は、処理対象ブロックB1と同位置のブロックを示す。領域81は、ブロックB1の設定可能範囲を示す。領域82は、参照画像メモリ42に記憶されている領域である。領域82は、ブロックB1より前に処理対象とされた各ブロックの設定可能範囲を合成した合成範囲のうち、ブロックB1及びブロックB1より後に処理対象とされるブロックの設定可能範囲の何れかと重複する領域でもある。
領域83は、処理対象ブロックB1の処理が終了して、次のブロックB2の処理を開始する直前に参照画像メモリ42に追加される領域である。領域84は、領域83の追加と同時に参照画像メモリ42から消去される領域である。
次に、図6において、領域85は、処理対象ブロックB2と同位置のブロックを示す。領域86は、ブロックB2の設定可能範囲を示す。領域87は、参照画像メモリ42に記憶されている領域である。領域88は、ブロックB2より前に処理対象とされた各ブロックの設定可能範囲を合成した合成範囲のうち、ブロックB2及びブロックB2より後に処理対象とされるブロックの設定可能範囲の何れかと重複する。
領域88は、処理対象ブロックB2の処理が終了して、次のブロックB3の処理を開始する直前に参照画像メモリ42に追加される領域である。領域89は、領域88の追加と同時に参照画像メモリ42から消去される領域である。
図5及び図6から明らかなように、第2動き探索の処理対象のブロックが次のブロックに切替えられる際に、該切替以降に処理対象とされる各ブロックの設定可能範囲の何れにも含まれない参照画像が参照画像メモリ42から消去される。また、次のブロックの設定可能範囲には含まれるものの、参照画像メモリ42に未だ記憶されていない参照画像がフレームメモリ18から読出されて参照画像メモリ42に記憶される。なお、例えば、消去すべき参照画像が記憶されている領域に、上述した新たに追加する参照画像を上書きすることで、参照画像を消去することができる。
上記図5及び図6を参照して説明した更新制御方法では、あるブロックの探索範囲として使用された参照画像領域が、何れのブロックの探索範囲でも使用されなくなるまで参照画像メモリ42内に残る構成とされる。従って、フレームメモリ18に対するアクセス量(読出データ量)を抑制できる。
次に、参照画像メモリ42への更新制御の他の例について、図7及び図8を参照して説明する。
図7は、処理対象のブロックB1についての第2動き探索の処理開始直前の参照画像メモリ42の記憶状態を模式的に示す図である。また、図8は、ブロックB1の次に処理対象とされるブロックB2についての第2動き探索の処理開始直前の参照画像メモリ42の記憶状態を模式的に示す図である。
図7において、領域90は、処理対象ブロックB1と同位置のブロックを示す。領域91は、ブロックB1の設定可能範囲を示す。領域92は、参照画像メモリ42に記憶されている領域である。領域92は、ブロックB1の設定可能範囲に等しい。
領域93は、処理対象ブロックB1の処理が終了して、次のブロックB2の処理を開始する直前に参照画像メモリ42に追加される領域である。領域94は、領域93の追加と同時に参照画像メモリ42から消去される領域である。
次に、図6において、領域95は、処理対象ブロックB2と同位置のブロックを示す。領域96は、ブロックB2の設定可能範囲を示す。領域97は、参照画像メモリ42に記憶されている領域である。領域96は、ブロックB2の設定可能範囲に等しい。
領域98は、処理対象ブロックB2の処理が終了して、次のブロックB3の処理を開始する直前に参照画像メモリ42に追加される領域である。領域99は、領域98の追加と同時に参照画像メモリ42から消去される領域である。
図7及び図8から明らかなように、第2動き探索の処理対象のブロックが次のブロックに切替えられる際に、該次のブロックの設定可能範囲が参照画像メモリ42から消去される。また、該次のブロックの設定可能範囲に含まれるものの、参照画像メモリ42に未だ記憶されていない参照画像がフレームメモリ18から読出されて参照画像メモリ42に記憶される。なお、例えば、消去すべき参照画像が記憶されている領域に、上述した新たに追加する参照画像を上書きすることで、参照画像を消去することができる。
上記図7及び図8を参照して説明した更新制御方法では、処理対象のブロックを切替えるとき(参照画像メモリ42を更新するとき)に、次に処理対象となるブロックの設定可能範囲に含まれる範囲の参照画像が、参照画像メモリ42内に残される。次に処理対象となるブロックの設定可能範囲に含まれない参照画像は削除されるため、参照画像メモリ42の容量抑制を図ることができる。
第2動き探索部25は、第2動き探索の処理単位となるブロック毎に、判定部12から入力された判定動きベクトルに応じた探索範囲で、第2動き探索を行う。ただし、判定動きベクトルは、縮小画像から探索された動きベクトルであるため、元の倍率に戻した状態で用いられる。例えば、水平方向及び垂直方向それぞれで1/d倍された縮小画像から第1動き探索が行われた場合には、判定動きベクトルが示す水平方向及び垂直方向の各値をd倍して用いる。
第2動き探索では、前述したように参照画像として復号画像が部分的に用いられる。本実施形態では、第2動き探索部25は、参照すべき参照画像が参照画像メモリ42に記憶されている場合には、該参照画像メモリ42から読出された参照画像を参照する。また、第2動き探索部25は、参照すべき参照画像が参照画像メモリ42に記憶されていない場合には、参照画像メモリ42を介さずにフレームメモリ18から直接読出された参照画像を参照する。
図4に、第2動き探索部25の概略構成図の一例を示す。第2動き探索部25は、保持部44、制御部45、算出部46、切替部47、原画バッファ48、及び参照バッファ49を備えている。
制御部45は、信号発生部から所定の時間間隔で発生する切替信号を受信する等により切替えタイミングが到来すると、第2動き探索部25を構成する各構成要素を制御して、第2動き探索の処理対象が次のブロックに切替わるようにする。
また、上記切替タイミングが到来すると、制御部45は、メモリコントローラ14に対して、原画像内の処理対象のブロックの画像を要求する読出要求を出力する。該読出要求には、読出す範囲と、読出した画像の格納先アドレスとが指定されている。これにより、原画メモリ17から処理対象のブロックの画像が読出され原画バッファ48に格納される。
また、上記切替タイミングが到来すると、制御部45は、判定部12から入力された判定動きベクトルに基づいて設定される探索範囲の参照画像の読出要求を出力する。該読出要求には、読出す範囲と、読出した画像の格納先アドレスとが指定されている。なお、本実施形態では、制御部45は、処理対象のブロックの位置及びサイズに応じて、判定動きベクトルが指す点を含む所定のサイズの範囲を第2動き探索の探索範囲として設定するように構成されている。例えば、判定動きベクトルの中心から、水平方向に±X画素、垂直方向に±Y画素を含むサイズの範囲を探索範囲とすることができる。
なお、処理対象のブロックの位置及びサイズは、制御部45が事前に把握しているため、結局、判定部12から出力される判定動きベクトルに応じて第2動き探索における探索範囲が定まることとなる。なお、第2動き探索における探索範囲は、第1動き探索で用いられた第2探索範囲を縮小前の倍率に戻したときの範囲よりも小さな範囲とされる。
参照画像メモリ回路27の制御部41は、制御部45から出力された探索範囲の読出要求を取得し、該取得した読出要求に応じて読出制御を行う。具体的には、制御部41は、読出要求された探索範囲の参照画像うち、参照画像メモリ42に記憶されている参照画像については、参照画像メモリ42から参照画像を読出して参照バッファ49に格納する。また、制御部41は、読出要求された探索範囲の参照画像のうち参照画像メモリ42に記憶されていない参照画像については、メモリコントローラ14に対して読出要求を出力し、フレームメモリ18から参照画像を直接読出して参照バッファ49に格納させる。これにより、参照バッファ49に、探索範囲の参照画像が格納される。
なお、参照画像メモリ42には、設定可能範囲の参照画像が記憶されているため、判定動きベクトルが第2動きベクトルである場合には、判定動きベクトルに基づいて設定された探索範囲に含まれる参照画像は、全て参照画像メモリ42に記憶されている。従って、フレームメモリ18から直接参照画像を取得することはない。判定動きベクトルが第1動きベクトルである場合には、設定可能範囲に含まれない範囲を含む範囲が探索範囲とされることから、判定動きベクトルに応じた探索範囲に含まれる参照画像の少なくとも一部が、参照画像メモリ42に記憶されていない状態となる。従って、この場合には、フレームメモリ18に直接アクセスして参照バッファ49に必要な参照画像を取得して記憶する。
これにより、処理対象となるブロックを処理する直前に、該処理対象となるブロックに対応する探索範囲の参照画像が、参照バッファ49に格納される。
なお、参照バッファ49への参照画像の格納方法はこれに限定されない。例えば、読出要求された探索範囲の参照画像の少なくとも一部が、参照画像メモリ42に記憶されていない場合には、制御部41は読出要求された参照画像の全てをフレームメモリ18から直接読出して参照バッファ49に格納させるようにしてもよい。すなわち、本実施形態では、第1動きベクトルに基づいて設定される探索範囲の画像のうち少なくとも参照画像メモリ42に記憶されていない画像については、参照画像メモリ42を介さずにフレームメモリ18から直接読出された画像が参照されることになる。
原画バッファ48及び参照バッファ49は、例えば、FIFOメモリ(先入れ先出し型メモリ)としてもよい。
さらに、制御部45は、算出部46での評価値算出対象となり、保持部44で保持される対象となる動きベクトルを次々に生成して、算出部46、保持部44、小数ベクトル予測画生成部50、及び切替部47へと送る。
小数ベクトル予測画生成部50は、例えば、第2動き探索で各ブロックに対して小数画素精度の動きベクトルを探索する場合に、規格により規定された方式又は別の方式により参照画像の補間処理を行って、小数座標の画素を有する小数予測画像を生成する。
切替部47は、第2動き探索で小数画素精度で動きベクトルを探索する場合には、小数ベクトル予測画生成部50で生成された小数予測画像を参照画像として算出部46に入力する。切替部47は、整数画素精度で動きベクトルを探索する場合には、参照バッファ49に記憶されている画像を参照画像として算出部46に入力する。
算出部46は、原画バッファ39に記憶されている処理対象のブロックの画像と、切替部47から入力された探索範囲の参照画像から、制御部45から送られてきた動きベクトルを元に選択されたブロック(以下、候補ブロックという)とを比較する。そして、算出部46は、各候補ブロックと処理対象のブロックとの類似度の評価値として、SAD(差分絶対値和)を算出する。なお、ここでは、算出部46がSADを算出する例について説明したが、SSD(二乗誤差和)、SATD等、他の評価値を算出するようにしてもよい。また、動きベクトルの影響を考慮した評価値を算出するようにしても良い。また、他の周知の技術を用いて良い。
保持部44は、各ブロックで最初に制御部45から送られてくる動きベクトルと、この動きベクトルを元に算出部46で算出された評価値とを無条件で処理結果候補として保持する。以降は、算出部46から評価値が送られてくるごとに、保持されている処理結果候補の評価値と比較する。比較の結果、新たに送られてきた評価値が保持されている評価値よりも良かった場合は、その評価値と、その評価値に対応する動きベクトルとで処理結果候補を更新する。この処理を制御部45から送られる全ての動きベクトルと、その動きベクトルについて算出部46で算出された評価値について繰り返すことで、最終的には、このブロックの動きベクトル候補の中で最良の評価値を示す動きベクトルと対応する評価値とが処理結果候補として保持されるので、この候補がこのブロックにおける動きベクトル及び評価値として選択される。
フレーム間予測部26は、第2動き探索部25で探索され入力された動きベクトルに基づき、第2動き探索部25に含まれる参照バッファ49から参照画像を取得して、周知の動き補償を行い、予測画像を生成する。すなわち、本実施形態では、フレーム間予測部26が、参照画像を参照画像メモリ42から取得する構成としている。
なお、フレーム間予測部26が用いる参照画像の一部又は全てを、フレームメモリ18に直接アクセスして取得してもよい。動き補償では、参照画像の候補ブロックの各々が参照される動き探索と異なり、頻繁な読出しは行われないため、フレーム間予測部26が動き補償のためフレームメモリ18に直接アクセスしたとしても、メモリ帯域の圧迫の度合いは動き探索よりも小さい。
主符号化処理部13の切替部30は、フレーム内予測部29で生成された予測画像及びフレーム間予測部26で生成された予測画像の一方を選択して予測誤差画像生成部20及び復号画像生成部23に出力する。切替部30は、例えば外部の制御部により制御され、切替えられる。
エントロピー符号化部31には、直交変換・量子化部21から量子化後の予測誤差画像の情報が入力される。更にまた、エントロピー符号化部31には、フレーム内予測モード決定部28で決定された予測モードや、第2動き探索部25で探索された動きベクトルが、サイド情報として入力される。エントロピー符号化部31は、予測誤差画像の情報とサイド情報とをエントロピー符号化する。エントロピー符号化とは、シンボルの出現頻度に応じて、可変長の符号を割り当て符号化する処理をいう。エントロピー符号化により生成された符号化信号(ビットストリーム)は、予め定められた出力先に出力される。
次に、判定部12の判定処理について詳細に説明する。
図9は、判定部12により実行される判定処理の一例を示すフローチャートである。図9に示す判定処理は、1フレーム画像毎に行われる。
ステップ100において、判定部12は、集合Scを空集合とし、パラメータmに0をセットする。ここで、パラメータmは、1フレーム画像を第2動き探索の処理単位となる複数のブロックに分割したときの各ブロックを識別するための識別番号であり、0から「1フレーム画像のブロック総数−1」までの整数値を取り得る。
ステップ102において、判定部12は、ブロックBmの第1動きベクトル、第1指標値、第2動きベクトル、及び第2指標値を取得する。
ステップ104において、判定部12は、第1動きベクトルの方が第2動きベクトルより符号化効率が高いか否かを判断する。ここでは、ステップ102で取得した第1指標値及び第2指標値を用いる。本実施形態では、第1指標値及び第2指標値共にSADであるため、評価指標は小さいほど符号化効率が高い(評価が良い)ことを示す。従って、第1指標値が第2指標値よりも小さい場合には、第1動きベクトルの方が第2動きベクトルより符号化効率が高いと判断される。第1指標値及び第2指標値がSSDや符号化コストを示す値である場合も同様である。判定部12は、ステップ104において肯定判断した場合には、ステップ106に進む。
ステップ106において、判定部12は、ブロックBmを集合Scに加える。判定部12は、ステップ106の処理後、ステップ108に進む。また、判定部12は、ステップ104において否定判断した場合には、ステップ106をスキップしてステップ108に進む。
ステップ108において、判定部12は、パラメータmに1を加算する。
ステップ110において、判定部12は、パラメータmが、1フレーム画像のブロック総数と等しいか否かを判断する。前述したように、パラメータmは、0から「1フレーム画像のブロック総数−1」までの整数値を取り得る。従って、パラメータmが1フレーム画像のブロック総数と等しくなった場合には、1フレーム画像に含まれるブロックの全てが処理済みとなったことを意味する。
判定部12は、ステップ110において否定判断した場合には、ステップ102に戻って、次のブロックBmについて、上記と同様の処理を行う。一方、判定部12は、ステップ110において肯定判断した場合には、ステップ112に進み、特定ブロック判定処理を実行する。
ステップ112の特定ブロック判定処理の一例を図10に示す。
ステップ200において、判定部12は、集合Scに含まれるブロックを、第1動きベクトルの符号化効率が高い順にソートする。ここでは、第1動きベクトルの符号化効率を示す値に基づいてソートする。
第1動きベクトルのx成分をvx1、y成分をvy1とし、第1評価値をv1とし、第2動きベクトルのx成分をvx2、y成分をvy2とし、第2評価値をv2とし、関数の出力をfとしたときの、符号化効率を示す値を導出する関数例を以下に示す。
f=v1 ・・・式1
f=v1−v2 ・・・式2
f=v1−v2+α・g(vx1,vy1) ・・・式3
f=v1−v2+β・h(vx1,vy1、vx2,vy2) ・・・式4
ここで、式3の関数g及び関数hは、着目するブロックについて第1動きベクトルを採用したときに増加するメインメモリ15のメモリ帯域(具体的には、フレームメモリ18からの直接読出データ量)に比例する値を返す関数である。また、α、及びβは、予め定められた正の定数である。
ここで、第1評価値v1及び第2評価値v2は、その値が小さいほど符号化効率が高い(良い結果を示す)ものとし(例えばSAD)、関数の出力fも、その値が小さいほど符号化効率が高いものとする。
判定部12は、関数の出力値fが小さいものほど上位となるようにソートする。
なお、ここでは、第1評価値がSADである場合を例に挙げたが、SSDや符号化コストであってもよい。この場合も、当該SSDや符号化コストを、符号化効率を示す値としてそのまま用いてソートしてもよい。
ステップ202において、判定部12は、上記ソートされた状態で、上位N個のブロックを特定ブロックとして判定する。Nは、参照画像メモリ42をフレームメモリ18から直接参照画像を読み出して参照バッファ49に格納するときの直接読出データ量の合計値が予め設定された上限値を超えないように予め設定された値である。ここでは、1つの特定ブロックについて、参照画像メモリ42を介さずにフレームメモリ18から直接参照画像を読み出すときの直接読出データ量を一律cとして、「c×N=予め設定された上限値DN」となるようにNを設定した。これにより、参照画像メモリ42の更新時のフレームメモリ18へのアクセス以外の、参照画像メモリ42に保持されていない探索範囲の取得のためのフレームメモリ18へのアクセスによる直接読出データ量を、上限値DN以下に抑えることが可能となる。
参照画像メモリ42の更新方法にもよるが、特定ブロックに判定されると第1動きベクトルに基づいて設定される探索範囲には、参照画像メモリ42に保持されていない範囲が含まれる可能性が高い。従って、あまりに多くのブロックを特定ブロックと判定すると、直接読出データ量が増えてメモリ帯域を圧迫する。そこで、本実施形態では、特定ブロックの数の上限値を設けるようにしている。
以下、参照画像メモリ42を介さずにフレームメモリ18から直接参照画像を読み出して参照バッファ49に格納することを、「直接読出し」と呼称する。
上記により、上記直接読出データ量の合計値が予め設定された上限値を超えない範囲内で、第2動きベクトルよりも第1動きベクトルの方が符号化効率が高いブロックが、特定ブロックとして判定される。図10を用いて例示した特定ブロック判定処理を採用した場合には、簡単なアルゴリズムで特定ブロックを判定できる。
図9において、ステップ112の後は、ステップ114の処理が実行される。
ステップ114において、判定部12は、1フレーム画像に含まれるブロックのうち、ステップ112において特定ブロックと判定されたブロック以外の全てのブロックを非特定ブロックと判定する。ここでは、集合Scに含まれるブロックのうち特定ブロックとして判定されなかったブロック、及び集合Scに含まれないブロックの各々が非特定ブロックと判定される。
ステップ116において、判定部12は、判定結果を第2動き探索部25に出力する。すなわち、判定部12は、判定結果として、特定ブロックと判定したブロックについては、第1動きベクトルを主符号化処理部13に出力し、非特定ブロックと判定したブロックについては、第2動きベクトルを主符号化処理部13に出力する。
ここで、図11に、符号化方式H.264に対応した符号化装置1の各構成要素の処理のタイミングを示すタイミングチャートの一例を示す。
図11において、縮小部10は各フレーム画像の原画像に対して図示されるタイミングで縮小処理を施す。なお、図示される符号I0、B1、B2、P3…は、各フレーム画像を表わす識別符号である。なお、図11においてIxは、フレーム内予測符号化方式により符号化するフレーム画像を表わす。また、図11においてBxは、主にフレーム間予測符号化方式により符号化するフレーム画像であって、主に先に符号化した2つのフレーム画像から予測するBフレームのフレーム画像を示す。また、図11において、Pxは、主にフレーム間予測符号化方式により符号化するフレーム画像であって、主に先に符号化した1つのフレーム画像から予測するPフレームのフレーム画像を示す。
また、ここでは、フレーム画像I0より前に符号化処理されるフレーム画像については図示を省略した。
第1動き探索部11は、図11に示すタイミングで、各フレーム画像の各ブロックについて、第1動き探索を行う。Bフレームについては、前方参照画像及び後方参照画像に示されるように、互いに異なる時刻の2つの参照画像が参照される。Pフレームについては、前方参照画像に示されるように、1つの参照画像が参照される。例えば、フレーム画像P3の各ブロックは、フレーム画像I0に含まれるブロックを参照画像として上述した第1動き探索が行われる。
判定部12は、図11のタイミングチャート内にt1で示すように、あるフレーム画像(t1ではP3)に対する第1動き探索が終了した後に、そのフレーム画像の各ブロックについて、特定ブロック及び非特定ブロックの判定を行う。
第2動き探索部25は、判定部12による判定が終了した後に、そのフレーム画像の各ブロックについて、第2動き探索を行う。図11のタイミングチャート内でt2で示すように、フレーム画像P3に対する第2動き探索は、判定部12による判定が終了した後に行われている。なお、第2動き探索部25は、判定部12の判定手法にもよるが、通常は、1フレーム画像の全ブロックの判定が終了した後に、該フレーム画像の第2動き探索を行う。
参照画像メモリ42は処理対象のブロックが切替わる毎に更新されるが、参照画像メモリ42には処理対象のブロックの処理中に参照するフレーム画像の参照画像が記憶されるように制御される。従って、フレーム画像P3の各ブロックを符号化する際に参照画像メモリ42に記憶される参照画像は、フレーム画像I0の復号画像とされる。
以上説明したように、本実施形態では、二段階の動き探索を行い、二段階目の動き探索の非特定ブロックにおける探索処理では、一段階目の第1探索範囲よりも狭い範囲が探索範囲とされる。従って、参照画像メモリ42のメモリ容量を削減できる。更にまた、第1動きベクトルの方が第2動きベクトルよりも符号化効率が高いN個のブロックについては、第1動きベクトルを用いた第2動き探索が行われるため、符号化効率を向上させることができる。すなわち、フレームメモリ18から直接読出しを全く行わない場合に比べて画質の向上が見込まれる。更に、上記Nは、直接読出しの際の直接読出データ量の合計値が上限値を超えないように予め設定された値であるため、フレームメモリ18からの読出データ量の抑制を図ることもできる。このように、上記実施形態では、参照画像メモリ42の容量の抑制、符号化効率の向上、及びフレームメモリ18の読出データ量の抑制の各々をバランスよく実現することができる。
なお、上記ステップ112において行われる特定ブロック判定処理の内容は、上記説明した内容に限定されない。例えば、度数分布又はヒストグラムを生成して判定してもよい。
図12は、ヒストグラムを用いた特定ブロック判定処理の流れを示すフローチャートである。図12に示す特定ブロック判定処理は、上記図10を参照して例示した特定ブロック判定処理に代えて実行することができる。
ステップ210において、判定部12は、集合Scに含まれるブロックについて、第1動きベクトルの符号化効率を示す値のヒストグラムを生成する。ヒストグラムには複数の階級が含まれるが、階級の幅は特に限定されない。符号化効率を示す値は、上記式1〜式4で例示した関数の値等を用いることができる。ステップ210により、例えば、符号化効率を示す値に基づく各階級毎に、ブロックの度数(個数)が示されたヒストグラムが生成される。
ステップ212において、判定部12は、パラメータDtに0をセットし、パラメータkに0をセットする。パラメータDtは、符号化効率を示す値が高い順に上位の階級から各階級の度数を加算していったときの累計値を計時するパラメータである。パラメータkは、階級を識別するための識別番号である。パラメータkは、「0から階級総数−1」までの値を取り得る。符号化効率を示す値が小さい(符号化効率が高い)階級ほど上位の階級となり、kは小さくなる。
ステップ214において、判定部12は、ヒストグラムの階級kの度数Dkを取得する。
ステップ216において、判定部12は、DtにDkを加算した値をDtにセットする。
ステップ218において、判定部12は、Dtが予め定められた上限値N以下であるか否かを判断する。Nは、前述したように、直接読出しにおいて直接読出データ量の合計値が予め設定された上限値を超えないように予め設定された値である。
判定部12は、ステップ218において肯定判断した場合には、ステップ220に進み、パラメータkに1を加算し、ステップ214に戻る。これにより、次の階級kについて、上記と同様の処理が行われる。
また、判定部12は、ステップ218において否定判断した場合には、ステップ222に進み、階級kより上位の階級に含まれるブロックを特定ブロックとして判定する。
すなわち、ステップ218において否定判断された場合、現在の階級kの度数Dkを加算したときの累計値を示すパラメータDtは上限値Nを越えてしまっているが、当該階級kの1つ上位の階級k−1までの累計値は上限値N以下となっていることを示す。
従って、ここでは、階級kより上位の階級、すなわち、階級0から階級k−1までの各階級に含まれるブロックを特定ブロックとして判定する。
なお、ここでは、ヒストグラムを生成する例について説明したが、ヒストグラムを生成するまでもなく、度数分布を生成して上記と同様に処理してもよい。階級の幅を定義して、各階級毎の度数をカウントしさえすれば、上記と同様に処理できるためである。このように、度数分布或いはヒストグラムを生成して行う特定ブロックを判定する場合には、図10を参照して説明した特定ブロック判定処理で必要なソートを行わずに済むため、判定処理を効率的に行うことができる。
また、特定ブロック判定処理において、以下のように特定ブロックを判定してもよい。例えば、図13に示すように、両隣のブロックB1、B2が特定ブロックと判定されたブロックBaについては、ブロックBaの処理時にもブロックB1、B2の探索範囲に含まれる参照画像を参照バッファ49に保持しておいて流用することができる。すなわち、ブロックBaについて第2動き探索を行うときの探索範囲によっては、ブロックBaの第2動き探索のために直接読出しを行わなくても第1動きベクトルを用いた探索を行うことができる。この場合、ブロックBaを特定ブロックとして扱っても、メモリ帯域を圧迫することはない。従って、両隣が特定ブロックと判定されたブロックBaの第1動きベクトルが第2動きベクトルより符号化効率が高い場合に、ブロックBaについての第1動きベクトルに基づく探索範囲によっては、ブロックBaも直接読出し可能な特定ブロックと判定してもよい。ブロックBaを特定ブロックとして判定しない場合に比べて符号化効率が向上し、画質の向上が見込まれる。
図14は、両隣のブロックが特定ブロックと判定されたブロックについても特定ブロックと判定するか否かを判定する特定ブロック判定処理の流れを示すフローチャートである。図14に示す特定ブロック判定処理は、上記図10を参照して例示した特定ブロック判定処理に代えて行うことができる。
ステップ230において、判定部12は、集合Sbを空集合とし、パラメータnに0をセットする。
ステップ232において、判定部12は、集合Scから集合Sbを除いた集合から、符号化効率が最も高いブロックBbを選択する。ここでは、上記式1〜式4等により例示した、符号化効率を示す値を導出する関数fを用い、fの値が最も小さいブロックを選択する。なお、集合Scは、図9のステップ104において、第1動きベクトルの方が第2動きベクトルより符号化効率が高いと判定したブロックの集合である。
ステップ234において、判定部12は、n+1>Nであるか否かを判断する。Nは、上述したように、直接読出しの際の直接読出データ量の合計値が上限値を超えないように予め設定された値である。
判定部12は、ステップ234において否定判断した場合には、ステップ236に進み、ステップ236において、ブロックBbを集合Sbに加え、nに1を加算する。
ステップ238において、判定部12は、集合Scと集合Sbとが等しいか否かを判断する。判定部12は、ステップ238において否定判断した場合には、ステップ240に進む。
ステップ240において、判定部12は、集合Scから集合Sbを除いた集合に、第2動き探索の処理方向において両隣のブロックが特定ブロックである(すなわち両隣のブロックが集合Sbに含まれる)ブロックBaがあるか否かを判断する。
判定部12は、ステップ240において肯定判断した場合には、ステップ242に進み、ブロックBaに対する合成範囲rを導出する。ここで、合成範囲rとは、ブロックBaの両隣の特定ブロックをブロックB1、及びブロックB2としたときの、以下の3つの範囲を合成した合成範囲をいう。
・ブロックB1の第2動き探索における探索範囲
・ブロックB2の第2動き探索における探索範囲
・ブロックBaの第2動き探索中に参照画像メモリ42に保持されている範囲
合成範囲rの一例を図13に示す。図13において、300は、ブロックBaの第2動き探索処理中に参照画像メモリ42に記憶されている保持範囲を示す。302は、ブロックB1の第2動き探索の探索範囲を示す。304は、ブロックB2の第2動き探索の探索範囲を示す。306は、ブロックBaの第2動き探索の探索範囲を示す。308は、合成範囲rを示す。302、304、306の各探索範囲は、何れも第1動きベクトルにより設定される探索範囲である。
なお、両隣が特定ブロックであるブロックが複数存在した場合には、そのうちの1つを抽出し、該抽出したブロックBaに対する合成範囲rを導出する。
ステップ244において、判定部12は、ブロックBaが第2動き探索の処理対象とされたときの第1動きベクトルに基づいて設定される探索範囲が、合成範囲rに含まれるか否かを判断する。
判定部12は、ステップ244において肯定判断した場合には、ステップ246において、ブロックBaを集合Sbに加え(すなわち、ブロックBaを特定ブロックの集合に加え)、ステップ238に戻る。判定部12は、ステップ238で否定判断した場合には、ステップ240に進み、両隣が特定ブロックであるブロックのうち、未だ抽出していないブロックを抽出して、上記ステップ242以降の処理を繰り返す。
一方、判定部12は、ステップ244において否定判断した場合には、ステップ246をスキップしてステップ240に戻り、両隣が特定ブロックであるブロックのうち、未だ抽出していないブロックを抽出して、上記ステップ242以降の処理を繰り返す。
また、判定部12は、ステップ240において否定判断した場合には、ステップ232に戻り、上記と同様の処理を繰り返す。
また、判定部12は、ステップ234において肯定判断した場合には、ブロックBbを集合Sbには加えずに、ステップ248に進む。
ステップ248において、判定部12は、集合Sbに含まれるブロックを特定ブロックとして判定する。
また、判定部12は、ステップ238において肯定判断した場合には、集合Scに含まれる全てのブロックが特定ブロックの集合である集合Sbに加えられたことを示している。従って、判定部12は、ステップ248に進み、集合Sbに含まれるブロックを特定ブロックとして判定する。
以下、図15の模式図を参照し、集合Sc及び集合Sbに含まれるブロックの具体例を挙げて、上記図14を参照して説明した特定ブロック判定処理の流れを説明する。また、ここでは、Nが3である場合を例に挙げる。また、ステップ248より前の、ステップ230からステップ246までの処理を、特定ブロックを判定するための「集合操作処理」と呼称する。nは2とする。
図15(1)に示すように、集合Scには、ブロックw、x、y、zの4つのブロックが含まれている。特定ブロック判定処理の最初のステップであるステップ230において、集合Sbを空集合として設定し、nには0をセットする。なお、ブロックwの関数fの値は100、ブロックxの関数fの値は1000、ブロックyの関数fの値は101、ブロックzの関数fの値は200である。ここで、図16に、4つのブロックw、x、y、zの配置例を示す。第2動き探索は、前述したように左から右方向に実行され、右端のブロックの動き探索が行われた後は、1つ下の行の左端のブロックの動き探索が行われるものとする。なお、図16に示す各ブロックの左上端部から伸びる矢印は、第1動き探索において探索された各ブロックの第1動きベクトルを示す。
図15(2)に示すように、ステップ232において、ブロックBbが選択される。図15(2)に示すように、集合Scから集合Sbを除いた集合においてfの値が最も小さいブロックは、ブロックwであるため、ブロックwがブロックBbとして選択される。この段階では、nは0である。
図15(3)に示すように、次のステップ234において、n+1>Nを満たさないため、集合操作処理が続行される。
図15(4)に示すように、ステップ235において、ブロックBbが集合Sbに追加される。また、nに1が加算され、nは1となる。
図15(5)に示すように、ステップ238において、集合Scと集合Sbとが等しくないため、集合操作処理が続行される。ステップ240において、ブロックBaに該当するブロックはないと判断される。
従って、図15(6)に示すように、ステップ240において否定判断されるため、ステップ232に戻る。
図15(7)に示すように、図15(6)の後のステップ232において、ブロックBbが選択される。図15(6)に示すように、集合Scから集合Sbを除いた集合においてfの値が最も小さいブロックは、ブロックyであるため、ブロックyがブロックBbとして選択される。この段階では、nは1である。
図15(8)に示すように、次のステップ234において、n+1>Nを満たさないため、集合操作処理が続行される。
図15(9)に示すように、ステップ235において、ブロックBbが集合Sbに追加される。また、nに1が加算され、nは2となる。
図15(10)に示すように、ステップ238において、集合Scと集合Sbとが等しくないため、集合操作処理が続行される。ステップ240において、ブロックBaに該当するブロックがあると判断される。図15及び図16に示す例では、ブロックxがブロックBaとして判断され選択される。その後、ブロックBaについて合成範囲rが導出される。例えば、図13に示すように合成範囲rが導出され、ブロックBaの第1動きベクトルに基づく探索範囲が図13に示す範囲となった場合には、ステップ244において、ブロックBaの探索範囲は合成範囲rに含まれると判断される。従って、ステップ246において、ブロックBaが集合Sbに追加される。
図15(11)に示すように、次のステップ240において他のBaに該当するブロックはないため、否定判断され、ステップ232に戻る。
図15(12)に示すように、ステップ232において、ブロックBbが選択される。図15(12)に示すように、集合Scから集合Sbを除いた集合においてfの値が最も小さいブロックは、ブロックzであるため、ブロックzがブロックBbとして選択される。この段階では、nは2である。
図15(13)に示すように、次のステップ234において、n+1>Nを満たすため、集合操作処理は終了となり、ステップ248の処理に移行する。
上記図13〜図15を参照して説明した特定ブロック判定処理では、ブロックBbを集合Sbに追加する毎に、ブロックBaが存在するか否か判定している。そして、ブロックBaが存在すれば、該ブロックBaを集合Sbへと追加するようにしている。
ところで、前述したように、1つのブロックについての動き探索は、算出部38による多数のSAD算出処理を含むものである。このSAD算出処理で使用される原画像は、1つのSADを算出する毎にフレームメモリ18から取得するのではなく、第2動き探索部25の内部に設けた原画バッファ39から算出部38へと出力される。参照画像についても同様に、1つのブロックについての動き探索において使用する参照画像を予め参照バッファ49に格納してから該ブロックの動き探索を開始する。
従って、あるブロックの動き探索が終了した後、次のブロックの動き探索を開始するまでの間に、参照バッファ49の内容が更新される。
このように参照バッファ49を使用する構成において、両隣が特定ブロックとされたブロックBaの第2動き探索において、両隣のブロックの探索範囲の参照画像を流用(参照)するための機能を第2動き探索部25に設けることができる。以下、この機能を便宜的に「参照画キャッシュ機能」と呼称する。
参照画キャッシュ機能では、1つ前に第2動き探索の処理対象とされたブロックで参照した範囲の参照画像を参照バッファ49に保持しておき、次に処理対象とされるブロックでもその範囲(の一部)を参照画像として使用する。参照画キャッシュ機能により、フレームメモリ18から参照画像を取得しなくても、参照バッファ49に保持されている参照画像を用いることで、探索範囲の参照画像を参照できる。
第2動き探索部25の制御部45は、上述したように、第2動き探索の処理対象となるブロックを切替えるタイミングで、参照画像メモリ回路27の制御部41に対する読出要求を出力する。制御部45は、該読出要求に読出対象の範囲、及び参照バッファ49に対する格納先アドレスの指定を含めて出力し、参照バッファ49に対するデータの格納及び消去のタイミングを制御し、参照画キャッシュ機能を実現する。
ここで、図17A、図17Bを参照して、第2動き探索部25の制御部45により行われる参照画キャッシュ機能について説明する。ここでは、第2動き探索の処理対象となる連続した3つのブロックBw、Bx、Byを例に挙げて説明する。
図17Aにおいて、ブロックBwの探索範囲は、領域a及び領域bを含む。ブロックByの探索範囲は、領域d及び領域eを含む。ブロックBxの探索範囲は、領域c、領域b、及び領域dを含む。すなわち、領域bは、ブロックBwの探索範囲及びブロックBxの探索範囲が重なる部分であり、領域dは、ブロックByの探索範囲及びブロックBxの探索範囲が重なる部分である。
以下、説明を簡単にするため、図17Aに示した各探索範囲の全てが、参照画像メモリ42に記憶されていない範囲である(直接読出しが必要な範囲である)ものと仮定して説明する。
図17Bは、各ブロックの処理期間毎に、参照バッファ49に保持される領域を模式的に表わした図である。(1)が、参照画キャッシュ機能を実行した場合を示し、(2)が、参照画キャッシュ機能を実行しない場合を示している。
まず、参照画キャッシュ機能を実行しない(2)について説明する。まず、ブロックBwの第2動き探索の前(t1の前)に、ブロックBwの探索範囲(領域a及び領域b)が参照バッファ49に保持される。また、原画バッファ48も更新される。
ブロックBwの第2動き探索が終了した後、ブロックBxの第2動き探索の前に(すなわちt2において)、領域a及び領域bが、参照バッファ49から消去され、領域bが、再度フレームメモリ18から読出されて参照バッファ49に格納される。これにより、ブロックBxの第2動き探索の前に、ブロックBxの探索範囲(領域b、領域c、領域d)が参照バッファ49に保持される。また、原画バッファ48も更新される。
ブロックBxの第2動き探索が終了した後、ブロックByの第2動き探索の前に(すなわちt4において)、領域b、領域c、及び領域dが、参照バッファ49から消去され、領域dが、再度フレームメモリ18から読出されて参照バッファ49に格納される。これにより、ブロックByの第2動き探索の前に、ブロックByの探索範囲(領域d及び領域e)が参照バッファ49に保持される。また、原画バッファ48も更新される。
図17Bの(2)に例示した構成では、フレームメモリ18に対するアクセス量が増える。従って、例えば、図10や図12を参照して説明した特定ブロック判定処理により特定ブロックを判定する場合等に採用することができる。
次に、参照画キャッシュ機能を実行する(1)について説明する。まず、(2)の場合と同様に、ブロックBwの第2動き探索の前に(t1の前に)、ブロックBwの探索範囲(領域a及び領域b)が参照バッファ49に保持される。また、原画バッファ48も更新される。
ブロックBwの第2動き探索が終了した後、ブロックBxの第2動き探索の前に(すなわちt2において)、原画バッファ48が更新される。また、ブロックBxの処理で参照されない領域aは、参照バッファ49から消去される。更にまた、領域bは、ブロックBxの処理においても参照されるため、参照バッファ49から削除されることなく、そのまま保持される。従って、(1)の場合には、ブロックBxの探索前に、領域bを再度フレームメモリ18から読出して参照バッファ49に格納する必要はない。
ブロックBxの第2動き探索が終了した後、ブロックByの第2動き探索の前に(すなわちt4において)、原画バッファ48が更新される。また、ブロックByの処理で参照されない領域b及び領域cは、参照バッファ49から消去される。更にまた、領域dは、ブロックByの処理においても参照されるため、参照バッファ49から削除されることなく、そのまま保持される。従って、(1)の場合には、ブロックByの探索前に、領域dを再度フレームメモリ18から読出して参照バッファ49に格納する必要はない。
すなわち、第2動き探索部25の制御部45は、あるブロックの第2動き検出探索で使用した参照画像のうち、次のブロックの第2動き探索でも使用される領域については、次のブロックの第2動き探索が終了するまで参照バッファ49に保持されるよう制御する。次のブロックの第2動き探索では、該参照バッファ49に保持された領域を再利用することで、該再利用領域をフレームメモリ18から読み込まないようにしている。
図17Bの(2)に例示した構成では、フレームメモリ18に対するアクセス量が抑制される。従って、隣のブロックで読み込まれた範囲を参照画像として流用する場合に採用することができる。なお、(2)に例示した構成は、図10や図12を参照して説明した特定ブロック判定処理により特定ブロックを判定した場合であっても採用可能である。
なお、上記例では、原画バッファ48及び参照バッファ49をシングルバッファ構成とし、各ブロックの動き探索と、原画バッファ48及び参照バッファ49の更新とを交互に行う場合を例に挙げて説明したが、これに限定されない。例えば、原画バッファ48及び参照バッファ49の各々をダブルバッファ構成とし、図18に示すように、パイプライン的に処理を行うように構成してもよい。
また、上記説明した各例では、フレームメモリ18から直接探索範囲の参照画像を読出して参照バッファ49に格納するときの直接読出データ量が一律cであると仮定してNの値を設定し、特定ブロックを判定する例について説明したが、これに限定されない。例えば、フレームメモリ18から直接探索範囲の参照画像を読出すときの直接読出データ量を各ブロック毎に導出し、該導出した直接読出データ量の合計値が直接読出データ量の上限値DNを越えない範囲内で特定ブロックを判定するようにしてもよい。
ここで、図14を参照して例示した特定ブロック判定処理を、上記直接読出データ量をブロック毎に導出して判定する処理に変更した変形例を図19に示す。
ステップ260及びステップ262の処理内容は、図14のステップ230及びステップ232と同じであるため、説明を省略する。
ステップ262の後、ステップ264において、判定部12は、ブロックBbの直接読出データ量dnを計算して導出する。直接読出データ量dnの計算方法は特に限定されないが、例えば、直接読出しを行う範囲の大きさをパラメータとする関数を予め用意しておき、該関数を用いて算出してもよい。
上記関数は、直接読出しを行う範囲が大きいほど、値が大きくなる関数とすることができる。なお、直接読出しを行う範囲は、ブロックBbの第1動きベクトルに応じて設定される探索範囲から、参照画像メモリ42に記憶されている範囲を除外して求めればよい。
ステップ266では、判定部12は、n+dn>DNであるか否かを判断する。DNは、直接読出しの際の直接読出データ量の合計値の上限値である。
ステップ266で否定判断した場合には、判定部12は、ステップ268において、ブロックBbを集合Sbに加え、nにdnを加算する。また、ステップ266で肯定判断した場合には、判定部12は、ステップ280に進む。なお、ステップ270からステップ280までの処理は、上記図14を参照して説明したステップ236からステップ248までの処理と同じであるため、説明を省略する。
このように、直接読出データ量を一律cとして直接読出データ量の合計値を算出するのではなく、実際に各ブロック毎に計算しながら特定ブロックの判定を進めて、その量をDN以下に抑えるようにしている。
直接読出データ量を一律cとする場合には、実際の直接読出データ量が変動しても直接読出データ量の合計値が上限値を超えないようNを低めに設定して運用する可能性があるが、これではメモリ帯域に余裕があっても特定ブロックが少なめに判定されてしまう。しかしながら、ブロック毎に直接読出データ量を計算する構成とすれば、より正確に合計値を計算できるため、DNを上限値そのもの或いは上限値に近い値に設定できる。これにより、より多くのブロックを特定ブロックと判定できる。
なお、図10を参照して説明した特定ブロック判定処理においても同様に、直接読出データ量を一律cとせずに、ブロック毎に計算して判定してもよい。具体的には、ステップ202に代えて、以下の処理を行う。判定部12は、符号化効率が高いブロックから順に直接読出データ量を計算して累計していく。そして、判定部12は、直接読出データ量の累計値が上限値を超えたとき、符号化効率が最も高いブロックから上記累計値が上限値を超えたブロックより1つ上位のブロックまでの各ブロックを特定ブロックと判定してもよい。
また、図12を参照して説明した特定ブロック判定処理においても同様に、直接読出データ量を一律cとせずに、ブロック毎に計算して判定してもよい。例えば、図10のステップ214からステップ218の処理に代えて、以下の処理を行う。
判定部12は、ステップ214の処理に代えて、ヒストグラムの階級kに含まれる各ブロックの直接読出データ量を計算し、該階級kの直接読出データ量の合計値値Tkを計算する処理を行う。次に、判定部12は、ステップ216の処理に代えて、DtにTkを加算する処理を行う。次に、判定部12は、ステップ218の処理に代えて、Dt≦DNであるか否かを判定する。判定部12は、Dt≦DNである場合には、ステップ220に進み、Dt≦DNでない場合には、ステップ222に進む。
以上説明した特定ブロック判定処理の変形例によっても、上記と同様の効果が得られる。
上記実施形態では、第1動き探索の処理単位のブロック(以下、第1ブロック)を元の倍率に戻したときのサイズと、第2動き探索の処理単位のブロック(以下、第2ブロック)のサイズが、同じである場合について説明したが、異なっていてもよい。仮に第2ブロックのサイズが、縮小前の第1ブロックのサイズよりも大きい場合には、以下のように処理してもよい。まず、第2ブロックに対応する複数の第1ブロックの第1動きベクトル、第1評価値、第2動きベクトル、第2評価値の各々の平均値を計算する。この4つの平均値を判定部12で用いて特定ブロックを判定する。処理方法は上記説明したように行えばよい。また、仮に第2ブロックのサイズが、縮小前の第1ブロックのサイズよりも小さい場合には、第2ブロックに該当する第1ブロックの第1動き探索の探索結果をそのまま用いればよい。
更にまた、図20に示すように、符号化装置1の判定部12の機能をコンピュータにより実現し、第1動き探索部11及び主符号化処理部13の機能を、コンピュータに設けられた符号化部71により実現してもよい。
コンピュータ60はCPU(Central Processing Unit)61、プログラムを記憶した不揮発性のプログラム記憶部62、メインメモリ15、画像処理部64、外部IF(Interface)66、画像入力IF67、及び符号化部71を備えている。メインメモリ15は、メモリコントローラ14に接続されている。そして、CPU61、プログラム記憶部62、メモリコントローラ14、画像処理部64、外部IF66、画像入力IF67、符号化部71は、バス70を介して互いに接続されている。図20に示すメモリコントローラ14及びメインメモリ15は、図1を用いて説明したメモリコントローラ14及びメインメモリ15に対応する。
プログラム記憶部62には、判定部12の判定処理を実行するための判定プログラムが記憶されている。
CPU61は、プログラム記憶部62から判定プログラムを読み出してメインメモリ15に展開し、判定プログラムのプロセスを実行する。CPU61が判定プログラムのプロセスを実行することで、図1に示した判定部12の機能が実現される。なお、CPU61が実行するプログラムを展開するメモリは、メインメモリ15とは異なるメモリであってもよい。
外部IF66は、記録メディア68及び操作パネルコントローラ69のインタフェースである。画像入力IF67は、動画像等を入力するためのインタフェースである。
符号化部71は、ASIC等のハードウェアにより、第1動き探索部11及び主符号化処理部13の機能を実現する。
このような構成によっても、上記と同様に作用する。
なお、上記では判定プログラムがプログラム記憶部62に記憶されている態様を説明したが、判定プログラムは、CD−ROMや、USBを介して接続可能なフラッシュメモリ等の可搬型の記録媒体に記録されている形態で提供することも可能である。
本明細書に記載された全ての文献、特許出願及び技術規格は、個々の文献、特許出願及び技術規格が参照により取り込まれることが具体的かつ個々に記された場合と同程度に、本明細書中に参照により取り込まれる。
以上の実施形態に関し、更に以下の付記を開示する。
(付記1)
縮小した参照フレーム画像内の第1探索範囲を参照して第1動きベクトルを探索し、符号化効率を求める第1処理と、前記縮小した参照フレーム画像内の前記第1探索範囲より小さく前記第1探索範囲に含まれる第2探索範囲を参照して第2動きベクトルを探索し、符号化効率を求める第2処理と、を含む第1動き探索を、動画像の処理対象フレーム画像内の前記第1動き探索の処理単位とされるブロック毎に行う第1動き探索部と、
前記第1動き探索の処理結果に基づいて行われる第2動き探索で参照される参照フレーム画像が記憶される記憶部から部分的に読出された参照画像を記憶する参照画像記憶部と、
前記処理対象フレーム画像内の前記第2動き探索の処理単位とされるブロック毎に、
前記第2動きベクトルに基づいて設定される前記第2動き探索の探索範囲を含む前記参照画像を、各ブロックの前記第2動き探索の開始前に前記参照画像記憶部に記憶させる制御部と、
前記処理対象フレーム画像を前記第2動き探索の処理単位とされるブロックに分割したときの複数のブロックのうち、前記参照画像記憶部を介さずに前記記憶部から前記参照フレーム画像を直接読出すときの直接読出データ量の合計値が上限値を超えない範囲内で、前記第2動きベクトルよりも前記第1動きベクトルの方が符号化効率が高いブロックを、前記第1動きベクトルを用いて前記第2動き探索を行う特定ブロックとして判定し、前記特定ブロック以外のブロックを、前記第2動きベクトルを用いて前記第2動き探索を行う非特定ブロックとして判定する判定部と、
前記判定部において前記特定ブロックと判定されたブロックについては、前記参照フレーム画像のうち前記第1動きベクトルに基づいて設定される探索範囲の画像を参照し、前記第1動きベクトルに基づいて設定される探索範囲の画像のうち少なくとも前記参照画像記憶部に記憶されていない画像を参照するときには、前記参照画像記憶部を介さずに前記記憶部から直接読出された画像を参照して動きベクトルを探索する前記第2動き探索を行い、前記判定部において前記非特定ブロックと判定されたブロックについては、前記参照画像記憶部に記憶されている前記参照画像のうち、前記第2動きベクトルに基づいて設定される探索範囲の画像を参照して動きベクトルを探索する前記第2動き探索を行う第2動き探索部と、
を備えた符号化装置。
(付記2)
前記判定部は、前記複数のブロックのうち、前記第2動きベクトルよりも前記第1動きベクトルの方が符号化効率が高いブロックを選択し、前記選択したブロックのうち、前記第1動きベクトルの符号化効率が高い順に上位N個(Nは、前記直接読出データ量の合計値が前記上限値を超えないように予め設定された整数)のブロックを前記特定ブロックとして判定するか、又は、前記選択したブロックのうち、前記第1動きベクトルの符号化効率が高い方から順に前記直接読出データ量を累計したときの累計値が前記上限値を越えない範囲内で、前記第1動きベクトルの符号化効率が高いブロックから順に前記特定ブロックとして判定する
付記1に記載の符号化装置。
(付記3)
前記判定部は、前記複数のブロックのうち、前記第2動きベクトルよりも前記第1動きベクトルの方が符号化効率が高いブロックを選択し、前記選択したブロックについて、各ブロックの第1動きベクトルの符号化効率を示す値の度数分布又はヒストグラムを生成し、前記生成した度数分布又はヒストグラムの前記値が示す符号化効率が高い順に上位の階級から度数を加算していき、度数の累計値がN(Nは、前記直接読出データ量の合計値が前記上限値を超えないように予め設定された整数)を越えた階級より上位の階級の各々に含まれるブロックを前記特定ブロックとして判定するか、又は、前記値が示す符号化効率が高い順に上位の階級から各ブロックの前記直接読出データ量を加算していき、その累計値が前記上限値を越えた階級より上位の階級の各々に含まれるブロックを前記特定ブロックとして判定する
付記1に記載の符号化装置。
(付記4)
前記判定部は、
前記複数のブロックのうち、既に前記特定ブロックと判定されたブロックを除くブロックから、前記第2動きベクトルよりも前記第1動きベクトルの方が符号化効率が高いブロックを抽出し、該抽出したブロックの中で前記第1動きベクトルの符号化効率が最も高いブロックを前記特定ブロックとして判定する第1判定処理と、
前記第1判定処理が1回実行される毎に、両隣が前記特定ブロックとされたブロックを選択し、該選択したブロックの各々について、前記第2動き探索の処理対象とされたときの前記第1動きベクトルに基づいて設定される第3探索範囲が、前記両隣の特定ブロックが前記第2動き探索の処理対象とされたときの前記第1動きベクトルに基づいて設定される探索範囲の各々と、前記両隣が前記特定ブロックとされたブロックの前記第2動き探索の処理中に前記参照画像記憶部に記憶されている範囲との合成範囲に含まれるか否かを判定し、前記第3探索範囲が前記合成範囲に含まれると判定したブロックを、前記特定ブロックとして判定する第2判定処理とを、
前記第1の判定処理においてN個(Nは、前記直接読出データ量の合計値が前記上限値を超えないように予め設定された整数)の特定ブロックが判定されるまで繰り返し行うか、又は、前記第1判定処理で前記特定ブロックと判定されたブロックの前記直接読出データ量の合計値が前記上限値を越えない範囲内で繰り返し行う
付記1に記載の符号化装置。
(付記5)
前記制御部は、前記第2動き探索の処理対象のブロックが次のブロックに切替えられる際に、前記次のブロックを前記非特定ブロックとしたときに探索範囲として設定される可能性がない参照画像を前記参照画像記憶部から消去し、前記次のブロックを前記非特定ブロックとしたときに探索範囲として設定される可能性があるものの、前記参照画像記憶部に未だ記憶されていない参照画像を前記記憶部から読出して前記参照画像記憶部に記憶する制御を行う
付記1〜付記4の何れか1項記載の符号化装置。
(付記6)
前記制御部は、前記第2動き探索の処理対象のブロックが次のブロックに切替えられる際に、該切替以降に処理対象とされる各ブロックを前記非特定ブロックとしたときに探索範囲として設定される可能性がない参照画像を前記参照画像記憶部から消去し、前記次のブロックを前記非特定ブロックとしたときに探索範囲として設定される可能性があるものの、前記参照画像記憶部に未だ記憶されていない参照画像を前記記憶部から読出して前記参照画像記憶部に記憶する
付記1〜付記4の何れか1項記載の符号化装置。
(付記7)
縮小した参照フレーム画像内の第1探索範囲を参照して第1動きベクトルを探索し、符号化効率を求める第1処理と、前記縮小した参照フレーム画像内の前記第1探索範囲より小さく前記第1探索範囲に含まれる第2探索範囲を参照して第2動きベクトルを探索し、符号化効率を求める第2処理と、を含む第1動き探索を、動画像の処理対象フレーム画像内の前記第1動き探索の処理単位とされるブロック毎に行い、
前記第1動き探索の処理結果に基づいて行われる第2動き探索で参照される参照フレーム画像が記憶される記憶部から部分的に読出された参照画像を記憶する参照画像記憶部に、前記処理対象フレーム画像内の前記第2動き探索の処理単位とされるブロック毎に、前記第2動きベクトルに基づいて設定される前記第2動き探索の探索範囲を含む前記参照画像を、各ブロックの前記第2動き探索の開始前に前記参照画像記憶部に記憶させ、
前記処理対象フレーム画像を前記第2動き探索の処理単位とされるブロックに分割したときの複数のブロックのうち、前記参照画像記憶部を介さずに前記記憶部から前記参照フレーム画像を直接読出すときの直接読出データ量の合計値が上限値を超えない範囲内で、前記第2動きベクトルよりも前記第1動きベクトルの方が符号化効率が高いブロックを、前記第1動きベクトルを用いて前記第2動き探索を行う特定ブロックとして判定し、前記特定ブロック以外のブロックを、前記第2動きベクトルを用いて前記第2動き探索を行う非特定ブロックとして判定し、
前記特定ブロックと判定されたブロックについては、前記参照フレーム画像のうち前記第1動きベクトルに基づいて設定される探索範囲の画像を参照し、前記第1動きベクトルに基づいて設定される探索範囲の画像のうち少なくとも前記参照画像記憶部に記憶されていない画像を参照するときには、前記参照画像記憶部を介さずに前記記憶部から直接読出された画像を参照して動きベクトルを探索する前記第2動き探索を行い、前記非特定ブロックと判定されたブロックについては、前記参照画像記憶部に記憶されている前記参照画像のうち、前記第2動きベクトルに基づいて設定される探索範囲の画像を参照して動きベクトルを探索する前記第2動き探索を行う、
符号化方法。
(付記8)
前記特定ブロックの判定において、前記複数のブロックのうち、前記第2動きベクトルよりも前記第1動きベクトルの方が符号化効率が高いブロックを選択し、前記選択したブロックのうち、前記第1動きベクトルの符号化効率が高い順に上位N個(Nは、前記直接読出データ量の合計値が前記上限値を超えないように予め設定された整数)のブロックを前記特定ブロックとして判定するか、又は、前記選択したブロックのうち、前記第1動きベクトルの符号化効率が高い方から順に前記直接読出データ量を累計したときの累計値が前記上限値を越えない範囲内で、前記第1動きベクトルの符号化効率が高いブロックから順に前記特定ブロックとして判定する
付記7に記載の符号化方法。
(付記9)
前記特定ブロックの判定において、前記複数のブロックのうち、前記第2動きベクトルよりも前記第1動きベクトルの方が符号化効率が高いブロックを選択し、前記選択したブロックについて、各ブロックの第1動きベクトルの符号化効率を示す値の度数分布又はヒストグラムを生成し、前記生成した度数分布又はヒストグラムの前記値が示す符号化効率が高い順に上位の階級から度数を加算していき、度数の累計値がN(Nは、前記直接読出データ量の合計値が前記上限値を超えないように予め設定された整数)を越えた階級より上位の階級の各々に含まれるブロックを前記特定ブロックとして判定するか、又は、前記値が示す符号化効率が高い順に上位の階級から各ブロックの前記直接読出データ量を加算していき、その累計値が前記上限値を越えた階級より上位の階級の各々に含まれるブロックを前記特定ブロックとして判定する
付記7に記載の符号化方法。
(付記10)
前記特定ブロックの判定において、前記複数のブロックのうち、既に前記特定ブロックと判定されたブロックを除くブロックから、前記第2動きベクトルよりも前記第1動きベクトルの方が符号化効率が高いブロックを抽出し、該抽出したブロックの中で前記第1動きベクトルの符号化効率が最も高いブロックを前記特定ブロックとして判定する第1判定処理と、
前記第1判定処理が1回実行される毎に、両隣が前記特定ブロックとされたブロックを選択し、該選択したブロックの各々について、前記第2動き探索の処理対象とされたときの前記第1動きベクトルに基づいて設定される第3探索範囲が、前記両隣の特定ブロックが前記第2動き探索の処理対象とされたときの前記第1動きベクトルに基づいて設定される探索範囲の各々と、前記両隣が前記特定ブロックとされたブロックの前記第2動き探索の処理中に前記参照画像記憶部に記憶されている範囲との合成範囲に含まれるか否かを判定し、前記第3探索範囲が前記合成範囲に含まれると判定したブロックを、前記特定ブロックとして判定する第2判定処理とを、
前記第1の判定処理においてN個(Nは、前記直接読出データ量の合計値が前記上限値を超えないように予め設定された整数)の特定ブロックが判定されるまで繰り返し行うか、又は、前記第1判定処理で前記特定ブロックと判定されたブロックの前記直接読出データ量の合計値が前記上限値を越えない範囲内で繰り返し行う
付記7に記載の符号化方法。
(付記11)
縮小した参照フレーム画像内の第1探索範囲を参照して第1動きベクトルを探索し、符号化効率を求める第1処理と、前記縮小した参照フレーム画像内の前記第1探索範囲より小さく前記第1探索範囲に含まれる第2探索範囲を参照して第2動きベクトルを探索し、符号化効率を求める第2処理と、を含む第1動き探索を、動画像の処理対象フレーム画像内の前記第1動き探索の処理単位とされるブロック毎に行う第1動き探索部、前記第1動き探索の処理結果に基づいて行われる第2動き探索で参照される参照フレーム画像が記憶される記憶部から部分的に読出された参照画像を記憶する参照画像記憶部、前記処理対象フレーム画像内の前記第2動き探索の処理単位とされるブロック毎に、
前記第2動きベクトルに基づいて設定される前記第2動き探索の探索範囲を含む前記参照画像を、各ブロックの前記第2動き探索の開始前に前記参照画像記憶部に記憶させる制御部、及び前記第1動きベクトルを用いて前記第2動き探索を行う特定ブロックについては、前記参照フレーム画像のうち前記第1動きベクトルに基づいて設定される探索範囲の画像を参照し、前記第1動きベクトルに基づいて設定される探索範囲の画像のうち少なくとも前記参照画像記憶部に記憶されていない画像を参照するときには、前記参照画像記憶部を介さずに前記記憶部から直接読出された画像を参照して動きベクトルを探索する前記第2動き探索を行い、前記第2動きベクトルを用いて前記第2動き探索を行う非特定ブロックについては、前記参照画像記憶部に記憶されている前記参照画像のうち、前記第2動きベクトルに基づいて設定される探索範囲の画像を参照して動きベクトルを探索する前記第2動き探索を行う第2動き探索部、を備えた装置の前記第1動き探索部の処理結果を取得するコンピュータに、
前記処理対象フレーム画像を前記第2動き探索の処理単位とされるブロックに分割したときの複数のブロックのうち、前記参照画像記憶部を介さずに前記記憶部から前記参照フレーム画像を直接読出すときの直接読出データ量の合計値が上限値を超えない範囲内で、前記第2動きベクトルよりも前記第1動きベクトルの方が符号化効率が高いブロックを前特定ブロックとして判定し、前記特定ブロック以外のブロックを前記非特定ブロックとして判定し、該判定結果を前記第2動き探索部に供給する
処理を実行させるためのプログラム又はプログラムを記録した記録媒体。
(付記12)
前記処理では、前記複数のブロックのうち、前記第2動きベクトルよりも前記第1動きベクトルの方が符号化効率が高いブロックを選択し、前記選択したブロックのうち、前記第1動きベクトルの符号化効率が高い順に上位N個(Nは、前記直接読出データ量の合計値が前記上限値を超えないように予め設定された整数)のブロックを前記特定ブロックとして判定するか、又は、前記選択したブロックのうち、前記第1動きベクトルの符号化効率が高い方から順に前記直接読出データ量を累計したときの累計値が前記上限値を越えない範囲内で、前記第1動きベクトルの符号化効率が高いブロックから順に前記特定ブロックとして判定する
付記7に記載のプログラム又はプログラムを記録した記録媒体。
(付記13)
前記処理では、前記複数のブロックのうち、前記第2動きベクトルよりも前記第1動きベクトルの方が符号化効率が高いブロックを選択し、前記選択したブロックについて、各ブロックの第1動きベクトルの符号化効率を示す値の度数分布又はヒストグラムを生成し、前記生成した度数分布又はヒストグラムの前記値が示す符号化効率が高い順に上位の階級から度数を加算していき、度数の累計値がN(Nは、前記直接読出データ量の合計値が前記上限値を超えないように予め設定された整数)を越えた階級より上位の階級の各々に含まれるブロックを前記特定ブロックとして判定するか、又は、前記値が示す符号化効率が高い順に上位の階級から各ブロックの前記直接読出データ量を加算していき、その累計値が前記上限値を越えた階級より上位の階級の各々に含まれるブロックを前記特定ブロックとして判定する
付記7に記載のプログラム又はプログラムを記録した記録媒体。
(付記14)
前記処理では、
前記複数のブロックのうち、既に前記特定ブロックと判定されたブロックを除くブロックから、前記第2動きベクトルよりも前記第1動きベクトルの方が符号化効率が高いブロックを抽出し、該抽出したブロックの中で前記第1動きベクトルの符号化効率が最も高いブロックを前記特定ブロックとして判定する第1判定処理と、
前記第1判定処理が1回実行される毎に、両隣が前記特定ブロックとされたブロックを選択し、該選択したブロックの各々について、前記第2動き探索の処理対象とされたときの前記第1動きベクトルに基づいて設定される第3探索範囲が、前記両隣の特定ブロックが前記第2動き探索の処理対象とされたときの前記第1動きベクトルに基づいて設定される探索範囲の各々と、前記両隣が前記特定ブロックとされたブロックの前記第2動き探索の処理中に前記参照画像記憶部に記憶されている範囲との合成範囲に含まれるか否かを判定し、前記第3探索範囲が前記合成範囲に含まれると判定したブロックを、前記特定ブロックとして判定する第2判定処理とを、
前記第1の判定処理においてN個(Nは、前記直接読出データ量の合計値が前記上限値を超えないように予め設定された整数)の特定ブロックが判定されるまで繰り返し行うか、又は、前記第1判定処理で前記特定ブロックと判定されたブロックの前記直接読出データ量の合計値が前記上限値を越えない範囲内で繰り返し行う
付記7に記載のプログラム又はプログラムを記録した記録媒体。