以下に図面を参照して、開示の符号化装置、符号化方法、および符号化プログラムの実施の形態を詳細に説明する。
図1は、本実施の形態にかかる符号化装置の動作例を示す説明図である。符号化装置100は、動画像を符号化するコンピュータである。符号化装置100は、AVC(Advanced Video Coding)/H.264や、HEVC(High Efficiency Video Coding)にしたがって、画像が分割されたブロックごとに動画像を符号化する。
H.264に従う場合、符号化装置100は、たとえば、1つのブロックの大きさを16×16[画素]として画像を分割する。また、HEVCに従う場合、符号化装置100は、たとえば、1つのブロックの大きさを64×64[画素]として画像を分割する。さらに、HEVCに従う場合、符号化装置100は、1つのブロックをさらに分割したサブブロックごとに分割して、小領域ごとに符号化してもよい。以下、サブブロックを、「小領域」と呼称する。以下の説明では、小領域ごとに符号化する例を用いて説明する。
AVC/H.264やHEVCで採用される動き予測は、符号化対象の原画像の対象小領域と符号化対象のピクチャの時間的に前後する参照画像の参照小領域との差分情報と、対象小領域が参照小領域まで移動した画素数を示す動きベクトルとを符号化する。これにより、符号化対象の対象小領域の符号量を削減することができる。AVC/H.264やHEVCで採用される動き予測には、複数の動き予測モードがある。たとえば、符号量を大きく削減することが可能な動き予測モードとして、H.264にはスキップモードがあり、HEVCには、マージモードがある。
自然画像において、ある小領域の動きベクトルは、ある小領域の周囲の動きベクトルと相関性が高くなることがある。したがって、動き探索により生成された、ある小領域の動きベクトルをそのまま用いるより、ある小領域の動きベクトルと空間的に隣接する小領域の動きベクトルとの差分を符号化することにより、動きベクトルの符号量を削減することができる。
スキップモードは、符号化対象の小領域に対して、空間的に左位置、上位置、または右上位置に隣接する小領域の動きベクトルをそのまま利用することにより、動きベクトルの差分の符号量も削減することができる。また、マージモードは、利用できる動きベクトルの種類が、スキップモードより増加しており、より符号化効率を向上させることができる。
このように、動き予測モードには、動き探索により生成された動きベクトルを用いる、非マージモードと、隣接する小領域の動きベクトルを利用するスキップモードやマージモードとがある。符号化装置100は、複数の動き予測モードに対して、各動き予測モードの動きベクトルの評価値を算出して、たとえば評価値が最小の動き予測モードに決定する。
動きベクトルの評価値は、対象小領域と動きベクトルが示す参照小領域との対応する画素間の差分を表す値を累積加算することにより算出される。評価値は、対象小領域と参照小領域との類似度を判断する指標となる。画素間の差分を表す値は、たとえば、画素間の画素値の差である。画素値は、画素が示す色情報であり、たとえば、輝度成分値、青色色差成分値、赤色色差成分値などの少なくともいずれか一つの成分値であってもよく、また、赤成分値、緑成分値、青成分値などの成分値であってもよい。本実施の形態では、画素間の差分を表す値は、輝度成分値の差とする。
評価値は、具体的には、たとえば、SAD(Sum of Absolute Difference)でもよいし、SATD(Sum of Absolute Transformed Differences)でもよいし、SSD(Sum of Squared Difference)でもよい。以下、本実施の形態では、動きベクトルの評価値がSADであるときの例について説明する。また、算出されたSADの値を、「SADコスト」と称する。SADコストは、値が小さい程、該当の動き予測モードを選択した際の、対象小領域の符号量が少なくなることを示す。
ここで、スキップモードやマージモードによる符号化を行う場合、対象小領域に隣接する隣接小領域の動きベクトルを利用するため、符号化を行う装置は、スキップモードやマージモードの符号量の評価値の算出を、小領域単位で、かつ、時分割で行うことになる。評価値については後述する。したがって、隣接する小領域の評価値を算出する処理を並列に処理するような高速化が難しく、リアルタイム符号化の妨げとなる。特にHEVCのマージモードでは、符号化対象の小領域に対して左に隣接する小領域から2種類、上に隣接する小領域から3種類と、選択可能な小領域の数がH.264と比較して増加している。したがって、マージモードのコストを計算する演算量が、選択可能な小領域の数に比例して増加する。
ある小領域に対する複数のマージモードのSADコスト算出は並列処理が可能である。しかしながら、SADコストを算出するために参照される画素値が格納される参照画メモリとSADコストを算出するSAD算出用回路とを複数用意することになり、回路規模が増大してしまう。
そこで、符号化装置100は、非マージモードについて、参照画メモリとSAD算出用回路とを用いて、複数の動きベクトルの候補となる候補ベクトルごとのSADコストを算出して、各候補ベクトルから、第1の動きベクトル候補を特定する。そして、符号化装置100は、隣接小領域ごとの動きベクトルから選択された第2動きベクトル候補と、候補ベクトルごとのSADコストとに基づいて、擬似SADコストを算出する。擬似SADコストは、参照画メモリとSAD算出用回路とを用いて算出されたSADコストでなく、第2動きベクトル候補と候補ベクトルごとのSADコストとから予測されたSADコストである。
このように、擬似SADコストの算出には、参照画メモリとSAD算出用回路とが用いられないため、符号化装置100は、回路規模を増大しなくても、非マージモードのSADコスト算出と、マージモードの擬似SADコストの算出とを並列に実行することができる。また、符号化装置100は、スキップモードについても、スキップモードの擬似SADコスト算出と、非マージモードのSADコスト算出とを並列に実行することができる。以下の説明では、マージモードの例について説明する。
図1において、符号化装置100は、対象小領域SB1について、候補ベクトルごとのSADコストを算出する。図1では、ハッチを付与した矢印が、候補ベクトルを示す。また、図1では、ハッチを付与した長方形が、候補ベクトルのSADコストを模式的に表す。長方形が縦に長い程、SADコストが大きいことを示す。具体的に、符号化装置100は、候補ベクトルMV1のSADコスト1と、候補ベクトルMV2のSADコスト2と、を算出する。そして、符号化装置100は、SADコスト1とSADコスト2とに基づいて、図1の例では、SADコストが小さい値となる候補ベクトルMV2を、第1動きベクトル候補に特定する。
続けて、符号化装置100は、対象小領域SB1に隣接する隣接小領域ごとの動きベクトルから第2動きベクトル候補となる、隣接小領域SB2の動きベクトルMV3を選択する。そして、符号化装置100は、動きベクトルMV3と、候補ベクトルMV1のSADコスト1と、候補ベクトルMV2のSADコスト2と、に基づいて、動きベクトルMV3の擬似SADコストを算出する。
擬似SADコストの算出の第1の例として、符号化装置100は、動きベクトルMV3の座標位置と候補ベクトルMV1の座標位置との距離D1と、動きベクトルMV3の座標位置と候補ベクトルMV2との距離D2と、を算出する。そして、符号化装置100は、下記(1)式のように、擬似SADコストを算出する。
擬似SADコスト=((1/距離D1)*SADコスト1+(1/距離D2)*SADコスト2)/((1/距離D1)+(1/距離D2)) …(1)
(1)式は、距離の逆数を重みとした加重平均である。また、擬似SADコストの算出の第2の例として、候補ベクトルが3つ以上あれば、符号化装置100は、候補ベクトル全体から、動きベクトルMV3に近い3つの候補ベクトルを抽出して、距離の逆数を重みとした加重平均を算出してもよい。また、擬似SADコストの算出の第3の例として、符号化装置100は、候補ベクトルの座標位置を表すX軸およびY軸と候補ベクトルのSADコストを表すZ軸とを有する空間座標系において、SADコストにより形成される面データを複数記憶しておく。そして、符号化装置100は、候補ベクトルのSADコストが形成する面に最も近い面データを選択し、選択した面データ上における動きベクトルMV3の座標位置のSADコストを、擬似SADコストとしてもよい。
擬似SADコストを算出後、符号化装置100は、非マージモードのSADコストと、マージモードの擬似SADコストとに基づいて、候補ベクトルMV2または候補ベクトルMV3のいずれか一方を、対象小領域SB1の動きベクトルに決定する。以下、図2〜図28を用いて、符号化装置100の詳細を説明する。
(コンピュータシステム200のハードウェア構成例)
次に、符号化装置100が適用されるコンピュータシステム200のハードウェアの一例について説明する。コンピュータシステム200は、たとえば、動画像を記録・再生する機能を有するシステムであり、具体的には、たとえば、パーソナル・コンピュータ、テレビジョン、レコーダ、スマートフォン、ビデオカメラ、デジタルカメラなどである。
図2は、コンピュータシステムのハードウェアの一例を示すブロック図である。図2において、コンピュータシステム200は、CPU(Central Processing Unit)201と、ROM(Read‐Only Memory)202と、RAM(Random Access Memory)203と、を含む。また、コンピュータシステム200は、撮像素子204と、撮像素子I/F(InterFace)205と、操作パネル206と、記録メディア207と、外部I/F208と、符号化装置100とを含む。
また、コンピュータシステム200は、ディスプレイ209と、ディスプレイ出力I/F210とを含む。また、CPU201〜RAM203と、撮像素子I/F205と、外部I/F208と、ディスプレイ出力I/F210と、符号化装置100とは、バス211で相互に接続される。
CPU201は、コンピュータシステム200の全体の制御を司る演算処理装置である。ROM202は、コンピュータシステム200のブートプログラムなどのプログラムを記憶する不揮発性メモリである。RAM203は、CPU201のワークエリアとして使用される揮発性メモリである。
撮像素子204は、対象物から発した光を電気信号に変換する装置である。たとえば、撮像素子204は、CCD(Charge Coupled Device)イメージセンサ、やCMOS(Complementary Metal Oxide Semiconductor)イメージセンサなどである。
撮像素子I/F205は、記録時に撮像素子204を制御することにより、撮像素子204からの信号を所定の画像フォーマットに変換してRAM203に格納する装置である。所定の画像フォーマットとは、たとえば、YUV420である。撮像素子204からの信号は、たとえば、RGBベイヤフォーマットに従う。
操作パネル206は、コンピュータシステム200が有する液晶タッチパネルや操作ボタンである。記録メディア207は、フラッシュROM等といった記憶装置である。また、記録メディア207は、本実施の形態にかかる動画像符号化プログラムを記録してもよい。外部I/F208は、操作パネル206、および記録メディア207を制御する。また、外部I/F208は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークを介して、コンピュータシステム200以外の他の装置に接続されてもよい。
ディスプレイ209は、撮像素子204が記録した画像フォーマットを表示する。ディスプレイ出力I/F210は、ディスプレイ209の制御を行う。
図3は、ピクチャとブロックとの関係の一例を示す説明図である。符号化装置100は、ピクチャをある一定サイズのブロック、たとえば、左上のブロックから右下のブロックまでラスタ順に従って符号化処理を行う。ブロックのサイズは、たとえば、H.264では16×16[画素]であり、HEVCでは64×64[画素]である。1枚のピクチャに対して符号化処理を開始する場合、符号化装置100は、ブロック[0]の符号化を実施し、次のブロック[1]を符号化するといったように、ブロック単位でラスタ順に符号化処理を行う。さらに、符号化装置100は、ひとつのブロックをさらに複数の小領域に分割した小領域単位で動き予測を行う。
図3の例では、符号化装置100は、ピクチャ301をブロック[0]、ブロック[1]、…、ブロック[BLKnum−1]というBLKnum個のブロックに分割し、ラスタ順に符号化処理を行う。ブロック[0]、ブロック[1]、…、ブロック[BLKnum−1]の大きさは、64×64[画素]となる。
そして、符号化装置100は、各ブロックをさらに複数の小領域に分割した小領域単位で動き予測を行う。図3の例では、符号化装置100は、ブロック[15]について、ブロック[15]をさらに複数の小領域として、小領域[0]〜小領域[SBnum−1]というSBnum個の小領域に分割した単位で動き予測を行う。なお、小領域[0]の大きさは、32×32[画素]である。また、小領域[1]〜小領域[4]の大きさは、8×8[画素]である。さらに、小領域[5]の大きさは、16×16[画素]である。また、本実施の形態にかかる符号化装置100は、高速化のため、複数の小領域に対して並列に動き探索処理を行う。
(マージモードの詳細)
図4は、非マージモードとマージモードとの符号量と動き予測コストの一例を示す説明図である。非マージモードにおける符号量は、符号化モード情報の符号量と、動きベクトル差分情報の符号量と、係数情報の符号量との合計となる。非マージモードにおける符号化モード情報は、前方予測か後方予測かを示す情報と、参照面がどの番号であるかを示す情報等である。動きベクトル差分情報は、隣接小領域の動きベクトルと対象小領域の動きベクトルの差分である。非マージモードにおける係数情報は、対象ブロックの画素群と動きベクトル差分情報により示される参照ブロックの画素群との差分情報である。
非マージモードにおける動き予測コストは、動きベクトルコストとSADコストとの合計とする。動きベクトルコストは、動きベクトル差分情報の符号量である。より具体的には、動きベクトル差分情報は、動きベクトル差分情報を算術符号等に用いられる変換テーブルに従って変換したビット長でもよいし、変換前のビット長でもよい。非マージモードのSADコストは、動き探索結果となる第1動きベクトル候補のSADの値である。
マージモードにおける符号量は、符号化モード情報の符号量と、マージIDXの符号量と、係数情報の符号量との合計となる。マージモードにおける符号化モード情報は、マージモードか否かを示すフラグである。マージIDXは、マージベクトルを特定する識別情報である。マージモードにおける係数情報は、対象ブロックの画素群とマージIDXによって特定されるマージベクトルにより示される参照ブロックの画素群との差分情報である。なお、図4には図示していないが、スキップモードにおける符号量は、符号化モード情報の符号量となる。
マージモードにおける動き予測コストは、マージIDXコストとSADコストとの合計とする。マージIDXコストは、マージIDXの符号量である。マージモードのSADコストは、複数のマージベクトルから選択された第2動きベクトル候補のSADである。
マージモードのSADコストを算出するには、参照画メモリとSAD算出用回路とを用いることになり、非マージモードのSADコストと並列に実行するには、複数用意することになる。そこで、本実施の形態では、符号化装置100は、マージモードにおける動き予測コストとして、擬似マージコストを算出する。擬似マージコストは、マージIDXコストと擬似SADコストとの合計とする。
図5は、マージモードにおける隣接ブロックの動きベクトルの利用例を示す説明図である。HEVCのマージモードは、図5で示す通り、符号化対象の小領域に対して左に隣接する左隣接小領域0および左隣接小領域1と、上に隣接する上隣接小領域0、上隣接小領域1および上隣接小領域2と、の5種類から選択することができる。本実施の形態では、マージモードの個数MMnumを5とし、マージモード[0]〜マージモード[4]を以下のように設定する。
具体的に、マージモードとして左隣接小領域1の動きベクトルを用いるモードを「マージモード[0]」とする。隣接ブロックの動きベクトルを、「マージベクトル」とする。たとえば、左隣接小領域1の動きベクトルを「マージベクトル[0]」とする。
また、マージモードとして上隣接小領域1の動きベクトルを用いるモードを「マージモード[1]」とする。さらに、上隣接小領域1の動きベクトルを「マージベクトル[1]」とする。また、マージモードとして上隣接小領域0の動きベクトルを用いるモードを「マージモード[2]」とする。さらに、上隣接小領域0の動きベクトルを「マージベクトル[2]」とする。また、マージモードとして左隣接小領域0の動きベクトルを用いるモードを「マージモード[3]」とする。さらに、左隣接小領域0の動きベクトルを「マージベクトル[3]」と呼称する。また、マージモードとして上隣接小領域2の動きベクトルを用いるモードを「マージモード[4]」とする。さらに、上隣接小領域2の動きベクトルを「マージベクトル[4]」と呼称する。
(符号化装置100の機能)
次に、符号化装置100の機能について説明する。図6は、符号化装置の機能例を示すブロック図である。符号化装置100は、第1の算出部601と、特定部602と、パラメータ決定部603と、選択部604と、第2の算出部605と、動きベクトル決定部606を含む。
なお、第1の算出部601〜動きベクトル決定部606は、記憶装置に記憶されたプログラムをCPU201が実行することにより、第1の算出部601〜動きベクトル決定部606の機能を実現してもよい。記憶装置とは、具体的には、たとえば、図2に示したROM202、RAM203、記録メディア207などである。
また、符号化装置100は、記憶部611にアクセス可能である。記憶部611は、ROM202、RAM203、記録メディア207といった記憶装置に格納される。また、記憶部611は、コストFF(FlipFlop)612と、コスト曲面テーブル613とを含む。コストFF612とコスト曲面テーブル613とは、同一の記憶装置内にあってもよいし、異なる記憶装置内にあってもよい。
コストFF612は、候補ベクトルごとに算出されたSADコストを記憶する。コストFF612の記憶内容の詳細は、図7にて後述する。
コスト曲面テーブル613は、次に示す3つの軸を有する空間座標系において、対象小領域の動きベクトル候補となるベクトルごとのSADコストを配置した際に形成される面を表す面データを複数記憶する。ベクトルごとのSADコストを配置した際に形成される面を、以下、「コスト曲面」と称する。次に示す3つの軸とは、対象小領域の動きベクトル候補となるベクトルが示す参照画像上の座標位置を表す第1の軸および第2の軸と、ベクトルのSADコストを表す第3の軸とである。コスト曲面テーブル613の記憶内容の詳細は、図8にて後述する。
第1の算出部601は、複数の小領域のうちの符号化対象となる対象小領域と、対象小領域の動きベクトル候補となる各候補ベクトルが示す参照画像上の参照小領域とに基づいて、候補ベクトルごとのSADコストを算出してコストFF612に格納する。たとえば、第1の算出部601は、対象小領域の各画素の輝度成分値と、各候補ベクトルが示す参照小領域の各画素の輝度成分値の差の絶対値を累積加算することにより、候補ベクトルごとのSADコストを算出して、コストFF612に格納する。
また、第1の算出部601は、算出した候補ベクトルごとのSADコストのうち最小値となる候補ベクトルから所定距離内にある候補ベクトルごとのSADコストを算出してコストFF612の記憶内容を上書きしてもよい。所定距離は、符号化装置100の開発者またはコンピュータシステム200の利用者によって指定される。たとえば、所定距離が大きい値に指定されると、符号化にかかる時間は長くなるが、符号量をより小さくできる場合がある。
たとえば、第1の算出部601が、フルペル精度にて、候補ベクトルごとのSADコストを算出して、コストFF612の記憶内容に格納したとする。そして、第1の算出部601は、格納された候補ベクトルごとのSADコストのうちの最小となる候補ベクトルから所定距離内を、ハーフペル精度にて候補ベクトルごとのSADコストを算出して、コストFF612の記憶内容を上書きする。さらに、第1の算出部601は、クォータペル精度にて候補ベクトルごとのSADコストを算出して、コストFF612の記憶内容を上書きしてもよい。
特定部602は、第1の算出部601によってコストFF612に格納された候補ベクトルごとのSADコストに基づいて、対象小領域の第1動きベクトル候補のSADコストを特定する。たとえば、特定部602は、コストFF612に格納された候補ベクトルのうちの、SADコストが最小となる候補ベクトルを第1動きベクトル候補として、第1動きベクトル候補のSADコストを特定する。特定されたSADコストは、フリップフロップ等の記憶装置に格納される。
パラメータ決定部603は、関数モデルに、コストFF612に格納された候補ベクトルごとの座標位置と候補ベクトルごとのSADコストとを代入することにより、関数モデルのパラメータの値を決定する。ここで、関数モデルは、対象小領域の動きベクトル候補となるベクトルが示す参照画像上の座標位置とパラメータとを用いてベクトルのSADコストを表す。たとえば、関数モデルが、下記(2)式であるとする。
SADコスト=a×x^2+b×y^2+c …(2)
ただし、a、bおよびcは、パラメータであり、xとyとは、ベクトルが示す参照画像上のX座標とY座標である。このとき、パラメータ決定部603は、x、y、SADコストに、コストFF612に格納された候補ベクトルごとの座標位置と候補ベクトルごとのSADコストとを代入して、aの値とbの値とcの値を決定する。具体的な決定方法として、パラメータ決定部603は、たとえば、最小自乗法によりaの値とbの値とcの値を決定する。決定したパラメータの値は、フリップフロップ等の記憶装置に格納される。
選択部604は、コスト曲面テーブル613に記憶された複数のコスト曲面の各々と、コストFF612に格納された候補ベクトルごとのSADコストとに基づいて、複数のコスト曲面からいずれかのコスト曲面を選択する。
たとえば、選択部604は、複数のコスト曲面のうちのあるコスト曲面について、SADコストが最小となる座標位置と、コストFF612に格納された候補ベクトルごとのSADコストのうちの最小となる候補ベクトルの座標位置とを特定する。次に、選択部604は、コストFF612に格納された候補ベクトルに対応して、候補ベクトルの座標位置に対応する、あるコスト曲面のSADコストと候補ベクトルのSADコストとの差の絶対値を算出する。ここで、選択部604は、差の絶対値の代わりに、差の2乗を用いてもよい。また、選択部604は、コストFF612に格納された候補ベクトル全てに対して差の絶対値を算出してもよいし、最小となる候補ベクトルの座標位置から所定範囲内にある候補ベクトルに対して差の絶対値を算出してもよい。
続けて、選択部604は、差の絶対値を累計加算することにより、あるコスト曲面と候補ベクトルごとのSADコストとの近似値を算出する。選択部604は、候補ベクトルごとのSADコストとの近似値を、コスト曲面ごとに算出し、最も小さい近似値となったコスト曲面を選択する。なお、選択したコスト曲面の識別情報は、フリップフロップ等の記憶装置に記憶される。
第2の算出部605は、複数の小領域のうちの対象小領域に隣接する隣接小領域ごとの動きベクトルから選択された対象小領域の第2動きベクトル候補と候補ベクトルごとのSADコストとに基づいて、第2動きベクトル候補の擬似SADコストを算出する。たとえば、第2の算出部605は、第2動きベクトル候補の座標位置と候補ベクトルの座標位置の距離の逆数を重みとした加重平均により、第2動きベクトル候補の擬似SADコストを算出する。
また、第2の算出部605は、第2動きベクトル候補と選択部604によって選択されたいずれかの面データとに基づいて、第2動きベクトル候補の擬似SADコストを算出してもよい。また、第2の算出部605は、パラメータ決定部603によって決定されたパラメータの値を用いた関数モデルに、第2動きベクトル候補の座標位置を代入することにより、第2動きベクトル候補の擬似SADコストを算出してもよい。算出した擬似SADコストは、フリップフロップ等の記憶装置に記憶される。
動きベクトル決定部606は、第1動きベクトル候補のSADコストと、第2動きベクトル候補の擬似SADコストとに基づいて、第1動きベクトル候補または第2動きベクトル候補のいずれか一方を、対象小領域の動きベクトルに決定する。
たとえば、動きベクトル決定部606は、第1動きベクトル候補のSADコストと第2動きベクトル候補の擬似SADコストとの小さい方に対応する動きベクトル候補を、対象小領域の動きベクトルに決定する。また、動きベクトル決定部606は、第1動きベクトル候補のSADコストと第2動きベクトル候補の擬似SADコストとが同一の値となれば、第2動きベクトル候補を対象小領域の動きベクトルに決定してもよい。
また、動きベクトル決定部606は、第1動きベクトル候補のSADコストに第1動きベクトル候補の符号量となる動きベクトルコストを加算した動き予測コストを算出する。そして、動きベクトル決定部606は、第2動きベクトル候補の擬似SADコストに第2動きベクトル候補の符号量となるマージIDXコストを加算した擬似マージコストを算出する。動きベクトル決定部606は、動き予測コストが擬似マージコストより小さければ第1動きベクトル候補を対象小領域の動きベクトルに決定し、動き予測コストが擬似マージコストより大きければ第2動きベクトル候補を対象小領域の動きベクトルに決定する。決定した動きベクトルは、フリップフロップ等の記憶装置に記憶される。
図7は、コストFFの記憶内容の一例を示す説明図である。コストFF612は、候補ベクトルごとに算出されたSADコストを記憶するフリップフロップである。図7に示すコストFF612は、コストFF_0〜コストFF_23を有する。コストFF612は、MV_Xと、MV_Yと、SADコストという3つのフィールドを有する。MV_XフィールドおよびMV_Yフィールドには、候補ベクトルのX座標とY座標がそれぞれ格納される。SADコストフィールドには、MV_XフィールドおよびMV_Yフィールドに格納された値により示される候補ベクトルのSADコストが格納される。
たとえば、コストFF_0には、(32,24)となる候補ベクトルのSADコストとして、82が格納される。
図8は、コスト曲面テーブルの記憶内容の一例を示す説明図である。コスト曲面テーブル613は、コスト曲面ごとに、SADコストを記憶するテーブルである。図8に示すコスト曲面テーブル613は、コスト曲面[0]テーブル801_0と、コスト曲面[1]テーブル801_1と、…、コスト曲面[CTnum−1]テーブル801_CTnum−1という、CTnum個のテーブルを有する。たとえば、コスト曲面[0]テーブル801_0は、レコード801_0_0と、レコード801_0_1と、…、レコード801_0_255と、を含む。また、コスト曲面[1]テーブル801_1は、レコード801_1_0を含む。さらに、コスト曲面[CTnum−1]テーブル801_CTnum−1は、レコード801_CTnum−1_0を含む。
コスト曲面テーブル613は、アドレス、SADコストという2つのフィールドを含む。アドレスフィールドには、コスト曲面におけるX座標とY座標とから一意に特定できる値が格納される。SADコストフィールドには、該当のアドレスにおけるSADコストが格納される。たとえば、レコード801_0_0は、X座標が−8であり、Y座標が−8であるアドレス0のSADコストが128であることを示す。
図9は、コスト曲面[0]テーブルの記憶内容をグラフとして表示した例を示す説明図である。図9では、コスト曲面[0]テーブル801_0を3Dグラフ901として表示する。なお、コスト曲面[0]は、SADコスト=X^2+Y^2で表される曲面である。また、他のコスト曲面の第1の例として、たとえば、X^2+Y^2に定数を加えた式により表される曲面が曲面テーブル613に登録される。また、他のコスト曲面の第2の例として、たとえば、コスト曲面[0]より勾配が緩やかな曲面や、コスト曲面[0]より勾配が急な曲面がコスト曲面テーブル613に登録される。
次に、図10〜図12を用いて、非マージモードにおける動き探索処理について、説明する。動き探索は、たとえば、六角探索、ダイアモンド探索、全探索等がある。本実施の形態では、六角探索を採用した例について説明する。六角探索に代表される追跡探索を採用した場合は、コストFF612を上書きすることにより、SADコストを保持するコストFF612のレコード数を削減することができる。一方、全探索を採用した場合は、コスト最小位置が途中で上書きされる可能性があるため、コストFF612に全探索点分のレコードを用意することになる。
六角探索として、符号化装置100は、初めに7つの探索点において、SADコストを算出する。そして、中心となる探索点のSADコストが最小値でない場合、符号化装置100は、最小値となった探索点を中心とした新たな六角形の頂点を探索点として、SADコストを算出する。中心となる探索点のSADコストが最小値である場合、符号化装置100は、六角探索を終了し、十字4点探索を実行する。図10では、符号化装置100が六角探索を開始して、六角探索を終了するまでを説明する。
十字4点探索として、符号化装置100は、六角形の中心の上下左右に位置する4つの探索点のSADコストを算出する。そして、符号化装置100は、4つの探索点のうちSADコストが最小値となる探索点を中心としたハーフペル探索を実行する。図11では、符号化装置100が十字4点探索とハーフペル探索とを実行するまでを説明する。
ハーフペル探索後、符号化装置100は、ハーフペル探索の探索点のうちのSADコストが最小値となる探索点を中心としたクォータペル探索を実行する。クォータペル探索後、SADコストが最小となった位置が動き探索結果となる第1動きベクトル候補となる。図12では、符号化装置100がクォータペル探索を実行して第1動きベクトル候補を算出するまでを説明する。
図10は、非マージモードにおける動き探索処理の一例を示す説明図(その1)である。符号化装置100は、図10の(A)で示すように、六角探索として、初めに7つの探索点において、SADコストを算出する。図10の例では、符号化装置100は、中心探索点の(32,24)と、周囲の探索点(32,16)、(32,32)、(40,20)、(40,28)、(24,20)、(24,28)という7つの探索点のSADコストを算出する。算出後、符号化装置100は、探索点への動きベクトル候補のX座標と、Y座標と、算出したSADコストとをコストFF612の1つのレコードに格納する。図10の例では、符号化装置100は、7つの探索点の動きベクトル候補のX座標と、Y座標と、算出したSADコストとを、コストFF_0〜コストFF_6に格納する。
XY平面1001は、7つの探索点の位置関係と、7つの探索点のSADコストを示す。XY平面1001と、以降に説明するXY平面1002と、XY平面1101と、XY平面1102と、XY平面1201とにおいて、丸記号でプロットされた探索点は、フルペル単位による探索点であることを示す。また、四角記号でプロットされた探索点は、ハーフペル単位による探索点であることを示す。さらに、三角記号でプロットされた探索点は、クォータペル単位による探索点であることを示す。また、ハッチがかかった探索点は、該当の探索において追加された探索点であることを示す。
XY平面1001が示すように、7つの探索点のうちのSADコストが最小値となるSADコスト:36の探索点は、(24,20)であり、中心探索点でない。したがって、符号化装置100は、図10の(B)で示すように、(24,20)を中心探索点として、(24,12)、(16,16)、(16,24)という新たに3つの探索点のSADコストを算出する。このように、六角形の場合、前に評価した点が含まれるため、新たにSADを計算するのは3つの探索点分となる。符号化装置100は、3つの探索点の動きベクトル候補のX座標と、Y座標と、算出したSADコストとを、コストFF_7〜コストFF_9に格納する。
XY平面1002は、XY平面1001の状態からさらに、3つの探索点の位置関係と、3つの探索点のSADコストを示す。XY平面1002が示すように、中心探索点と中心探索点の周囲にある6つの探索点のうちのSADコストが最小値となるSADコスト:36の探索点は、(24,20)であり、中心探索点となる。したがって、符号化装置100は、六角探索を終了し、十字4点探索を実行する。
図11は、非マージモードにおける動き探索処理の一例を示す説明図(その2)である。図11の(A)では、六角探索を終了し、十字4点探索を実行する状態を示す。十字4点探索として、符号化装置100は、(24,20)を中心探索点として、(24,16)、(24,24)、(20,20)、(28,20)という新たに4つの探索点のSADコストを算出する。符号化装置100は、4つの探索点の動きベクトル候補のX座標と、Y座標と、算出したSADコストとを、コストFF_10〜コストFF_13に格納する。
XY平面1101は、XY平面1002の状態からさらに、4つの探索点の位置関係と、4つの探索点のSADコストを示す。XY平面1101が示すように、中心探索点と新たな4つの探索点のうちのSADコストが最小値となるSADコスト:28の探索点は、(20,20)である。
続けて、符号化装置100は、図11の(B)で示すように、(20,20)を中心探索点として、ハーフペル探索を実行する。具体的に、符号化装置100は、(20,18)、(20,22)、(18,18)、(18,20)、(18,22)、(22,18)、(22,20)、(22,22)という8つの探索点のSADコストを算出する。符号化装置100は、8つの探索点の動きベクトル候補のX座標と、Y座標と、算出したSADコストとを、コストFF_14〜コストFF_21に格納する。
XY平面1102は、XY平面1101の状態からさらに、ハーフペル精度の8つの探索点の位置関係と、8つの探索点のSADコストを示す。XY平面1102が示すように、中心探索点と新たな8つの探索点のうちのSADコストが最小値となるSADコスト:18の探索点は、(20,22)である。
図12は、非マージモードにおける動き探索処理の一例を示す説明図(その3)である。図12では、ハーフペル探索を終了し、クォータペル探索を実行する状態を示す。符号化装置100は、(20,22)を中心探索点として、クォータペル探索を実行する。具体的に、符号化装置100は、(20,21)、(20,23)、(19,21)、(19,22)、(19,23)、(21,21)、(21,22)、(21,23)という新たに8つの探索点のSADコストを算出する。
符号化装置100は、8つの探索点の動きベクトル候補のX座標と、Y座標と、算出したSADコストとを、コストFF_22、コストFF_23、コストFF_0〜コストFF_5に格納する。このように、書き込むコストFF612のレコードが最大数になった場合、符号化装置100は、コストFF612のレコードを示すインデックスを0に戻し、一番古いコストを書き込んでいるコストFF612のレコードの内容を上書きする。
XY平面1201は、XY平面1102の状態からさらに、クォータペル精度の8つの探索点の位置関係と、8つの探索点のSADコストを示す。XY平面1201が示すように、中心探索点と新たな8つの探索点のうちのSADコストが最小値となるSADコスト:9の探索点は、(21,23)である。したがって、符号化装置100は、(21,23)を、第1動きベクトル候補に特定する。
次に、符号化装置100は、コスト曲面[0]、…、コスト曲面[CTnum−1]のうち、擬似SADコストを算出するために使用するコスト曲面を選択する。図13を用いて、コスト曲面の選択例について説明する。
図13は、コスト曲面の選択例を示す説明図である。図13では、図12によって特定された第1動きベクトル候補(21、23)と、SADコスト=9と、図10〜図12で算出した候補ベクトルごとのSADコストを用いて、コスト曲面を選択する例を説明する。
符号化装置100は、コスト曲面[0]〜コスト曲面[CTnum−1]の各々のコスト曲面について、コストFFに格納されたSADコストとの近似値を算出する。図13では、コスト曲面[0]の近似値を例に説明する。
表1301は、コスト曲面[0]の近似値の算出例を示す。符号化装置100は、コストFF_0について、コストFF_0の(MV_X=19,MV_Y=21)から第1動きベクトル候補の座標位置(21,23)を減じたXオフセット:−2とYオフセット:−2とを算出する。また、符号化装置100は、コストFF_0のSADコスト=18から第1動きベクトル候補のSADコスト:9を減じたコストオフセット:9を算出する。
続けて、符号化装置100は、コストオフセット:9から、コスト曲面[0]テーブル801_0の(X,Y)=(−2,−2)のSADコスト:8の差の絶対値:1を算出する。符号化装置100は、コストFF_1〜コストFF_23に対してもコストFF_0と同様の処理を行い、差の絶対値を合計して、コスト曲面[0]の近似値を算出する。図13の例では、符号化装置100は、コスト曲面[0]の近似値:378を算出する。なお、コスト曲面テーブル613にXオフセットとYオフセットに対応するSADコストが格納されていない場合もある。図13の例では、Xオフセットが3であり、Yオフセットが−11の場合である。このとき、差の絶対値として、符号化装置100は、コスト曲面の近似値が大きくなるような所定値を設定する。図13の例では、所定値=128とする。
符号化装置100は、コスト曲面[1]〜コスト曲面[CTnum−1]に対してもコスト曲面[0]と同様の処理を行い、近似値が最小のコスト曲面を選択する。
図14は、マージモードにおける擬似SADコストの算出例を示す説明図である。図14では、コスト曲面[0]が選択された場合について、マージベクトル[0]〜マージベクトル[4]の擬似SADコストの算出例を示す。図14では、マージベクトル[0]が第2ベクトル候補となる場合の擬似SADコストを図示してある。また、図14で使用するコスト曲面[0]は、SADコスト=X^2+Y^2+9で表される曲面とする。
符号化装置100は、マージベクトル[0]がコスト曲面[0]内に収まっているかを判断する。第1動きベクトル候補が(21,23)であり、マージベクトル[0]が(24、25)であり、位置オフセットが(3,2)となるから、マージベクトル[0]は、コスト曲面[0]のXの範囲−8〜7と、Yの範囲−8〜7に収まっている。マージベクトルがコスト曲面に収まっている場合、符号化装置100は、コスト曲面[0]テーブル801_0から、位置オフセットが(3,2)となるSADコスト:13を取得し、取得した値を擬似SADコストとする。擬似マージコストとしては、符号化装置100は、擬似SADコストに、マージIDXコスト=1を加算して14を得る。
また、符号化装置100は、第2動きベクトル候補としてマージベクトル[1]を選択した場合、マージベクトル[0]と同様に擬似マージコストを算出する。符号化装置100は、マージベクトル[1]がコスト曲面[0]内に収まっているかを判断する。第1動きベクトル候補が(21,23)であり、マージベクトル[1]が(31、22)であり、位置オフセットが(10,−1)となるから、マージベクトル[1]は、コスト曲面[0]のXの範囲−8〜7と、Yの範囲−8〜7に収まっていない。そのため、符号化装置100は、擬似マージコストを、該当のマージモードが選択されないようなMaxコストに設定する。Maxコストは、たとえば65535とする。符号化装置100は、マージベクトル[2]〜マージベクトル[4]についても同様に処理して、擬似マージコストを算出する。
このように、符号化装置100は、マージベクトルごとに擬似マージコストを算出する。次に、図15〜図17を用いて、動き探索と擬似SADコスト算出とが逐次実行される際のタイミングと、動き探索と擬似SADコスト算出とが並列実行される際のタイミングについて説明する。図15〜図17では、ブロック[0]とブロック[1]とに関する処理のタイミングを、1つの処理を角丸四角形で表現して説明する。また、図15〜図17において、ハッチが付与されてない角丸四角形は、ブロック[0]に関する処理である。一方、ハッチが付与された角丸四角形は、ブロック[1]に関する処理である。また、図15〜図17において、小領域を「SB」と表示することがある。また、マージモードを、「MM」と表示することがある。
図15は、動き探索と擬似SADコスト算出とが逐次実行される際のタイミングの一例を示す説明図である。図15では、動き探索と擬似SADコスト算出とを逐次実行する符号化装置が、ブロック[0]とブロック[1]の動き探索と擬似SADコスト算出を実行する。以下、図15において、動き探索と擬似SADコスト算出とを逐次実行する符号化装置を、「逐次符号化装置」と呼称する。図15において、参照画メモリと、SAD算出用回路が、逐次符号化装置内に4つあるものとする。
時刻t0から時刻t1において、逐次符号化装置は、ブロック[0]の小領域[0]動き探索処理〜小領域[3]動き探索処理を実行する。続けて、時刻t1から時刻t2において、逐次符号化装置は、小領域[0]のマージモード[0]のSADコスト算出処理〜マージモード[4]のSADコスト算出処理を実行する。
マージモードでは隣接する小領域の動きベクトルを利用するため、逐次符号化装置は、ある小領域の動きベクトルを決定した後に、次の小領域の動きベクトルを決定する。したがって、逐次符号化装置は、時刻t2にて小領域[0]の動きベクトルを決定した後、時刻t2から時刻t3において、小領域[1]のマージモード[0]のSADコスト算出処理〜マージモード[4]のSADコスト算出処理を実行する。続けて、逐次符号化装置は、時刻t3から時刻t4において、小領域[2]のマージモード[0]のSADコスト算出処理〜マージモード[4]のSADコスト算出処理を実行する。さらに、逐次符号化装置は、時刻t4から時刻t5において、小領域[3]のマージモード[0]のSADコスト算出処理〜マージモード[4]のSADコスト算出処理を実行する。
そして、時刻t5から時刻t6において、逐次符号化装置は、ブロック[1]の小領域[0]動き探索処理〜小領域[3]動き探索処理を実行する。もし、逐次符号化装置が、時刻t2から、ブロック[1]の小領域[0]動き探索処理〜小領域[3]動き探索処理を実行しようとする場合、符号化装置は、参照画メモリと、SAD算出用回路を7つ用意することになり、回路規模が増大してしまう。
次に、図16と図17において、動き探索と擬似SADコスト算出とが並列実行される際のタイミングについて説明する。図16と図17において、参照画メモリと、SAD算出用回路が、符号化装置100内に4つあるものとする。また、図16と図17において、コスト曲面を探索する回路と、擬似SADコストを算出する回路が、符号化装置100内に1つずつあるものとする。また、図16では、コストFF_0〜コストFF_23を1面として、符号化装置100内に1面のコストFF612があるものとする。一方、図17では、符号化装置100内に2面のコストFF612があるものとする。
図16は、非マージモードの動き探索と擬似SADコスト算出とが並列実行される際のタイミングの第1の例を示す説明図である。時刻t0から時刻t1において、符号化装置100は、ブロック[0]の小領域[0]動き探索処理〜小領域[3]動き探索処理を実行する。続けて、時刻t1から時刻t2において、符号化装置100は、小領域[0]のコスト曲面探索処理を実行する。
次に、時刻t2から時刻t3において、符号化装置100は、小領域[1]のコスト曲面探索処理を実行する。コスト曲面探索処理は、コストFF612とコスト曲面テーブル613とを参照するが、参照画メモリを参照せず、SAD算出用回路も使用しない。続けて、時刻t3から時刻t5において、符号化装置100は、小領域[2]のコスト曲面探索処理を実行する。次に、時刻t5から時刻t6において、符号化装置100は、小領域[3]のコスト曲面探索処理を実行する。
また、時刻t2から時刻t4において、符号化装置100は、小領域[0]のマージモード[0]の擬似SADコスト算出処理〜マージモード[4]の擬似SADコスト算出処理を実行する。擬似SADコスト算出処理は、コスト曲面テーブル613を参照するが、参照画メモリを参照せず、SAD算出用回路も使用しない。
図15でも説明したように、マージモードでは隣接する小領域の動きベクトルを利用するため、符号化装置100は、ある小領域の動きベクトルを決定した後に、次の小領域の動きベクトルを決定する。したがって、符号化装置100は、時刻t4にて小領域[0]の動きベクトルを決定した後、時刻t4から時刻t7において、小領域[1]のマージモード[0]の擬似SADコスト算出処理〜マージモード[4]の擬似SADコスト算出処理を実行する。続けて、符号化装置100は、時刻t7から時刻t8において、小領域[2]のマージモード[0]の擬似SADコスト算出処理〜マージモード[4]の擬似SADコスト算出処理を実行する。次に、符号化装置100は、時刻t8から時刻t9において、小領域[3]のマージモード[0]の擬似SADコスト算出処理〜マージモード[4]の擬似SADコスト算出処理を実行する。
ここで、コストFF612は、コスト曲面探索処理では参照されるが、擬似SADコスト算出処理では参照されない。したがって、符号化装置100は、時刻t6にて小領域[3]のコスト曲面探索処理の終了後、時刻t6から時刻t9において、ブロック[1]の小領域[0]動き探索処理〜小領域[3]動き探索処理を実行する。
図16では、時刻t6から時刻t9まで、符号化装置100は、動き探索処理と、擬似SADコスト算出処理とを並列に実行する。したがって、符号化装置100は、参照画メモリと、SAD算出用回路とを増大せずに、マージモードのコスト評価を高速に行うことが可能となり、リアルタイム符号化実現の簡易化を図る。
図17は、非マージモードの動き探索と擬似SADコスト算出とが並列実行される際のタイミングの第2の例を示す説明図である。時刻t0から時刻t1において、符号化装置100は、ブロック[0]の小領域[0]動き探索処理〜小領域[3]動き探索処理を実行する。続けて、時刻t1から時刻t2において、符号化装置100は、小領域[0]のコスト曲面探索処理を実行する。
次に、時刻t2から時刻t3において、符号化装置100は、小領域[1]のコスト曲面探索処理を実行する。続けて、時刻t3から時刻t5において、符号化装置100は、小領域[2]のコスト曲面探索処理を実行する。次に、時刻t5から時刻t7において、符号化装置100は、小領域[3]のコスト曲面探索処理を実行する。
また、時刻t2から時刻t4において、符号化装置100は、小領域[0]のマージモード[0]の擬似SADコスト算出処理〜マージモード[4]の擬似SADコスト算出処理を実行する。続けて、時刻t4から時刻t8において、符号化装置100は、小領域[1]のマージモード[0]の擬似SADコスト算出処理〜マージモード[4]の擬似SADコスト算出処理を実行する。次に、符号化装置100は、時刻t8から時刻t10において、小領域[2]のマージモード[0]の擬似SADコスト算出処理〜マージモード[4]の擬似SADコスト算出処理を実行する。次に、符号化装置100は、時刻t10から時刻t11において、小領域[3]のマージモード[0]の擬似SADコスト算出処理〜マージモード[4]の擬似SADコスト算出処理を実行する。
ここで、図17における符号化装置100はコストFF612を2面有するため、符号化装置100は、時刻t1から時刻t6において、ブロック[1]の小領域[0]動き探索処理〜小領域[3]動き探索処理を実行する。そして、時刻t7にてブロック[0]の小領域[3]のコスト曲面探索処理の終了後、符号化装置100は、時刻t7から時刻t9において、ブロック[1]の小領域[0]のコスト曲面探索処理を実行する。
図17では、時刻t1から時刻t6まで、符号化装置100は、動き探索処理と、コスト曲面探索処理と、擬似SADコスト算出処理とを並列に実行する。したがって、符号化装置100は、参照画メモリと、SAD算出用回路とを増大せず、マージモードのコスト評価を高速に行うことが可能となり、リアルタイム符号化実現の簡易化を図る。また、図16と比較して、図17に示す符号化装置100は、並列実行可能な処理が、動き探索処理と、コスト曲面探索処理と、擬似SADコスト算出処理という3つの処理に増えており、より高速にコスト評価を行うことができる。
次に、図18〜図27を用いて、符号化装置100が行うフローチャートについて説明する。図20と図25とにおいて、横二重線の記号で囲まれた箇所は、処理を並列に実行することを示す。
図18は、1ピクチャの動き探索処理手順の一例を示すフローチャートである。1ピクチャの動き探索処理は、ピクチャに含まれる各ブロックの動きベクトルを決定する処理である。
符号化装置100は、変数BLKに0を設定する(ステップS1801)。次に、符号化装置100は、ブロック[BLK]の動き探索処理を実行する(ステップS1802)。ブロックの動き探索処理は、図19にて後述する。続けて、符号化装置100は、変数BLKをインクリメントする(ステップS1803)。次に、符号化装置100は、変数BLKがBLKnum以上か否かを判断する(ステップS1804)。変数BLKがBLKnum未満である場合(ステップS1804:No)、符号化装置100は、ステップS1802の処理に移行する。
変数BLKがBLKnum以上である場合(ステップS1804:Yes)、符号化装置100は、1ピクチャの動き探索処理を終了する。1ピクチャの動き探索処理を実行することにより、符号化装置100は、ピクチャに含まれる各ブロックの動きベクトルを決定することができる。
また、ステップS1802の処理について、符号化装置100は、コストFF612の面数とコストFF612の使用状況と、参照画メモリと複数のSAD算出用回路との使用状況とに基づいて、並列に実行可能であれば、並列に実行してもよい。
たとえば、コストFF612が1面あるとする。このとき、あるブロックの動き探索処理内の、全ての小領域にて、図25で示すコスト曲面の近似値算出処理が全てのコスト曲面に対して終了した場合、符号化装置100は、あるブロックの次のブロックの動き探索処理を開始してよい。また、コストFF612が2面あり、参照画メモリと複数のSAD算出用回路とが4個あるとする。このとき、あるブロックの動き探索処理内の、図20で示す小領域の動き探索処理が終了して、4個の参照画メモリとSAD算出用回路とのうち使用されなくなるものがあれば、符号化装置100は、あるブロックの次のブロックの動き探索処理を開始してよい。
図19は、ブロックの動き探索処理手順の一例を示すフローチャートである。ブロックの動き探索処理は、ブロックの動きベクトルを探索する処理である。符号化装置100は、ブロック[BLK]内の、複数小領域の並列探索処理を実行する(ステップS1901)。複数小領域の並列探索処理の詳細は、図20にて後述する。次に、符号化装置100は、小領域のインデックスとして使用する変数SBを0に設定する(ステップS1902)。続けて、符号化装置100は、動き予測モード[SB]を非マージモードに決定する(ステップS1903)。次に、符号化装置100は、“動き予測コスト[SB]=動きベクトルコスト+SADコスト”を算出する(ステップS1904)。
ステップS1904において、動きベクトルコストは、図20にて示す複数小領域の並列探索処理の内部で呼ばれる、小領域[SB]の動き探索処理にて求められた第1動きベクトル候補の符号量である。また、SADコストは、小領域[SB]の動き探索処理にて求められた第1動きベクトル候補のSADコストである。
続けて、符号化装置100は、マージモードのインデックスとして使用する変数MMを0に設定する(ステップS1905)。次に、符号化装置100は、小領域[SB]の、擬似マージコスト[MM]算出処理を実行する(ステップS1906)。擬似マージコスト算出処理の詳細は、図27にて後述する。続けて、符号化装置100は、動き予測コスト[SB]が擬似マージコスト[MM]より大きいか否かを判断する(ステップS1907)。動き予測コスト[SB]が擬似マージコスト[MM]より大きい場合(ステップS1907:Yes)、符号化装置100は、動き予測モード[SB]をマージモード[MM]に決定する(ステップS1908)。続けて、符号化装置100は、動き予測コスト[SB]に擬似マージコスト[MM]の値を代入する(ステップS1909)。
ステップS1909の処理終了後、または、動き予測コスト[SB]が擬似マージコスト[MM]以下である場合(ステップS1907:No)、符号化装置100は、変数MMをインクリメントする(ステップS1910)。続けて、符号化装置100は、変数MMがMMnum+1以上であるか否かを判断する(ステップS1911)。変数MMがMMnum+1未満である場合(ステップS1911:No)、符号化装置100は、ステップS1906の処理に移行する。変数MMがMMnum+1以上である場合(ステップS1911:Yes)、符号化装置100は、変数SBをインクリメントする(ステップS1912)。
続けて、符号化装置100は、変数SBがSBnum以上か否かを判断する(ステップS1913)。変数SBがSBnum未満である場合(ステップS1913:No)、符号化装置100は、ステップS1903の処理に移行する。変数SBがSBnum以上である場合(ステップS1913:Yes)、符号化装置100は、ブロックの動き探索処理を終了する。ブロックの動き探索処理を終了した後、符号化装置100は、量子化と、エントロピー符号化とを行う。ブロックの動き探索処理を実行することにより、符号化装置100は、ブロックの最適な動きベクトルを選択することができる。
図20は、複数小領域の並列探索処理手順の一例を示すフローチャートである。複数小領域並列探索処理は、複数の小領域の動き探索とコスト曲面探索とを並列に実行する処理である。符号化装置100は、小領域[0]の動き探索処理を実行する(ステップS2001_0)。小領域の動き探索処理の詳細は、図21と図22にて後述する。続けて、符号化装置100は、小領域[0]に対するコスト曲面探索並列処理を実行する(ステップS2002_0)。小領域に対するコスト曲面探索並列処理は、図25にて後述する。
また、符号化装置100は、ステップS2001_0とステップS2002_0との一連の処理と並列で、小領域[1]の動き探索処理を実行する(ステップS2001_1)。続けて、符号化装置100は、小領域[1]に対するコスト曲面探索並列処理を実行する(ステップS2002_1)。このように、小領域ごとにコスト曲面探索並列処理を実行して、符号化装置100は、小領域[SBnum−1]の動き探索処理を実行する(ステップS2001_SBnum−1)。続けて、符号化装置100は、小領域[SBnum−1]に対するコスト曲面探索並列処理を実行する(ステップS2002_SBnum−1)。
ステップS2002_0、ステップS2002_1、…、ステップS2002_SBnum−1の処理終了後、符号化装置100は、複数小領域並列探索処理を終了する。複数小領域並列探索処理を実行することにより、符号化装置100は、複数の小領域の動きベクトルと最適なコスト曲面とを並列に探索することができる。
図21は、小領域の動き探索処理手順の一例を示すフローチャート(その1)である。小領域の動き探索処理は、対象の小領域の第1動きベクトル候補を探索する処理である。符号化装置100は、六角探索として、中心探索点と周囲の6点に対して、初期7点のSADコストを算出する(ステップS2101)。次に、符号化装置100は、算出した初期7点のSADコストの第1の格納処理を実行する(ステップS2102)。SADコストの第1の格納処理の詳細は、図23にて後述する。
続けて、符号化装置100は、中心探索点のSADコストが最小のSADコストか否かを判断する(ステップS2103)。中心探索点のSADコストが最小のSADコストでない場合(ステップS2103:No)、符号化装置100は、六角探索として、追加3点のSADコストを算出する(ステップS2104)。続けて、符号化装置100は、算出した追加3点のSADコストの第2の格納処理を実行する(ステップS2105)。SADコストの第2の格納処理の詳細は、図24にて後述する。
次に、符号化装置100は、中心探索点のSADコストが最小のSADコストか否かを判断する(ステップS2106)。中心探索点のSADコストが最小のSADコストでない場合(ステップS2106:No)、符号化装置100は、ステップS2104の処理に移行する。
中心探索点のSADコストが最小のSADコストである場合(ステップS2103:Yes、ステップS2106:Yes)、符号化装置100は、図22に示すステップS2201の処理に移行する。
図22は、小領域の動き探索処理手順の一例を示すフローチャート(その2)である。ステップS2103:Yesとなった場合、または、ステップS2106:Yesとなった場合、符号化装置100は、十字4点探索として、中心探索点の周囲4点のSADコストを算出する(ステップS2201)。次に、符号化装置100は、算出した周囲4点のSADコストの第2の格納処理を実行する(ステップS2202)。続けて、符号化装置100は、周囲4点と中心探索点とのうち、SADコストが最小となる探索点を選択する(ステップS2203)。
次に、符号化装置100は、選択した探索点を中心探索点として、ハーフペル周囲8点のSADコストを算出する(ステップS2204)。続けて、符号化装置100は、算出した周囲8点のSADコストの第2の格納処理を実行する(ステップS2205)。次に、符号化装置100は、周囲8点と中心探索点とのうち、SADコストが最小となる探索点を選択する(ステップS2206)。続けて、符号化装置100は、選択した探索点を中心探索点として、クォータペル周囲8点のSADコストを算出する(ステップS2207)。次に、符号化装置100は、算出した周囲8点のSADコストの第2の格納処理を実行する(ステップS2208)。
続けて、符号化装置100は、周囲8点と中心探索点とのうちSADコストが最小となる探索点を、第1動きベクトル候補として、第1動きベクトル候補のSADコストを特定する(ステップS2209)。ステップS2209の処理終了後、符号化装置100は、小領域の動き探索処理を終了する。小領域の動き探索処理を実行することにより、符号化装置100は、小領域の第1動きベクトル候補を特定することができる。
図23は、SADコストの第1の格納処理手順の一例を示すフローチャートである。SADコストの第1の格納処理は、SADコストをコストFF612に格納する処理である。コストFF612に格納する探索点は、1からSPnumまであるものとする。SADコストの第1の格納処理がステップS2102の処理から呼ばれた場合、CPnum=7となる。
符号化装置100は、コストFF612のインデックスとして使用する変数CFを0に設定する(ステップS2301)。次に、符号化装置100は、1つ目の探索点SPを選択する(ステップS2302)。続けて、符号化装置100は、探索点SPに対する候補ベクトルとSADコストとを、コストFF_[CF]に格納する(ステップS2303)。
次に、符号化装置100は、変数CFをインクリメントする(ステップS2304)。続けて、符号化装置100は、変数CFがCFnum以上か否かを判断する(ステップS2305)。変数CFがCFnum以上である場合(ステップS2305:Yes)、符号化装置100は、変数CFを0に設定する(ステップS2306)。
ステップS2306の処理終了後、または、変数CFがCFnum未満である場合(ステップS2305:No)、符号化装置100は、探索点SPnumを選択したか否かを判断する(ステップS2307)。探索点SPnumを選択していない場合(ステップS2307:No)、符号化装置100は、次の探索点SPを選択する(ステップS2308)。そして、符号化装置100は、ステップS2303の処理に移行する。
探索点SPnumを選択した場合(ステップS2307:Yes)、符号化装置100は、SADコストの第1の格納処理を終了する。SADコストの第1の格納処理を実行することにより、符号化装置100は、SADコストをコストFF612に格納するとともに、コストFF612に保持する情報を上書きすることにより、コストFF612の回路を削減することができる。
図24は、SADコストの第2の格納処理手順の一例を示すフローチャートである。SADコストの第2の格納処理は、SADコストをコストFF612に格納する処理である。コストFF612に格納する探索点は、1からSPnumまであるものとする。たとえば、SADコストの第2の格納処理がステップS2105の処理から呼ばれた場合、CPnum=3となる。
また、図24で示すフローチャートのステップS2401〜ステップS2407の処理は、図23で示すステップS2302〜ステップS2308の処理と等しいため、説明を省略する。SADコストの第2の格納処理を実行することにより、符号化装置100は、SADコストをコストFF612に格納するとともに、コストFF612に保持する情報を上書きすることにより、コストFF612の回路を削減することができる。
図25は、小領域に対するコスト曲面探索並列処理手順の一例を示すフローチャートである。コスト曲面探索並列処理は、複数のコスト曲面から、対象の小領域に最適なコスト曲面を探索する処理である。符号化装置100は、コスト曲面[0]の近似値算出処理を実行する(ステップS2501_0)。コスト曲面の近似値算出処理の詳細は、図26にて後述する。
また、符号化装置100は、ステップS2501_0の処理と並列で、コスト曲面[1]の近似値算出処理を実行する(ステップS2501_1)。このように、コスト曲面ごとに近似値算出処理を実行して、符号化装置100は、コスト曲面[CTnum−1]の近似値算出処理を実行する(ステップS2501_CTnum−1)。
ステップS2501_0、ステップS2501_1、…、ステップS2501_CTnum−1の処理終了後、符号化装置100は、コスト曲面[0]の近似値,…,コスト曲面[CTnum−1]の近似値のうち最小値となるコスト曲面CTを特定する(ステップS2502)。続けて、符号化装置100は、特定したコスト曲面CTを、使用するコスト曲面として選択する(ステップS2503)。ステップS2503の処理終了後、符号化装置100は、小領域に対するコスト曲面探索並列処理を終了する。小領域のコスト曲面探索並列処理を実行することにより、符号化装置100は、対象の小領域に最適なコスト曲面を選択することができる。
図26は、コスト曲面の近似値算出処理手順の一例を示すフローチャートである。コスト曲面の近似値算出処理は、対象のコスト曲面が、コストFF612に格納されたSADコストとの近さを示す近似値を算出する処理である。
符号化装置100は、近似値を0に設定する(ステップS2601)。次に、符号化装置100は、コストFF612のインデックスとして使用する変数CFを0に設定する(ステップS2602)。次に、符号化装置100は、コストFF_[CF]の(MV_X,MV_Y)から、第1動きベクトル候補の座標位置を減じて、位置オフセット(x,y)を算出する(ステップS2603)。続けて、符号化装置100は、コストFF_[CF]のSADコストから、第1動きベクトル候補のSADコストを減じて、コストオフセットを算出する(ステップS2604)。
次に、符号化装置100は、“近似値=近似値+|コストオフセット−コスト曲面[CT]の[x][y]のSADコスト|”を算出する(ステップS2605)。ここで、|x|は、xの絶対値である。続けて、符号化装置100は、変数CFをインクリメントする(ステップS2606)。次に、符号化装置100は、変数CFがCFnum以上か否かを判断する(ステップS2607)。変数CFがCFnum未満である場合(ステップS2607:No)、符号化装置100は、ステップS2603の処理に移行する。
変数CFがCFnum以上である場合(ステップS2607:Yes)、符号化装置100は、近似値を出力する(ステップS2608)。ステップS2608の処理終了後、符号化装置100は、コスト曲面の近似値算出処理を終了する。コスト曲面の近似値算出処理を実行することにより、符号化装置100は、最適なコスト面を選択するために用いる近似値を求めることができる。
図27は、擬似マージコスト算出処理手順の一例を示すフローチャートである。擬似マージコスト算出処理は、対象のマージベクトルのコストを算出する処理である。符号化装置100は、Xオフセットを、第2動きベクトル候補となるマージベクトル[MM]のX座標−第1動きベクトル候補のX座標に設定する(ステップS2701)。また、符号化装置100は、Yオフセットを、マージベクトル[MM]のY座標−第1動きベクトル候補のY座標に設定する(ステップS2702)。
次に、符号化装置100は、マージベクトル[MM]が選択したコスト曲面[CT]の範囲内か否かを判断する(ステップS2703)。マージベクトル[MM]が選択したコスト曲面[CT]の範囲内である場合(ステップS2703:Yes)、符号化装置100は、“擬似SADコスト=コスト曲面[CT]テーブル[Xオフセット][Yオフセット]”を算出する(ステップS2704)。次に、符号化装置100は、“擬似マージコスト=擬似SADコスト+ベクトルコスト”を算出する(ステップS2705)。
マージベクトル[MM]が選択したコスト曲面[CT]の範囲内でない場合(ステップS2703:No)、符号化装置100は、擬似マージコストをMaxコストにする(ステップS2706)。ステップS2705またはステップS2706の処理終了後、符号化装置100は、擬似マージコスト算出処理を終了する。擬似マージコスト算出処理を実行することにより、符号化装置100は、参照画メモリと、SAD算出用回路とを用いずに、マージモードのコストを算出することができる。
図28は、擬似SADコストを算出する回路の一例を示す説明図である。図28では、コスト曲面の数CTnumが8である場合について説明する。減算器2801は、第1動きベクトル候補の周囲の探索点のSADコストから第1動きベクトル候補のSADコストを減じた値を出力する。また、減算器2802は、第1動きベクトル候補の周囲の探索点の座標位置から第1動きベクトル候補の座標位置を減じた値を出力する。
X軸オフセット算出器2803とY軸オフセット算出器2804とは、それぞれ、減算器2802の出力結果から、X軸方向のオフセットとY軸方向のオフセットとを出力する。
減算器2811_0〜減算器2811_7は、コスト曲面テーブル613のそれぞれから、X軸方向のオフセットとY軸方向のオフセットとを用いて特定されたコストと、減算器2801の処理結果との差の絶対値を出力する。たとえば、減算器2811_0は、コスト曲面[0]テーブル801_0から、X軸方向のオフセットとY軸方向のオフセットとを用いて特定されたコストと、減算器2801の処理結果との差の絶対値を出力する。
加算器2812_0〜加算器2812_7は、それぞれ、減算器2811_0〜減算器2811_7の処理結果と、FF2813_0〜FF2813_7の値とを加算して、FF2813_0〜FF2813_7に格納する。たとえば、加算器2812_0は、減算器2811_0の処理結果と、FF2813_0の値を加算して、FF2813_0に格納する。
比較器2814は、FF2813_0〜FF2813_7の値を比較して、最小の値を格納したコスト曲面の識別番号を出力する。比較器2814により、符号化装置100は、コスト曲面[0]〜コスト曲面[7]のうち、最適なコスト曲面を選択したことになる。
減算器2821は、複数のマージベクトルから選ばれた第2動きベクトル候補の座標位置から、第1動きベクトル候補の座標位置を減じた値を出力する。X軸オフセット算出器2822とY軸オフセット算出器2823とは、それぞれ、減算器2821の出力結果から、X軸方向のオフセットとY軸方向のオフセットとを出力する。
選択器2824は、コスト曲面[0]テーブル801_0〜コスト曲面[7]テーブル801_7から、X軸方向のオフセットとY軸方向のオフセットとを用いて特定された各SADコストのうち、比較器2814の出力結果となるコスト曲面のSADコストを選択する。
加算器2825は、選択器2824の出力結果と第1動きベクトル候補のSADコストとを加算した値を出力する。出力される値が擬似SADコストとなる。
以上説明したように、符号化装置100によれば、動き探索となる非マージモードのSADコストの結果を用いて、マージモードのSADコストを予測した擬似SADコストを算出する。これにより、符号化装置100は、マージモードの実行にSAD算出用回路と参照画メモリとを使用しなくてよくなり、回路規模の増大化を抑制するとともに、符号化処理の高速化を図ることができる。また、擬似SADコストは、動き探索途中のSADコストの結果が格納されたコストFF612の記憶内容から予測された値である。コストFF612は、SADコストが最小となった探索点や、SADコストが最小となった探索点の周囲の輝度勾配やエッジ情報が含まれており、マージモードのSADコストとほぼ変わらない精度を維持することができる。
また、符号化装置100によれば、コスト曲面テーブル613に記憶された複数のコスト曲面の各々とコストFF612の記憶内容とに基づいて、コスト曲面テーブル613から選択した最適なコスト曲面から、擬似SADコストを算出してもよい。これにより、符号化装置100は、最適なコスト曲面を選択することにより、擬似SADコストの精度低下を抑制することができる。また、擬似SADコストは、コスト曲面テーブル613を一回参照するだけで算出することができるため、SADコストの算出と比較して処理サイクルを削減することができる。
また、符号化装置100によれば、動きベクトル候補となるベクトルの座標位置とパラメータを用いてベクトルの評価値を表す関数モデルに、コストFF612の記憶内容を代入してパラメータの値を決定する。そして、符号化装置100は、パラメータの値を用いた関数モデルに、第2動きベクトル候補の座標位置を代入して擬似SADコストを算出してもよい。これにより、符号化装置100は、コスト曲面テーブル613を用意せずに、関数モデルにより擬似SADコストの精度低下を抑制することができる。
また、符号化装置100によれば、候補ベクトルごとのSADコストのうち最小値となる候補ベクトルから所定距離内にある候補ベクトルごとのSADコストを算出してコストFF612の記憶内容を上書きしてもよい。これにより、符号化装置100は、コストFFの回路を削減することができる。
なお、本実施の形態で説明した符号化方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本符号化プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本符号化プログラムは、インターネット等のネットワークを介して配布してもよい。
また、本実施の形態で説明した符号化装置100は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述した符号化装置100の第1の算出部601〜動きベクトル決定部606と記憶部611とをHDL記述によって機能定義し、HDL記述を論理合成してASICやPLDに与えることにより、符号化装置100を製造することができる。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)原画像が分割された複数のブロックのうちの符号化対象となる対象ブロックと、前記対象ブロックの動きベクトル候補となる各候補ベクトルが示す参照画像上の参照ブロックとに基づいて、前記候補ベクトルごとの評価値を算出して記憶部に格納する第1の算出部と、
前記第1の算出部によって前記記憶部に格納された前記候補ベクトルごとの評価値に基づいて、前記対象ブロックの第1動きベクトル候補の評価値を特定する特定部と、
前記複数のブロックのうちの前記対象ブロックに隣接する隣接ブロックごとの動きベクトルから選択された前記対象ブロックの第2動きベクトル候補と前記候補ベクトルごとの評価値とに基づいて、前記第2動きベクトル候補の評価値を算出する第2の算出部と、
前記特定部によって特定された前記第1動きベクトル候補の評価値と、前記第2の算出部によって算出された前記第2動きベクトル候補の評価値とに基づいて、前記第1動きベクトル候補または前記第2動きベクトル候補のいずれか一方を、前記対象ブロックの動きベクトルに決定する動きベクトル決定部と、
を有することを特徴とする符号化装置。
(付記2)前記記憶部は、
前記対象ブロックの動きベクトル候補となるベクトルが示す前記参照画像上の座標位置を表す第1の軸および第2の軸と、前記ベクトルの評価値を表す第3の軸とを有する空間座標系において、前記対象ブロックの動きベクトル候補となるベクトルごとの評価値を配置した際に形成される面を表す面データを複数記憶しており、
前記記憶部に記憶された複数の面データの各々と前記候補ベクトルごとの評価値とに基づいて、前記複数の面データからいずれかの面データを選択する選択部を有し、
前記第2の算出部は、
前記第2動きベクトル候補と前記選択部によって選択された前記いずれかの面データとに基づいて、前記第2動きベクトル候補の評価値を算出することを特徴とする付記1に記載の符号化装置。
(付記3)前記対象ブロックの動きベクトル候補となるベクトルが示す前記参照画像上の座標位置とパラメータとを用いて前記ベクトルの評価値を表す関数モデルに、前記候補ベクトルごとの座標位置と前記候補ベクトルごとの評価値とを代入することにより、前記パラメータの値を決定するパラメータ決定部を有し、
前記第2の算出部は、
前記パラメータ決定部によって決定された前記パラメータの値を用いた前記関数モデルに、前記第2動きベクトル候補の座標位置を代入することにより、前記第2動きベクトル候補の評価値を算出することを特徴とする付記1または2に記載の符号化装置。
(付記4)前記第1の算出部は、
算出した前記候補ベクトルごとの評価値のうち最小値となる候補ベクトルから所定距離内にある候補ベクトルごとの評価値を算出して前記記憶部の記憶内容を上書きすることを特徴とする付記1〜3のいずれか一つに記載の符号化装置。
(付記5)原画像が分割された複数のブロックのうちの符号化対象となる対象ブロックと、前記対象ブロックの動きベクトル候補となる各候補ベクトルが示す参照画像上の参照ブロックとに基づいて、前記候補ベクトルごとの評価値を算出して記憶部に格納する第1の算出部と、
前記第1の算出部によって前記記憶部に格納された前記候補ベクトルごとの評価値に基づいて、前記対象ブロックの第1動きベクトル候補の評価値を特定する特定部と、
前記複数のブロックのうちの前記対象ブロックに隣接する隣接ブロックごとの動きベクトルから選択された前記対象ブロックの第2動きベクトル候補と前記候補ベクトルごとの評価値とに基づいて、前記第2動きベクトル候補の評価値を算出する第2の算出部と、
前記特定部によって特定された前記第1動きベクトル候補の評価値と、前記第2の算出部によって算出された前記第2動きベクトル候補の評価値とに基づいて、前記第1動きベクトル候補または前記第2動きベクトル候補のいずれか一方を、前記対象ブロックの動きベクトルに決定する動きベクトル決定部と、
を有するコンピュータを含むことを特徴とするコンピュータシステム。
(付記6)コンピュータが、
原画像が分割された複数のブロックのうちの符号化対象となる対象ブロックと、前記対象ブロックの動きベクトル候補となる各候補ベクトルが示す参照画像上の参照ブロックとに基づいて、前記候補ベクトルごとの評価値を算出して記憶部に格納し、
前記記憶部に格納した前記候補ベクトルごとの評価値に基づいて、前記対象ブロックの第1動きベクトル候補の評価値を特定し、
前記複数のブロックのうちの前記対象ブロックに隣接する隣接ブロックごとの動きベクトルから選択された前記対象ブロックの第2動きベクトル候補と前記候補ベクトルごとの評価値とに基づいて、前記第2動きベクトル候補の評価値を算出し、
特定した前記第1動きベクトル候補の評価値と、算出した前記第2動きベクトル候補の評価値とに基づいて、前記第1動きベクトル候補または前記第2動きベクトル候補のいずれか一方を、前記対象ブロックの動きベクトルに決定する、
処理を実行することを特徴とする符号化方法。
(付記7)コンピュータに、
原画像が分割された複数のブロックのうちの符号化対象となる対象ブロックと、前記対象ブロックの動きベクトル候補となる各候補ベクトルが示す参照画像上の参照ブロックとに基づいて、前記候補ベクトルごとの評価値を算出して記憶部に格納し、
前記記憶部に格納した前記候補ベクトルごとの評価値に基づいて、前記対象ブロックの第1動きベクトル候補の評価値を特定し、
前記複数のブロックのうちの前記対象ブロックに隣接する隣接ブロックごとの動きベクトルから選択された前記対象ブロックの第2動きベクトル候補と前記候補ベクトルごとの評価値とに基づいて、前記第2動きベクトル候補の評価値を算出し、
特定した前記第1動きベクトル候補の評価値と、算出した前記第2動きベクトル候補の評価値とに基づいて、前記第1動きベクトル候補または前記第2動きベクトル候補のいずれか一方を、前記対象ブロックの動きベクトルに決定する、
処理を実行させることを特徴とする符号化プログラム。
(付記8)原画像が分割された複数のブロックのうちの符号化対象となる対象ブロックと、前記対象ブロックの動きベクトル候補となる各候補ベクトルが示す参照画像上の参照ブロックとに基づいて、前記候補ベクトルごとの評価値を算出して記憶部に格納し、
前記記憶部に格納した前記候補ベクトルごとの評価値に基づいて、前記対象ブロックの第1動きベクトル候補の評価値を特定し、
前記複数のブロックのうちの前記対象ブロックに隣接する隣接ブロックごとの動きベクトルから選択された前記対象ブロックの第2動きベクトル候補と前記候補ベクトルごとの評価値とに基づいて、前記第2動きベクトル候補の評価値を算出し、
特定した前記第1動きベクトル候補の評価値と、算出した前記第2動きベクトル候補の評価値とに基づいて、前記第1動きベクトル候補または前記第2動きベクトル候補のいずれか一方を、前記対象ブロックの動きベクトルに決定する、
処理をコンピュータに実行させる符号化プログラムを記録したことを特徴とする記録媒体。