(57)【要約】【課題】  トータルの演算量を減らしつつ最適なブロックサイズの選択を可能とする。【解決手段】  一次探索部２５は探索アルゴリズムの第１の上限反復数以下で第一ブロックの動きベクトルを演算する。極小解収束判定部２６は動きベクトルが極小解に収束したものであるか否かを判定してその判定結果が肯定の場合に第一ブロックを動き補償予測ブロックとして選択する。二次探索部２８は極小解収束判定部２６の判定結果が否定の場合に探索アルゴリズムの第２の上限反復数以下で第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する。等価判定部２９は第二ブロックの各々の動きベクトルが等価であるか否かを判定し、等価であれば第一ブロックを動き補償予測ブロックとして選択する一方、等価でなければ第二ブロックを動き補償予測ブロックとして選択する。【選択図】  図９
2006180426.tif 000002
【特許請求の範囲】
【請求項１】
探索アルゴリズムの第１の上限反復数以下で第一ブロックの動きベクトルを演算する第一動きベクトル演算手段と、
前記第一動きベクトル演算手段で演算された動きベクトルが極小解に収束したものであるか否かを判定する第一判定手段と、
前記第一判定手段の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第一選択手段と、
前記第一判定手段の判定結果が否定の場合に探索アルゴリズムの第２の上限反復数以下で前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する第二動きベクトル演算手段と、
前記第二動きベクトル演算手段で演算された第二ブロックの各々の動きベクトルが完全等価又は近似等価であるか否かを判定する第二判定手段と、
前記第二判定手段の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第二選択手段と、
前記第二判定手段の判定結果が否定の場合に前記第二ブロックを動き補償予測ブロックとして選択する第三選択手段と
を備えたことを特徴とする動き補償予測符号化装置。
【請求項２】
前記第１の上限反復数は、前記探索アルゴリズムで通常用いられる最大反復数よりも小さな値であることを特徴とする請求項１記載の動き補償予測符号化装置。
【請求項３】
探索アルゴリズムの所定の上限反復数以下で第一ブロックの動きベクトルを演算する第一動きベクトル演算手段と、
前記第一動きベクトル演算手段で演算された動きベクトルを探索アルゴリズムの初期値にセットして引き続き前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する第二動きベクトル演算手段と、
前記第二動きベクトル演算手段で演算された第二ブロックの各々の動きベクトルが完全等価又は近似等価であるか否かを判定する第二判定手段と、
前記第二判定手段の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第二選択手段と、
前記第二判定手段の判定結果が否定の場合に前記第二ブロックを動き補償予測ブロックとして選択する第三選択手段と
を備えたことを特徴とする動き補償予測符号化装置。
【請求項４】
前記所定の上限反復数は、前記探索アルゴリズムで通常用いられる最大反復数よりも小さな値であることを特徴とする請求項３記載の動き補償予測符号化装置。
【請求項５】
前記探索アルゴリズムは、最近傍探索法、Ｎステップ探索法、対数探索法又は階層探索法であることを特徴とする請求項１又は請求項３いずれかに記載の動き補償予測符号化装置。
【請求項６】
前記第二動きベクトル演算手段は、前記第一動きベクトル演算手段の反復がＮ回で終わったとき、Ｎ＋１回から反復を開始するとともに、その反復の初期値として、前記第一動きベクトル演算手段のＮ反復で得られた中間値を使用することを特徴とする請求項１又は請求項３いずれかに記載の動き補償予測符号化装置。
【請求項７】
探索アルゴリズムの第１の上限反復数以下で第一ブロックの動きベクトルを演算する第一動きベクトル演算工程と、
前記第一動きベクトル演算工程で演算された動きベクトルが極小解に収束したものであるか否かを判定する第一判定工程と、
前記第一判定工程の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第一選択工程と、
前記第一判定工程の判定結果が否定の場合に探索アルゴリズムの第２の上限反復数以下で前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する第二動きベクトル演算工程と、
前記第二動きベクトル演算工程で演算された第二ブロックの各々の動きベクトルが完全等価又は近似等価であるか否かを判定する第二判定工程と、
前記第二判定工程の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第二選択工程と、
前記第二判定工程の判定結果が否定の場合に前記第二ブロックを動き補償予測ブロックとして選択する第三選択工程と
を含むことを特徴とする動き補償予測符号化方法。
【請求項８】
前記第１の上限反復数は、前記探索アルゴリズムで通常用いられる最大反復数よりも小さな値であることを特徴とする請求項７記載の動き補償予測符号化方法。
【請求項９】
探索アルゴリズムの所定の上限反復数以下で第一ブロックの動きベクトルを演算する第一動きベクトル演算工程と、
前記第一動きベクトル演算工程で演算された動きベクトルを探索アルゴリズムの初期値にセットして引き続き前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する第二動きベクトル演算工程と、
前記第二動きベクトル演算工程で演算された第二ブロックの各々の動きベクトルが完全等価又は近似等価であるか否かを判定する第二判定工程と、
前記第二判定工程の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第二選択工程と、
前記第二判定工程の判定結果が否定の場合に前記第二ブロックを動き補償予測ブロックとして選択する第三選択工程と
を含むことを特徴とする動き補償予測符号化方法。
【請求項１０】
前記所定の上限反復数は、前記探索アルゴリズムで通常用いられる最大反復数よりも小さな値であることを特徴とする請求項９記載の動き補償予測符号化方法。
【請求項１１】
前記探索アルゴリズムは、最近傍探索法、Ｎステップ探索法、対数探索法又は階層探索法であることを特徴とする請求項７又は請求項９いずれかに記載の動き補償予測符号化方法。
【請求項１２】
前記第二動きベクトル演算工程は、前記第一動きベクトル演算工程の反復がＮ回で終わったとき、Ｎ＋１回から反復を開始するとともに、その反復の初期値として、前記第一動きベクトル演算工程のＮ反復で得られた中間値を使用することを特徴とする請求項７又は請求項９いずれかに記載の動き補償予測符号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動き補償予測符号化装置及び動き補償予測符号化方法に関し、詳しくは、動き補償予測ブロックのサイズを選択して使用できる動き補償予測符号化装置及び動き補償予測符号化方法に関する。
【背景技術】
【０００２】
我々が目にする動画は、時間軸上に連続する多数のフレーム画像（静止画）の残像に過ぎない。ギクシャク感のないスムーズな動きにするには、残像効果が失われる前に次のフレーム画像を表示しなければならず、それには、たとえば、毎秒３０フレームないしはそれ以上のフレーム画像を必要とするが、こうした多数のフレーム画像からなる動画は、その情報量が膨大なものとなり、蓄積媒体の容量や伝送経路の帯域を圧迫する。
【０００３】
そこで、動画の情報量を削減（圧縮）するための技術として、「動き補償予測符号化」が用いられる。
【０００４】
図１９は、動き補償予測符号化の簡略化した概念図である。左列に符号化前（情報量削減前）の画像（以下、元画像）Ｐ１、Ｐ２、Ｐ３、・・・・、Ｐ７が並んでいる。並び順は時間軸に沿って上から下である。動き補償予測符号化では、少なくとも１枚の元画像Ｐ１（イントラ画像ともいう）はそのまま（無圧縮又は静止画の符号化技術で圧縮し）伝送路（又は蓄積媒体）を介して復号側に送出しなければならないが、残りの元画像Ｐ２、Ｐ３、・・・・、Ｐ７については、時間軸を過去に遡った一つ前の元画像（参照画像）との間の「動き情報」を取り出し、その動き情報からなる被符号化画像Ｐ２′、Ｐ３′、・・・・、Ｐ７′を伝送路を介して復号側に送出する。被符号化画像Ｐ２′、Ｐ３′、・・・・、Ｐ７′の情報量は、元画像Ｐ２、Ｐ３、・・・・、Ｐ７のそれよりも少ない。このため、伝送路上（または蓄積媒体）における情報量は、すべての元画像を送出する場合に比べて遙かに削減される。
【０００５】
復号側では、イントラ画像（元画像Ｐ１）はそのまま復元画像Ｐ１″として用いるが、それ以外の復元画像Ｐ２′、Ｐ３′、・・・・、Ｐ７′については、時間軸を過去に遡った一つ前の復元画像と「動き情報」とにより画像を再生するという手順を繰り返すことにより、元画像Ｐ１、Ｐ２、Ｐ３、・・・・、Ｐ７と同じ並びの復元画像Ｐ１″、Ｐ２″、Ｐ３″、・・・・、Ｐ７″を得る。なお、図の説明では、時間軸を過去に遡った一つ“前”の元画像を「参照画像」としているが、これは伝送系メディアの場合である。蓄積系では時間軸上の未来の画像（一つ“後”の元画像）を「参照画像」とすることもある。
【０００６】
図２０は、動き補償予測符号化における被符号化画像生成の概念図である（たとえば、特許文献１参照。）。この図において、動き補償予測符号化では、動画像を構成する元画像を１６×１６画素などの小さな動き補償予測ブロック（以下、単に「ブロック」という）に分割し、このブロック単位に、時間的に前（蓄積系では後の場合もある）に位置する参照画像から被符号化画像を作成する。
【０００７】
たとえば、被符号化画像１がＢ１〜Ｂ２５（Ｂはブロックの略）までの２５個のブロックに分割されていると仮定した場合、まず、Ｂ１と同じ大きさのブロック（Ｂ１′）を参照画像２から取り出し、そのＢ１′とＢ１との画素毎の差分（残差信号）を取る。そして、参照画像２の上のＢ１′の位置を１画素単位（又は数画素単位若しくは数分の１画素単位）ずつ少しずつずらしながら、逐次に残差信号を収集していき、残差信号が最小となったときのＢ１′（図ではＢ１″）とＢ１との相対的なズレの大きさ及びズレの方向をベクトル量３（動きベクトル）で検出する。これを、他のブロック（Ｂ２〜Ｂ２５）についても同様に繰り返すことにより、最終的に、すべてのブロック（Ｂ１〜Ｂ２５）の動きベクトルと残差信号とを得ることができる。復号側には、それらの動きベクトルと残差信号を各ブロック（Ｂ１〜Ｂ２５）に格納した被符号化画像４を送出する。
【０００８】
復号側では、送られてきた被符号化画像４のＢ１〜Ｂ２５の各動きベクトルを用いて、対象となる参照画像に相当する復元画像のブロックを選択し、そのブロックとＢ１〜Ｂ２５の各残差信号を画素毎に加算して、Ｂ１〜Ｂ２５を再現し、元画像と同じ復元画像を再構成する。
【０００９】
ここで、ブロックサイズを小さくすると、よりきめ細かな動き予測を行うことができることから、初期の動画像符号化方式（ＭＰＥＧ−２：Moving Picture Experts Group ）では「１６×１６」の一種類しかなかったブロックサイズが、その上位バージョン（ＭＰＥＧ−４）では「１６×１６」と「８×８」の二種類となり、さらに、最新バージョン（ＭＰＥＧ−４／ＡＶＣ又はＨ．２６４／ＡＶＣ）では「１６×１６」、「１６×８」、「８×１６」、「８×８」、「８×４」、「４×８」、「４×４」の７種類になった。
【００１０】
これにより、小さなブロックを選択して動き予測の精度を高めることができるようになった。反面、小さなブロックは、符号化処理量の増加を招き、伝送情報量や処理のオーバヘッド及び電力消費を大きくすることから、とりわけ動きの遅い動画に用いて不適切であり、動きの量に対応した適切な大きさのブロックを選択できる技術が求められている。
【００１１】
図２１は、動きの遅い画像と速い画像にそれぞれ大きなブロックと小さなブロックを適用した概念図である。動きの遅い画像とは、たとえば、静止した被写体をカメラでゆっくりパンしながら撮影した画像などである。また、動きの速い画像とは、画面の物体が不規則且つ多方向に高速移動する画像などである。図示の例では、動きの遅い画像として、記念撮影時にカメラを水平方向左から右へとゆっくりパンさせた画像（ａ）を示し、また、動きの速い画像として、ボウリングのピンが激しくはじけ飛ぶ様子を撮影した画像（ｂ）を示している。
【００１２】
動きの遅い画像（ａ）に対して小さなブロックを適用した場合、画質の点では何らの不都合もないが、不必要な演算処理が生じるという欠点がある。この欠点は、動き補償予測符号化装置の電力消費増大を招くため、特にバッテリ駆動のカメラ等の場合に大きな障害となる。したがって、動きの遅い画像（ａ）に対しては、望ましくは大きなブロックを適用すべきである。図中の丸印（○）は適切なブロック選択を示し、罰印（×）は不適切なブロック選択を示している。
【００１３】
一方、動きの速い画像（ｂ）に対して大きなブロックを適用した場合、それぞれのブロック内で多方向の物体移動が生じる可能性がある。そのようなとき、それぞれのブロックで予測された動きベクトルは、そのブロック内の物体の動きを正しく表していない。したがって、動きの速い画像（ｂ）に対しては、画質の点で小さなブロックを適用すべきである。
【００１４】
動きの量に対応した適切な大きさのブロックを選択できる従来技術としては、たとえば、１６×１６動きベクトル検出部と、８×８動きベクトル検出部と、それらの二つの動き検出部で得られた動き補償予測結果のうちのどちらか一方を選択するベクトル選択部とを備えたものが知られている（たとえば、特許文献２参照）。
【００１５】
これによれば、１６×１６ブロックと、そのブロックを４分割した８×８ブロックのそれぞれで得られた動き補償予測結果のうち適切な方を選択できる。このため、動きが遅い動画の場合には大きなサイズの「１６×１６ブロック」を選択して伝送情報量の削減と電力消費の抑制及び処理のオーバヘッドの軽減を図り、一方、動きが速い動画の場合には小さなサイズの「８×８ブロック」を選択してよりきめ細かな動き予測を図ることができる。
【００１６】
【特許文献１】特表２００３−５３３１４２号公報
【特許文献２】特開２０００−１０２０１６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１７】
しかしながら、上記の従来技術にあっては、「１６×１６ブロック」と、そのブロックを４分割した「８×８ブロック」のそれぞれで動き補償予測を行っているため、たとえば、「全探索法」で予測を行った場合、トータルの演算量は、１６×１６ブロック１個分の演算量のほぼ２倍にも達する。これは、ブロックの面積に比例して演算量が増えるため、８×８ブロック４個分の演算量は、１６×１６ブロック１個分の演算量にほぼ匹敵するからである。
【００１８】
なお、このこと（演算量が２倍に増える）は「全探索法」よりも演算量が少ない他の探索法（最近傍探索法など）を用いた場合でも同じである。たとえば、最近傍探索法を行ったときの１６×１６ブロック１個分の演算量をＡとするとき（このＡは全探索法よりも少ないが）、同様に最近傍探索を行った８×８ブロック４個分の演算量もほぼＡと同等になるため、トータルの演算量が、やはり２倍（≒２Ａ）になるからである。
【００１９】
そこで、本発明の目的は、トータルの演算量を減らしつつ、最適なブロックサイズの選択を可能とする動き補償予測符号化装置及び動き補償予測符号化方法を提供することにある。
【課題を解決するための手段】
【００２０】
請求項１記載の発明は、探索アルゴリズムの第１の上限反復数以下で第一ブロックの動きベクトルを演算する第一動きベクトル演算手段と、前記第一動きベクトル演算手段で演算された動きベクトルが極小解に収束したものであるか否かを判定する第一判定手段と、前記第一判定手段の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第一選択手段と、前記第一判定手段の判定結果が否定の場合に探索アルゴリズムの第２の上限反復数以下で前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する第二動きベクトル演算手段と、前記第二動きベクトル演算手段で演算された第二ブロックの各々の動きベクトルが完全等価又は近似等価であるか否かを判定する第二判定手段と、前記第二判定手段の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第二選択手段と、前記第二判定手段の判定結果が否定の場合に前記第二ブロックを動き補償予測ブロックとして選択する第三選択手段とを備えたことを特徴とする動き補償予測符号化装置である。
この発明では、まず、第一ブロックの動きベクトルが求められ、その動きベクトルが極小解に収束したものであるか否かが判定される。ここで、極小解に収束した動きベクトルとは、探索アルゴリズムの最大反復数（ここでは第１の上限反復数）未満で求められたもののことをいう。探索アルゴリズムの最大反復数（第１の上限反復数）未満で求められた動きベクトルは、第一ブロックの動きを正しく表しているため、この場合、第一ブロックを選択しても差し支えない。
一方、上記のようにして求められた動きベクトルが、極小解に収束したものでない場合、つまり、探索アルゴリズムの最大反復数（ここでは第１の上限反復数）に達してから求められたものである場合には、その動きベクトルは不確かである（第一ブロックの動きを正しく表していない）から、この場合は、さらに、前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する。ここで、第二ブロックは、前記第一ブロックの分割ブロックに相当するから、第一ブロックは大きなサイズのブロック（マクロブロック）と言い換えることができ、第二ブロックは、その第一ブロックを分割したブロック、すなわち、小さなブロック（サブブロック）といいかえることができる。したがって、上記のようにして求められた第二ブロックの各々の動きベクトルは、サブブロックの各々の動きベクトルである。
さて、サブブロックの各々の動きベクトルが等価（完全等価又は近似等価）である場合、それぞれのサブブロックの画像は同量且つ同方向に移動しており、要するに、動きが揃っているから、この場合、第一ブロック（マクロブロック）を選択しても差し支えない。これに対して、サブブロックの各々の動きベクトルが等価（完全等価又は近似等価）でない場合、それぞれのサブブロックの画像はバラバラに動いているから、この場合、画質の点で第二ブロック（サブブロック）を選択すべきである。
本発明によれば、以上の作用が得られるので、画像の動きに対応した適切な大きさのブロック（第一ブロックと第二ブロック）を選択することができる。加えて、第一動きベクトル演算手段の計算量は、第１の上限反復数に依存するので、この第１の上限反復数を小さな値に設定することにより、少なくすることができる。これにより、この第一動きベクトル演算手段の後に第二動きベクトル演算手段を実行したとしても、トータルの演算量は、これら二つの演算手段の探索アルゴリズムに通常の最大反復数を適用した場合に比べて大幅に少なくなる。
したがって、トータルの演算量を減らしつつ、最適なブロックサイズの選択を可能とする動き補償予測符号化装置を提供できる。
さらに、大きなサイズの第一ブロックの探索から始めて小さなサイズの第二ブロックの探索へと進むので、誤った極小解に陥る不具合を抑制できる。これは、大きなサイズから探索を始めることにより、近視眼的な探索を回避して局所的な最小点の誤認を防止できるからである。
請求項２記載の発明は、前記第１の上限反復数は、前記探索アルゴリズムで通常用いられる最大反復数よりも小さな値であることを特徴とする請求項１記載の動き補償予測符号化装置である。
請求項３記載の発明は、探索アルゴリズムの所定の上限反復数以下で第一ブロックの動きベクトルを演算する第一動きベクトル演算手段と、前記第一動きベクトル演算手段で演算された動きベクトルを探索アルゴリズムの初期値にセットして引き続き前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する第二動きベクトル演算手段と、前記第二動きベクトル演算手段で演算された第二ブロックの各々の動きベクトルが完全等価又は近似等価であるか否かを判定する第二判定手段と、前記第二判定手段の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第二選択手段と、前記第二判定手段の判定結果が否定の場合に前記第二ブロックを動き補償予測ブロックとして選択する第三選択手段とを備えたことを特徴とする動き補償予測符号化装置である。
この発明では、まず、第一ブロックの動きベクトルが求められ、次いで、その動きベクトルを初期値にセットして、前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルが求められる。そして、第二ブロックの各々の動きベクトルの等価（完全等価又は近似等価）が判定され、等価である場合には、第一ブロックが選択される一方、等価（完全等価又は近似等価）でない場合には、第二ブロックが選択される。
本発明によれば、以上の作用が得られるので、画像の動きに対応した適切な大きさのブロック（第一ブロックと第二ブロック）を選択することができる。加えて、第二動きベクトル演算手段は、第一動きベクトル演算手段の処理を引き継ぐ形で動作するため、これら二つの演算手段のトータルの演算量は（これら二つの演算手段を単独で動かした場合に比べて）ほぼ半減される。
したがって、トータルの演算量を減らしつつ、最適なブロックサイズの選択を可能とする動き補償予測符号化装置を提供できる。
さらに、大きなサイズの第一ブロックの探索から始めて小さなサイズの第二ブロックの探索へと進むので、誤った極小解に陥る不具合を抑制できる。これは、大きなサイズから探索を始めることにより、近視眼的な探索を回避して局所的な最小点の誤認を防止できるからである。
請求項４記載の発明は、前記所定の上限反復数は、前記探索アルゴリズムで通常用いられる最大反復数よりも小さな値であることを特徴とする請求項３記載の動き補償予測符号化装置である。
請求項５記載の発明は、前記探索アルゴリズムは、最近傍探索法、Ｎステップ探索法、対数探索法又は階層探索法であることを特徴とする請求項１又は請求項３いずれかに記載の動き補償予測符号化装置である。
請求項６記載の発明は、前記第二動きベクトル演算手段は、前記第一動きベクトル演算手段の反復がＮ回で終わったとき、Ｎ＋１回から反復を開始するとともに、その反復の初期値として、前記第一動きベクトル演算手段のＮ反復で得られた中間値を使用することを特徴とする請求項１又は請求項３いずれかに記載の動き補償予測符号化装置である。
請求項７記載の発明は、探索アルゴリズムの第１の上限反復数以下で第一ブロックの動きベクトルを演算する第一動きベクトル演算工程と、前記第一動きベクトル演算工程で演算された動きベクトルが極小解に収束したものであるか否かを判定する第一判定工程と、前記第一判定工程の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第一選択工程と、前記第一判定工程の判定結果が否定の場合に探索アルゴリズムの第２の上限反復数以下で前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する第二動きベクトル演算工程と、前記第二動きベクトル演算工程で演算された第二ブロックの各々の動きベクトルが完全等価又は近似等価であるか否かを判定する第二判定工程と、前記第二判定工程の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第二選択工程と、前記第二判定工程の判定結果が否定の場合に前記第二ブロックを動き補償予測ブロックとして選択する第三選択工程とを含むことを特徴とする動き補償予測符号化方法である。
請求項８記載の発明は、前記第１の上限反復数は、前記探索アルゴリズムで通常用いられる最大反復数よりも小さな値であることを特徴とする請求項７記載の動き補償予測符号化方法である。
請求項９記載の発明は、探索アルゴリズムの所定の上限反復数以下で第一ブロックの動きベクトルを演算する第一動きベクトル演算工程と、前記第一動きベクトル演算工程で演算された動きベクトルを探索アルゴリズムの初期値にセットして引き続き前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する第二動きベクトル演算工程と、前記第二動きベクトル演算工程で演算された第二ブロックの各々の動きベクトルが完全等価又は近似等価であるか否かを判定する第二判定工程と、前記第二判定工程の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第二選択工程と、前記第二判定工程の判定結果が否定の場合に前記第二ブロックを動き補償予測ブロックとして選択する第三選択工程とを含むことを特徴とする動き補償予測符号化方法である。
請求項１０記載の発明は、前記所定の上限反復数は、前記探索アルゴリズムで通常用いられる最大反復数よりも小さな値であることを特徴とする請求項９記載の動き補償予測符号化方法である。
請求項１１記載の発明は、前記探索アルゴリズムは、最近傍探索法、Ｎステップ探索法、対数探索法又は階層探索法であることを特徴とする請求項７又は請求項９いずれかに記載の動き補償予測符号化方法である。
請求項１２記載の発明は、前記第二動きベクトル演算工程は、前記第一動きベクトル演算工程の反復がＮ回で終わったとき、Ｎ＋１回から反復を開始するとともに、その反復の初期値として、前記第一動きベクトル演算工程のＮ反復で得られた中間値を使用することを特徴とする請求項７又は請求項９いずれかに記載の動き補償予測符号化方法である。
【発明の効果】
【００２１】
本発明では、画像の動きに対応した適切な大きさのブロック（第一ブロックと第二ブロック）を選択することができ、加えて、第一動きベクトル演算手段と第二動きベクトル演算手段のトータルの演算量を大幅に削減できる。さらに、大きなサイズの第一ブロックの探索から始めて小さなサイズの第二ブロックの探索へと進むので、誤った極小解に陥る不具合も抑制できる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の実施形態を、図面を参照しながら説明する。なお、以下の説明における様々な細部の特定ないし実例および数値や文字列その他の記号の例示は、本発明の思想を明瞭にするための、あくまでも参考であって、それらのすべてまたは一部によって本発明の思想が限定されないことは明らかである。また、周知の手法、周知の手順、周知のアーキテクチャおよび周知の回路構成等（以下「周知事項」）についてはその細部にわたる説明を避けるが、これも説明を簡潔にするためであって、これら周知事項のすべてまたは一部を意図的に排除するものではない。かかる周知事項は本発明の出願時点で当業者の知り得るところであるので、以下の説明に当然含まれている。
【００２３】
＜動き補償予測ブロック＞
まず、動き補償予測ブロックについて説明する。
図１は、動き補償予測ブロックの種類を示す図である。（ａ）〜（ｈ）は、それぞれＭＰＥＧ−４／ＡＶＣ（又はＨ．２６４／ＡＶＣ）で使用が認められている７種類の動き補償予測ブロックである。詳しくは、（ａ）は「１６×１６」のサイズの動き補償予測ブロック、（ｂ）は「１６×１６」の動き補償予測ブロックを上下に２分割したそれぞれ「１６×８」のサイズの動き補償予測ブロック、（ｃ）は同じく「１６×１６」の動き補償予測ブロックを左右に２分割したそれぞれ「８×１６」のサイズの動き補償予測ブロック、（ｄ）は同じく「１６×１６」の動き補償予測ブロックを上下左右に４分割したそれぞれ「８×８」のサイズの動き補償予測ブロックである。
【００２４】
また、（ｅ）は「８×８」の動き補償予測ブロック、（ｆ）は「８×８」の動き補償予測ブロックを上下に２分割したそれぞれ「８×４」のサイズの動き補償予測ブロック、（ｇ）は同じく「８×８」の動き補償予測ブロックを左右に２分割したそれぞれ「４×８」のサイズの動き補償予測ブロック、（ｈ）は同じく「８×８」の動き補償予測ブロックを上下左右に４分割したそれぞれ「４×４」のサイズの動き補償予測ブロックである。
【００２５】
動き補償予測ブロックの選択は、（ａ）〜（ｄ）のグループの中で行われる。すなわち、最大サイズの「１６×１６」、最大サイズを上下に２分割した「１６×８」、最大サイズを左右に２分割した「８×１６」、及び、最大サイズを上下左右に４分割した「８×８」の中から選ばれる。また、選択された動き補償予測ブロックが（ｄ）（「１６×１６」を上下左右に４分割した「８×８」）である場合は、それぞれの「８×８」ブロック毎に、さらに（ｅ）〜（ｈ）のグループの中から選択できるように階層化されている。
【００２６】
なお、一般的に（ａ）の動き補償予測ブロック（「１６×１６」）のことを「マクロブロック」といい、また、（ｂ）〜（ｈ）の分割された動き補償予測ブロックのことを「サブブロック」という。
【００２７】
このように、動き補償予測ブロックの種類は多く、ブロック選択の組み合わせも多岐にわたるため、本実施形態では説明の簡単化のために、「１６×１６」の動き補償予測ブロック（ａ）と、それを四分割した大きさの「８×８」の動き補償予測ブロック（ｄ）を選択するものとする。
【００２８】
図２は、本実施形態の便宜的な選択対象となる二つの動き補償予測ブロックを示す図である。この図においては、「１６×１６」の動き補償予測ブロックと、それを四分割した大きさの「８×８」の動き補償予測ブロックが例示されている。以下、上記の一般呼称に倣って、「１６×１６」の動き補償予測ブロックを「マクロブロック（略号：ＭＢ）」（発明の要旨に記載の第一ブロックに相当）といい、それを四分割した大きさの「８×８」の動き補償予測ブロックを「サブブロック（略号：ＳＢ）」（発明の要旨に記載の第二ブロックに相当）ということにする。但し、これは、両者のブロックを区別するための、あくまでも説明上の便宜であって、これらの呼び名（マクロ・・・・、サブ・・・・）から発明の外縁を把握してはならない。また、４個のＳＢの各々に左上から順に添え字０、１，２，３を付けて識別することにする。すなわち、左上のＳＢをＳＢ0 、右上のＳＢをＳＢ1 、左下のＳＢをＳＢ2 、右下のＳＢをＳＢ3 として識別することにする。
【００２９】
＜動き補償予測符号化装置の構成＞
次に、動き補償予測符号化装置の構成を説明する。
図３は、動き補償予測符号化装置のブロック図である。動き補償予測符号化装置１０は、入力されたビットストリーム中の現フレーム（元画像）と予測画像との差分をとる減算部１１と、その差分を何らかの２次元関数の有限級数変換（たとえば、２次元離散コサイン変換：ＤＣＴ）式として表示することにより圧縮する変換部１２と、変換式の係数を量子化する量子化部１３と、この量子化データと後述の動き情報及び分割モードとを符号化（たとえば、エントロピー符号化）して、その符号化ビットストリームを伝送媒体や蓄積媒体に出力する符号化部１４と、量子化データを逆量子化する逆量子化部１５と、逆量子化されたデータを逆変換して元の差分に戻す逆変換部１６と、この差分と予測画像とを加算して復元画像を再生する加算部１７と、復元画像を保持する復元画像メモリ１８と、現在の元画像と復元画像メモリ１８に保持されている一つ前の復元画像（参照画像）とに基づいて動き情報（動きベクトル等）やブロックの分割モードを推定する動き推定部１９と、この動き情報に基づいて予測画像を生成する動き補償部２０とを備える。
【００３０】
＜最近傍探索について＞
次に、本実施形態の特徴的事項を備える動き推定部１９の構成と動作を説明するが、その前に、この動き推定部１９で使用する探索アルゴリズム（最近傍探索法）について具体的に説明する。
【００３１】
まず、探索アルゴリズムで用いられる用語等について説明する。
図４は、元画像のブロック位置（座標）とブロックサイズを説明する図である。この図において、元画像２１の升目２２のそれぞれはブロック（ＭＢ又はＳＢ）であり、それらのブロック位置は、たとえば、その升目２２の左上隅の画素座標（ｘ，ｙ）で表されるものとする。また、ブロックサイズは横方向（行方向）をｓｘ、縦方向（列方向）をｓｙとして表されるものとする。
【００３２】
図５は、参照画像に与える探索中心のオフセットを示す図である。この図において、参照画像２３の上の探索中心２４のオフセットは（ｏｘ，ｏｙ）で表されるものとする。
【００３３】
図６は、最近傍探索処理（以下、ＮＮＳ関数と呼ぶことにする。）のフローチャートを示す図である。このＮＮＳ関数では、まず、与えられた引数（ｘ：ブロックＸ座標，ｙ：ブロックＹ座標，ｏｘ：オフセットＸ座標，ｏｙ：オフセットＹ座標，ｓｘ：ブロックサイズＸ，ｓｙ：ブロックサイズＹ，ｎ：最大反復数）を読み込む（ステップＳ１０）。
【００３４】
ここで、上記引数のうちの最大反復数ｎは、ＮＮＳ関数の繰り返しループの上限値である。ＮＮＳ関数は、この最大反復数ｎを上限にして動きベクトル予測を行う。なお、最大反復数ｎの値を増やしていくと誤った極小解に捕まる確率が徐々に下がっていくが、ある値を超えると計算量が増える割にはその確率が思うように下がらず一定の確率に漸近していくようになる。そのため、通常はこのような漸近状態に陥る値よりも少し前の値にｎを設定する。このときの値はシステム毎に異なることが多い。計算量が増えても構わなければ、大きめの値を設定するし、計算量を増やしたくなければ、小さめの値を設定するからである。本明細書では、説明の便宜上、上記の一般的な考え方に倣って設定された値（誤った極小解に捕まる確率が低下して漸近状態に陥ったときの値又はそれよりも少し前の値）のことを「通常の値」又は「通常の最大反復数」ということとし、且つ、その通常の値を“１４”（単なる一例に過ぎない）とすることにする。
【００３５】
次いで、反復のためのループ変数ｉに初期値０をセット（ステップＳ１１）した後、探索中心の残差評価値ＳＡＤａと、その近傍４点の残差評価値ＳＡＤｂ〜ＳＡＤｅを演算する残差評価値演算処理を実行する（ステップＳ１２）。
【００３６】
図７は、残差評価値演算処理のサブルーチンフローを示す図である。
図８は、残差評価値演算の概念図である。
残差評価値演算処理のサブルーチンフローでは、たとえば、ＳＡＤ関数を用いて、計５点の残差評価値ＳＡＤａ〜ＳＡＤｅを順次に演算する（ステップＳ２０〜ステップＳ２４）。ＳＡＤ関数とは、差分絶対値和（sum of absolute difference）を計算するための関数である。
【００３７】
探索中心はオフセット（ｘ0 ，ｙ0 ）で与えられる。また、その近傍４点の位置は、オフセット（ｘ0 ，ｙ0 ）のｘ座標とｙ座標を調節することによって与えられる。たとえば、オフセット（ｘ0 ，ｙ0 ）のｘ座標を＋１すると、探索中心（ｘ0 ，ｙ0 ）の１画素右（ｘ0 ＋１、ｙ0 ）となり、同様に、オフセット（ｘ0 ，ｙ0 ）のｘ座標を−１すると、探索中心（ｘ0 ，ｙ0 ）の１画素左（ｘ0 −１、ｙ0 ）となる。さらに、オフセット（ｘ0 ，ｙ0 ）のｙ座標を＋１すると、探索中心（ｘ0 ，ｙ0 ）の１画素上（ｘ0 、ｙ0 ＋１）となり、オフセット（ｘ0 ，ｙ0 ）のｙ座標を−１すると、探索中心（ｘ0 ，ｙ0 ）の１画素下（ｘ0 、ｙ0 −１）となる。
【００３８】
したがって、この残差評価値演算処理のサブルーチンフローによれば、ＳＡＤ関数を用いて、探索中心（ｘ0 ，ｙ0 ）の残差評価値ＳＡＤａ、探索中心（ｘ0 ，ｙ0 ）の１画素右（ｘ0 ＋１、ｙ0 ）の残差評価値ＳＡＤｂ、探索中心（ｘ0 ，ｙ0 ）の１画素左（ｘ0 −１、ｙ0 ）の残差評価値ＳＡＤｃ、探索中心（ｘ0 ，ｙ0 ）の１画素上（ｘ0 、ｙ0 ＋１）の残差評価値ＳＡＤｄ、及び、探索中心（ｘ0 ，ｙ0 ）の１画素下（ｘ0 、ｙ0 −１）の残差評価値ＳＡＤｅを演算することができる。
【００３９】
このようにして、探索中心の残差評価値ＳＡＤａと、その近傍４点の残差評価値ＳＡＤａ〜ＳＡＤｅを求めると、再び、図６のフローに戻り、ＳＡＤａ〜ＳＡＤｅのうちの最小値を求める（ステップＳ１３）。これには、たとえば、Ｍｉｎ関数を使用できる。Ｍｉｎ関数は、引数内の複数の数値のなかで最小のものを戻り値として返すので、Ｍｉｎ（ＳＡＤａ、ＳＡＤｂ、ＳＡＤｃ、ＳＡＤｅ）とすればよい。
【００４０】
次に、最小値（Ｍｉｎ関数の戻り値）が探索中心で得られたもの（ＳＡＤａ）であるか否かを判定する（ステップＳ１４）。そして、最小値が探索中心で得られたものであれば、その探索中心の座標を戻り値にして（ステップＳ１５）、フローを終了（反復を終了）する一方、最小値が探索中心で得られたものでなければ、最小値が得られた探索点の座標を新たな探索中心（ｘ0 ，ｙ0 ）にセットする（ステップＳ１６）。
【００４１】
つまり、最小値＝ＳＡＤｂであれば探索中心の１画素右（ｘ0 ＋１，ｙ0 ）を新たな探索中心（ｘ0 ，ｙ0 ）にセットし、最小値＝ＳＡＤｃであれば探索中心の１画素左（ｘ0 −１，ｙ0 ）を新たな探索中心（ｘ0 ，ｙ0 ）にセットし、最小値＝ＳＡＤｄであれば探索中心の１画素上（ｘ0 ，ｙ0 ＋１）を新たな探索中心（ｘ0 ，ｙ0 ）にセットし、又は、最小値＝ＳＡＤｅであれば探索中心の１画素下（ｘ0 ，ｙ0 −１）を新たな探索中心（ｘ0 ，ｙ0 ）にセットする。
【００４２】
そして、ループ変数ｉを＋１して（ステップＳ１７）、そのｉが最大反復数ｎを超えているか否かを判定し（ステップＳ１８）、超えていなければ、ステップＳ１２に戻って以上の処理を繰り返し（反復し）、超えていれば、そのときの探索中心の座標を戻り値にして（ステップＳ１４）、フローを終了（反復を終了）する。
【００４３】
このように、最近傍探索処理（ＮＮＳ関数）は、与えられた引数の最大反復数ｎを上限にして、反復（ループ）を繰り返しながら逐次に探索を行い、探索中心の残差評価値ＳＡＤａが最小値になったとき（極小解に収束したとき）、または、ループ変数ｉの値が最大反復数ｎを超えたときのいずれかの場合に、そのときの探索中心の座標を戻り値（動きベクトル）として返すことができる。
【００４４】
＜動き推定部の構成と動作＞
図９は、動き推定部１９の概念的なブロック図である。動き推定部１９は、一次探索部２５（第一動きベクトル演算手段）、極小解収束判定部２６（第一判定手段）、第一動きベクトル出力部２７（第一選択手段）、二次探索部２８（第二動きベクトル演算手段）、等価判定部２９（第二判定手段）、第二動きベクトル出力部３０（第二選択手段）、及び、第三動きベクトル出力部３１（第三選択手段）を備える。
【００４５】
一次探索部２５は、マクロブロックＭＢ （図２参照）の動きベクトルｆｖを上記のＮＮＳ関数を用いて演算する。このＮＮＳ関数に引数として与える最大反復数ｎは、通常の値（“１４”）よりも小さな値（たとえば、“２”）である。この小さな値“２”は、発明の要旨に記載の「第１の上限反復数」に相当する。一次探索部２５からは、ＭＢの動きベクトルｆｖと共に、その動きベクトルｆｖが得られたときのＮＮＳ関数の中間値（ＳＡＤａ〜ＳＡＤｅ：図６のステップＳ１２参照）も取り出されている。なお、ＮＮＳ関数に引数として与える最大反復数ｎは、上記例示の“２”に限定されない。ＮＮＳ関数で最も精度が得られる通常の最大反復数（“１４”）よりも小さな値であればよい。たとえば、“１”でもよく、あるいは、“３”や“４”などであってもよい。最大反復数（第１の上限反復数）を増やすほど、動きベクトルの演算精度を高められるが、計算量が増えるため、演算精度と計算量のどちらを重視するかで決めればよい。
【００４６】
極小解収束判定部２６は、一次探索部２５から取り出されたＳＡＤａ〜ＳＡＤｅに基づいて極小解の「収束」を判定する。すなわち、ＳＡＤａ〜ＳＡＤｅの中でＳＡＤａが最小であれば、極小解の「収束」を判定し、そうでなければ、「非収束」を判定する。
【００４７】
第一動きベクトル出力部２７は、極小解収束判定部２６で極小解の「収束」が判定されたときに、一次探索部２５から取り出された動きベクトルｆｖをそのＭＢの動きベクトルｍｖとして出力するとともに、大きな分割モード（１６×１６分割モード）ｍＭＢを出力する。
【００４８】
二次探索部２８は、極小解収束判定部２６で極小解の収束が判定されなかったとき（非収束が判定されたとき）に、一次探索部２５から取り出された動きベクトルｆｖを初期値にして、マクロブロックＭＢを４分割したサブブロックＳＢ0 〜ＳＢ3 （図２参照）の各々の動きベクトルｍｖ0 〜ｍｖ3 を上記のＮＮＳ関数を用いて演算する。
【００４９】
このときにＮＮＳ関数に引数として与える最大反復数ｎは、一次探索部２８で用いた最大反復数、すなわち第１の上限反復数（“２”）よりも大きな値（たとえば、“１３”）である。この値“１３”は、発明の要旨に記載の「第２の上限反復数」に相当する。なお、この上限反復数は、通常の最大反復数（“１４”）としてもよい。
【００５０】
等価判定部２９は、二次探索部２８で求められた４個の動きベクトルｍｖ0 〜ｍｖ3 の等価を判定する。つまり、ｍｖ0 ＝ｍｖ1 ＝ｍｖ2 ＝ｍｖ3 であるか否かを判定する。なお、ここでは完全等価を判定するが、所定の範囲に収まっているか否かを判定する近似等価であってもよい。
【００５１】
第二動きベクトル出力部３０は、等価判定部２９で等価が判定されたときに、そのうちの一つの動きベクトル（等価だからどれでも構わない。たとえば、ｍｖ0 ）を、それらのサブブロックＳＢ0 〜ＳＢ3 に対応するマクロブロックＭＢの動きベクトルｍｖとして出力するとともに、大きな分割モード（１６×１６分割モード）ｍＭＢを出力する。
【００５２】
第三動きベクトル出力部３１は、等価判定部２９で等価が判定されなかったときに、それら４個の動きベクトルｍｖ0 、ｍｖ1 、ｍｖ2 、ｍｖ3 と、小さな分割モード（８×８分割モード）ｍＳＢを出力する。
【００５３】
図１０及び図１１は、動き推定部１９の動作を説明するための概念図である。まず、図１０に示すように、最大反復数ｎを小さくして（第１の上限反復数“２”にして）マクロブロック（ＭＢ）の動きベクトル（ｆｖ）を求めたときには、次の二つのケースが起こり得る。
【００５４】
第一のケースは、「最大反復数（第１の上限反復数“２”）に達する前」に動きベクトルｆｖが得られたケースである。この第一のケースの場合、得られた動きベクトルｆｖは、極小解に収束したときのものであるから、そのマクロブロックＭＢの正しい動きベクトルである。したがって、この場合には、大きい分割モード（「１６×１６」等）を選択し、且つ、大きい分割モードに対応した１個の動きベクトルｍｖ（＝ｆｖ）を出力して差し支えない。
【００５５】
一方、第二のケースは、「最大反復数（第１の上限反復数“２”）に達したとき」に動きベクトルｆｖが得られたケース（Ａ）である。上記のＮＮＳ関数は、最大反復数に達したときに強制的に反復を終了して、その時点の探索中心の座標を戻り値（動きベクトルｆｖ）として返すから、この第二のケースで得られた動きベクトルｆｖは暫定値である。
【００５６】
また、このときの動きベクトルｆｖは、「最大反復数（第１の上限反復数“２”）に達しても収束しなかった」ものであると言い換えることもできる。そして、「最大反復数（第１の上限反復数“２”）に達しても収束しなかった」ということは、マクロブロック全体が大きく移動している可能性が高く、このような動きが激しい動画の場合は、マクロブロックＭＢを含む物体が複雑に変形しているおそれが多分にあるから、マクロブロックよりも小さなブロック（サブブロックＳＢ0 〜ＳＢ3 ）単位で探索した方がより高精度に動きベクトルを検出できる。
【００５７】
このため、本実施形態では、第二のケースが発生した場合、図１１に示すように、ＮＮＳ関数の最大反復数ｎを大きな値（第２の上限反復数“１３”）にして、４つのサブブロックＳＢ0 、ＳＢ1 、ＳＢ2 、ＳＢ3 の動きベクトルｍｖ0 、ｍｖ1 、ｍｖ2 、ｍｖ3 を求め、そして、それら４つの動きベクトルｍｖ0 、ｍｖ1 、ｍｖ2 、ｍｖ3 の等価を判定し、等価でない場合は、小さな分割モード（たとえば、４つの「８×８」）を選択するとともに、４個の動きベクトルｍｖ0 、ｍｖ1 、ｍｖ2 、ｍｖ3 を出力し、一方、４つの動きベクトルｍｖ0 、ｍｖ1 、ｍｖ2 、ｍｖ3 が等価であった場合は、大きい分割モード（「１６×１６」等）を選択するとともに、１個の動きベクトルｍｖ0 を出力している。
【００５８】
これは、最大反復数ｎを大きな値（第２の上限反復数“１３”）にセットしたＮＮＳ関数で求められた４個の動きベクトルｍｖ0 、ｍｖ1 、ｍｖ2 、ｍｖ3 は、対応する４つのサブブロックＳＢ0 、ＳＢ1 、ＳＢ2 、ＳＢ3 の各々の画像の動きを正確に表していると考えられるため、４個の動きベクトルｍｖ0 、ｍｖ1 、ｍｖ2 、ｍｖ3 が等価でない（不揃いである）ということは、４つのサブブロックＳＢ0 、ＳＢ1 、ＳＢ2 、ＳＢ3 の各画像がバラバラに動いていることを示すからである。この場合は、小さな分割モード（「８×８」等）を選択すると共に、小さな分割モードに対応した４個の動きベクトルｍｖ0 、ｍｖ1 、ｍｖ2 、ｍｖ3 を出力すべきである。
【００５９】
一方、同様に、最大反復数ｎを大きな値（第２の上限反復数“１３”）にセットしたＮＮＳ関数で求められた４個の動きベクトルｍｖ0 、ｍｖ1 、ｍｖ2 、ｍｖ3 が等価である（揃っている）ということは、４つのサブブロックＳＢ0 、ＳＢ1 、ＳＢ2 、ＳＢ3 の各画像が同量且つ同一方向に動いていることを示すから、この場合は、大きな分割モード（「１６×１６」等）を選択すると共に、大きな分割モードに対応した１個の動きベクトル（ｍｖ0 、ｍｖ1 、ｍｖ2 、ｍｖ3 のいずれか、ここではｍｖ0 ）を出力すべきである。
【００６０】
以上のとおり、動きの遅い動画の場合にはマクロブロックＭＢの探索（一次探索）を行うことによって、そのマクロブロックＭＢの選択と１個の動きベクトルｍｖ（＝ｆｖ）を出力することができ、一方、動きの速い動画の場合には一次探索に加えて、さらに、サブブロックＳＢ0 〜ＳＢ3 の探索（二次探索）を行うことによって、そのサブブロックＳＢ0 〜ＳＢ3 の選択と速い動きに対応した４個の動きベクトルｍｖ0 〜ｍｖ3 を出力することができる。また、４個の動きベクトルｍｖ0 〜ｍｖ3 が揃っていた場合には動きの遅い動画であったと判断して、マクロブロックＭＢの選択と１個の動きベクトルｍｖ（＝ｍｖ0 ）を出力することができる。
【００６１】
＜動き推定部の詳細動作＞
次に、上記の動き推定部１９の動作をより詳しく説明する。なお、ここではフローチャートの形で説明するが、これには二つの意味合いがある。第一の意味は、フローに沿って順番に動作説明を行うことにより理解を助ける点にあり、第二の意味は、上記の動き推定部１９のそれぞれの機能をハードロジックで構成する実施態様だけでなく、このようなフローチャートの流れに沿って設計されたソフトウェアとコンピュータとの有機的結合によって実現される実施態様も排除しない点にある。
【００６２】
＜動き推定部の動作フロー＞
図１２は、動き推定部１９の動作フローチャートを示す図である。このフローチャートを開始すると、まず、通常の最大反復数（“１４”）よりも小さな最大反復数（第１の上限反復数“２”）で上記のＮＮＳ関数を実行して、マクロブロックＭＢ （図２参照）の動きベクトルｆｖを求める一次探索処理を行う（ステップＳ３０：第一動きベクトル演算工程）。次いで、求められた動きベクトルｆｖが極小解に収束したときのものであるか否かを判定する極小解収束判定処理（ステップＳ３１：第一判定工程）を行うが、この判定は、一次探索処理で動きベクトルｆｖを求めた際の中間値（ＳＡＤａ〜ＳＡＤｅ）に基づいて行うことができる。すなわち、ＳＡＤａ〜ＳＡＤｅの中でＳＡＤａが最小であれば、極小解の「収束」を判定し、そうでなければ、「非収束」を判定することができる。これには、たとえば、引数で与えた複数の数値のうち最小のものを返すＭｉｎ関数を用いることができる。Ｍｉｎ関数の引数にＳＡＤａ、ＳＡＤｂ、ＳＡＤｃ、ＳＡＤｄ、ＳＡＤｅを与え、そのＭｉｎ関数の戻り値とＳＡＤａとが等値であるか否かを調べればよい。
【００６３】
そして、極小解収束判定処理の判定結果を調べて（ステップＳ３２）「収束」であれば、大きな分割モード（「１６×１６」等）を選択するとともに、上記の一次探索処理の戻り値（ｆｖ）を１個の動きベクトルｍｖとして出力する（ステップＳ３３：第一選択工程）。これは、上記の第一のケースに相当する。
【００６４】
一方、ステップＳ３２の判定結果が「非収束」の場合（上記の第二のケースに相当する）は、次に、二次探索処理を行う（ステップＳ３４：第二動きベクトル演算工程）。この二次探索処理では、極小解収束判定処理で極小解の収束が判定されなかったとき（非収束が判定されたとき）に、一次探索処理で求められた動きベクトルｆｖを初期値にして、マクロブロックＭＢを４分割したサブブロックＳＢ0 〜ＳＢ3 （図２参照）の各々の動きベクトルｍｖ0 〜ｍｖ3 を上記のＮＮＳ関数を用いて求める。このときにＮＮＳ関数に引数として与える最大反復数ｎは、一次探索処理の最大反復数（第１の上限反復数“２”）よりも大きな値（第２の上限反復数“１３”）である。
【００６５】
二次探索処理を完了すると、次に、二次探索処理で求められた４つの動きベクトルｍｖ0 〜ｍｖ3 の等価を判定する等価判定処理を行う（ステップＳ３５：第二判定工程）。そして、その等価判定処理の判定結果を調べて（ステップＳ３６）「等価」であれば、大きな分割モード（「１６×１６」等）を選択するとともに、上記の二次探索処理の戻り値（ｍｖ0 〜ｍｖ3 ）のいずれか（たとえば、ｍｖ0 ）を１個の動きベクトルｍｖとして出力する（ステップＳ３７：第二選択工程）。
【００６６】
または、ステップＳ３６の判定結果が「等価でない」の場合は、小さな分割モード（「８×８」等）を選択するとともに、上記の二次探索処理の戻り値（ｍｖ0 〜ｍｖ3 ）を４個の動きベクトルｍｖ0 〜ｍｖ3 として出力する（ステップＳ３８：第三選択工程）。
【００６７】
＜一次探索処理＞
図１３は、一次探索処理の動作フローチャートを示す図である。このフローチャートでは、まず、ＮＮＳ関数に与える引数（ｘ：ブロックＸ座標，ｙ：ブロックＹ座標，ｏｘ：オフセットＸ座標，ｏｙ：オフセットＹ座標，ｓｘ：ブロックサイズＸ，ｓｙ：ブロックサイズＹ，ｎ：最大反復数）をセットする（ステップＳ４０、ステップＳ４１）。この一次探索処理はマクロブロックＭＢ （図２参照）の動きベクトルｆｖを求めるので、ｓｘとｓｙにはそれぞれマクロブロックＭＢの横サイズ（“１６”）と縦サイズ（“１６”）をセットする。また、最大反復数ｎには、通常の値（“１４”）よりも小さな値（第１の上限反復数“２”）をセットする。
【００６８】
このように、必要な引数（ｘ，ｙ，ｏｘ，ｏｙ，ｓｘ＝１６，ｓｙ＝１６，ｎ＝２）をセットして上記のＮＮＳ関数を実行（ステップＳ４２）することにより、そのＮＮＳ関数の戻り値として、マクロブロックＭＢの動きベクトルｆｖを得ることができる。
【００６９】
＜二次探索処理＞
図１４は、二次探索処理の動作フローチャートを示す図である。このフローチャートでは、まず、ＮＮＳ関数に与える引数のうちｓｘ、ｓｙ及びｎをセットする（ステップＳ５１、ステップＳ５１）。この二次探索処理では、マクロブロックＭＢを４分割したサブブロックＳＢ0 、ＳＢ1 、ＳＢ2 、ＳＢ3 （図２参照）の各々の動きベクトルｍｖ0 、ｍｖ1 、ｍｖ2 、ｍｖ3 を求めるため、ｓｘとｓｙには、それぞれサブブロックの横サイズ（“８”）と縦サイズ（“８”）をセットし、また、最大反復数ｎには大きな値（第２の上限反復数“１３”）をセットする。
【００７０】
次いで、探索対象の一番目（最初）のサブブロックＳＢ0 の座標（ｘ＝Ｘ、ｙ＝Ｙ）とオフセット（ｏｘ＝ｆｖｘ 、ｏｙ＝ｆｖｙ）をセットする（ステップＳ５２）。ここで、ｆｖｘとｆｖｙはそれぞれ一次探索処理で得られた動きベクトルｆｖのＸ座標（ｆｖｘ）とＹ座標（ｆｖｙ）を表す。このことは、一次探索処理で得られた動きベクトルｆｖ（ｆｖｘ，ｆｖｙ）を、ＮＮＳ関数のオフセット（ｏｘ，ｏｙ）の初期値として与えたことになる。
【００７１】
このように、所要の引数（ｘ＝Ｘ、ｙ＝Ｙ、ｏｘ＝ｆｖｘ 、ｏｙ＝ｆｖｙ 、ｓｘ＝８、ｓｙ＝８、ｎ＝１３）を与えてＮＮＳ関数を実行（ステップＳ５３）することにより、そのＮＮＳ関数の戻り値として、一番目（最初）のサブブロック（ＳＢ0 ）の動きベクトルｍｖ0 を得ることができる。
【００７２】
次いで、探索対象の二番目のサブブロック（ＳＢ1 ）の座標（ｘ＝Ｘ＋８、ｙ＝Ｙ）とオフセット（ｏｘ＝ｆｖｘ 、ｏｙ＝ｆｖｙ）をセットする（ステップＳ５４）。上記と同様にｆｖｘとｆｖｙはそれぞれ一次探索処理で得られた動きベクトルｆｖのＸ座標（ｆｖｘ）とＹ座標（ｆｖｙ）である。つまり、ここでも、一次探索処理で得られた動きベクトルｆｖ（ｆｖｘ，ｆｖｙ）を、ＮＮＳ関数のオフセット（ｏｘ，ｏｙ）の初期値として与える。
【００７３】
このように、所要の引数（ｘ＝Ｘ＋８、ｙ＝Ｙ、ｏｘ＝ｆｖｘ 、ｏｙ＝ｆｖｙ 、ｓｘ＝８、ｓｙ＝８、ｎ＝１３）を与えてＮＮＳ関数を実行（ステップＳ５５）することにより、そのＮＮＳ関数の戻り値として、二番目のサブブロック（ＳＢ1 ）の動きベクトルｍｖ1 を得ることができる。
【００７４】
次いで、探索対象の三番目のサブブロック（ＳＢ2 ）の座標（ｘ＝Ｘ、ｙ＝Ｙ＋８）とオフセット（ｏｘ＝ｆｖｘ 、ｏｙ＝ｆｖｙ）をセットする（ステップＳ５６）。上記と同様にｆｖｘとｆｖｙはそれぞれ一次探索処理で得られた動きベクトルｆｖのＸ座標（ｆｖｘ）とＹ座標（ｆｖｙ）である。つまり、ここでも、一次探索処理で得られた動きベクトルｆｖ（ｆｖｘ，ｆｖｙ）を、ＮＮＳ関数のオフセット（ｏｘ，ｏｙ）の初期値として与える。
【００７５】
このように、所要の引数（ｘ＝Ｘ、ｙ＝Ｙ＋８、ｏｘ＝ｆｖｘ 、ｏｙ＝ｆｖｙ 、ｓｘ＝８、ｓｙ＝８、ｎ＝１３）を与えてＮＮＳ関数を実行（ステップＳ５７）することにより、そのＮＮＳ関数の戻り値として、三番目のサブブロック（ＳＢ2 ）の動きベクトルｍｖ2 を得ることができる。
【００７６】
次いで、探索対象の四番目（最後）のサブブロック（ＳＢ3 ）の座標（ｘ＝Ｘ＋８、ｙ＝Ｙ＋８）とオフセット（ｏｘ＝ｆｖｘ 、ｏｙ＝ｆｖｙ）をセットする（ステップＳ５８）。上記と同様にｆｖｘとｆｖｙはそれぞれ一次探索処理で得られた動きベクトルｆｖのＸ座標（ｆｖｘ）とＹ座標（ｆｖｙ）である。つまり、ここでも、一次探索処理で得られた動きベクトルｆｖ（ｆｖｘ，ｆｖｙ）を、ＮＮＳ関数のオフセット（ｏｘ，ｏｙ）の初期値として与える。
【００７７】
このように、所要の引数（ｘ＝Ｘ＋８、ｙ＝Ｙ＋８、ｏｘ＝ｆｖｘ 、ｏｙ＝ｆｖｙ 、ｓｘ＝８、ｓｙ＝８、ｎ＝１３）を与えてＮＮＳ関数を実行（ステップＳ５９）することにより、そのＮＮＳ関数の戻り値として、四番目（最後）のサブブロック（ＳＢ3 ）の動きベクトルｍｖ3 を得ることができる。
【００７８】
以上のとおり、この二次探索処理では、最大反復数ｎに第２の上限反復数“１３”をセットしたＮＮＳ関数を用いて、サブブロックＳＢ0 、ＳＢ1 、ＳＢ2 、ＳＢ3 のそれぞれの正確な動きベクトルｍｖ0 、ｍｖ1 、ｍｖ2 、ｍｖ3 を得ることができる。
【００７９】
＜実施形態のまとめ＞
本実施形態によれば、最大反復数ｎを通常の値（“１４”）よりも小さな値（第１の上限反復数“２”）にしたＮＮＳ関数を用いてマクロブロックＭＢの動きベクトルｆｖを求める一次探索部２１（又は図１２のステップＳ３０）と、その一次探索で求められた動きベクトルｆｖが最大反復数ｎ（第１の上限反復数“２”）未満で得られたか否か（つまり、極小解に収束したときの動きベクトルｆｖであるか否か）を判定する極小解収束判定部２６（又は図１２のステップＳ３１）と、極小解収束が判定されたときに大きい分割モードと１個の動きベクトルｍｖ（＝ｆｖ）を出力する第一動きベクトル出力部２７（又は図１２のステップＳ３３）と、極小解収束が判定されなかったときに最大反復数ｎを大きな値（第２の上限反復数“１３”）にしたＮＮＳ関数を用いて上記のマクロブロックＭＢを分割したサブブロックＳＢ0 〜ＳＢ3 の各々の動きベクトルｍｖ0 〜ｍｖ3 を求める二次探索部２４（又は図１２のステップＳ３４）と、その４個の動きベクトルｍｖ0 〜ｍｖ3 の等価を判定する等価判定部２９（又は図１２のステップＳ３５）と、等価が判定されたときに大きい分割モードと１個の動きベクトルｍｖ（＝ｍｖ0 ）を出力する第二動きベクトル出力部３０（又は図１２のステップＳ３７）と、等価が判定されなかったときに小さな分割モードと４個の動きベクトルｍｖ0 〜ｍｖ3 を出力する第三動きベクトル出力部３１（又は図１２のステップＳ３８）とを備えたので、次の効果を奏することができる。
【００８０】
（１）計算量の削減：
本実施形態では、まず、一次探索部２１でマクロブロックＭＢの動きベクトルｆｖを求め、次いで、極小解収束判定部２６で、そのマクロブロックｆｖが極小解に収束したときのものであるか否かを判定して、この判定結果が否定の場合にのみ二次探索部２４で、サブブロックＳＢ0 〜ＳＢ3 の各々の動きベクトルｍｖ0 〜ｍｖ3 を求めている。つまり、極小解収束判定部２６の判定結果が肯定の場合（前記の第一のケースの場合）には、二次探索部２４は演算を行わず（休止状態）、この場合の演算量はもっぱら一次探索部２１のみによって与えられる。しかも、この一次探索部２１の最大反復数ｎは通常の値（“１４”）よりも小さな値（第１の上限反復数“２”）であるため、ループの繰り返しは最大でもｎ＝２回であり、一次探索部２１の計算量それ自体も少ない。
【００８１】
したがって、この第一のケースにおいては、従来技術のように、一つのマクロブロック（１６×１６ブロック）と、そのマクロブロックを分割した４つのサブブロック（８×８ブロック）のそれぞれの動き補償予測を行ってから探索ブロックの分割方法を決めていたものに比べて、遙かに計算量を削減できる。
【００８２】
一方、極小解収束判定部２６の判定結果が否定の場合（前記の第二のケースの場合）は、二次探索部２４でもサブブロックＳＢ0 〜ＳＢ3 の各々の動きベクトルｍｖ0 〜ｍｖ3 を計算するため、実質的な計算量は、一次探索部２１の計算量に二次探索部２４の計算量を足した量になるが、それでも、上記の理由（ループの繰り返しは最大でもｎ＝２回）から一次探索部２１の計算量そのものが少ないため、従来技術のようなほぼ２倍もの大きな演算量にはならない。
【００８３】
（２）適切な分割モード選択：
本実施形態では、まず、マクロブロックＭＢの動きベクトルｆｖを求め（一次探索）、次いで、そのマクロブロックｆｖが極小解に収束したときのものであるか否かを判定して、この判定結果が否定の場合にのみサブブロックＳＢ0 〜ＳＢ3 の各々の動きベクトルｍｖ0 〜ｍｖ3 を求めている（二次探索）。つまり、最初に大きなブロック（マクロブロック）をサーチし、そのサーチ結果に従って、小さなブロック（サブブロック）をサーチしている。一般的に動き補償予測符号化では、動きベクトルが大きくなるにつれて誤差や偏差が増える性質（量子化によるものと、対象物体の動きの激しさによるものなどが考えられる）があるといわれている。本実施形態では、小さな動きに対しては大きなブロックだけを探索（一次探索）し、一方、大きな動きに対しては大きなブロック単位から探索（一次探索）を始め、その後に、小さなブロックの探索（二次探索）を行うようにしたので、小さな動きに対してはもちろんのこと、誤差や偏差が増える性質がある大きな動きに対しても、計算量を倍増することなく、統計的にみてほぼ適切な分割モードの選択を行うことができる。
【００８４】
（３）誤った極小解の回避：
対象範囲を満遍なく探索する全探索法などの探索アルゴリズムは、正確な結果を得られる点で優れているが、膨大な計算量を必要とする欠点がある。これに対して、ポイント（探索中心）を辿りながら逐次に探索を行う最近傍探索法などの探索アルゴリズムは、少ない計算量で速やかに結果が得られる利点があり、とりわけ、少ない電力消費や高速性が求められる動き補償予測符号化装置に用いて好適である。しかし一方で、最近傍探索法などは、誤った極小解に陥りやすいという欠点を持ち合わせている。これは、ポイントを辿る途中の局所的な最小点（正しくない最小点）を正しい最小点と誤認してしまうことが原因である。こうした誤認は、探索の対象となるブロックサイズが小さいほど起きやすい。近視眼的な探索になり、探索範囲を外れた真の最小点との比較ができないからである。
【００８５】
これに対して、本実施形態では、最初に大きなブロック（マクロブロック）をサーチ（一次探索）し、そのサーチ結果に従って、小さなブロック（サブブロック）をサーチ（二次探索）するので、最初のサーチの段階で多くの画素値を対象にして広範囲に平均化された状態（低周波成分に相当する要素）を参照した残差評価値を得ることができる。このため、特に小さなブロックにおける間違った極小解に陥る可能性を緩和できる。したがって、最近傍探索法などの探索アルゴリズムの欠点を克服でき、そのアルゴリズムの利点（少ない計算量、高速性）を最大限に活用することができるという格別有益なメリットが得られる。
【００８６】
＜他の実施形態＞
本発明は上記の実施形態に限定されない。その技術思想の範囲内において、様々な変形例を含むことはもちろんである。
【００８７】
たとえば、ＮＮＳ関数を改良して、一次探索処理で得られた残差評価値ＳＡＤａ〜ＳＡＤｅを、二次探索処理の初期値として流用できるようにしてもよい。
図１５は、改良されたＮＮＳ関数処理の要部フローチャートを示す図である。改良前（図６）との違いは、探索中心及びその探索中心近傍４点の計５個の残差評価値ＳＡＤａ〜ＳＡＤｅを演算する（ステップＳ１２）前に、新たな処理（ステップＳ１９）を行う点にある。
【００８８】
この新たなステップＳ１９では、まず、ＮＮＳ関数の呼び出し元が二次探索処理であるか否かを判定する（ステップＳ１９ａ）。二次探索処理からの呼び出しでない場合には、改良前（図６）と同様に、探索中心及びその探索中心近傍４点の計５個の残差評価値ＳＡＤａ〜ＳＡＤｅを演算する（ステップＳ１２）が、二次探索処理からの呼び出しの場合には、次に、ｉ＝０であるか、つまり、ＮＮＳ関数の開始直後であるか否かを判定する（ステップＳ１９ｂ）。
【００８９】
そして、ＮＮＳ関数の開始直後でなければ、探索中心及びその探索中心近傍４点の計５個の残差評価値ＳＡＤａ〜ＳＡＤｅを演算（ステップＳ１２）する一方、ＮＮＳ関数の開始直後であれば、「一次探索処理の中間値（図１２のステップＳ３１のＳＡＤａ〜ＳＡＤｅ）を取り込み、それらを探索中心及びその探索中心近傍４点の計５個の残差評価値ＳＡＤａ〜ＳＡＤｅとして流用する」という処理を実行（ステップＳ１８ｂ）してから、改良前（図６）と同様に、ＳＡＤａ〜ＳＡＤｅの最小値を判定する（ステップＳ１３）。
【００９０】
この改良されたＮＮＳ関数処理によれば、一次探索処理の中間値を二次探索処理の初期値として再利用するので、二次探索処理の無駄な演算をなくして処理時間を短縮できる。
たとえば、一次探索処理におけるＮＮＳ関数の反復がＮ回で終わったとすると、二次探索処理のＮＮＳ関数は、その一次探索処理におけるＮＮＳ関数のＮ反復（図１５ではｉ＝０：これは第一反復を意味する）で得られた中間値（ＳＡＤａ〜ＳＡＤｅ）を初期値にして反復を開始するので、この二次探索処理におけるＮＮＳ関数の反復開始は初回からではなく、Ｎ＋１回目からとなる。このため、無駄な反復を排除し、それだけ処理時間の短縮を図ることができる。
【００９１】
また、上記の実施形態では、一次探索を実行した後に極小解の収束を判定し、その判定結果が「非収束」の場合にだけ二次探索を実行するようにしているが、これに限らない。たとえば、一次探索を実行した後、続けて二次探索を実行するように変形してもよい。
【００９２】
図１６は、図９の動き推定部１９の変形例を示す概念的なブロック図である。以下、この変形例を動き推定部１９′ということにする。図９の動き推定部１９との大きな相違は、極小解収束判定部２６と第一動きベクトル出力部２７を備えない点、及び、一次探索部２５の後ろに二次探索部２４を接続している点にあり、さらに、それらの一次探索部２５と二次探索部２８の最大反復数ｎをそれぞれｎ＝“８”（一次探索部２５）、ｎ＝“７”（二次探索部２８）としている点にある。一次探索部２５の最大反復数“８”は、発明の要旨に記載の「所定の上限反復数」に相当する。この所定の上限反復数は、たとえば、上記例示のとおり、通常の最大反復数（“１４”）のほぼ１／２相当としてもよく、あるいは、それに近い値としてもよい。
【００９３】
一次探索部２５は、図９の動き推定部１９と同様に、マクロブロックＭＢ （図２参照）の動きベクトルｆｖをＮＮＳ関数を用いて演算する。このＮＮＳ関数の最大反復数ｎは、通常の値（“１４”）のほぼ１／２程度の値（所定の上限反復数“８”）である。一次探索部２５からは、ＭＢの動きベクトルｆｖが取り出される。
【００９４】
二次探索部２８は、一次探索部２５から取り出された動きベクトルｆｖを初期値にして、マクロブロックＭＢを４分割したサブブロックＳＢ0 〜ＳＢ3 （図２参照）の各々の動きベクトルｍｖ0 〜ｍｖ3 をＮＮＳ関数を用いて演算する。ＮＮＳ関数の最大反復数ｎは、通常の値（“１４”）から一次探索部２５の最大反復数（所定の上限反復数“８”）を引いた“７”である。
【００９５】
等価判定部２９は、二次探索部２８で求められた４個の動きベクトルｍｖ0 〜ｍｖ3 の等価を判定する。つまり、ｍｖ0 ＝ｍｖ1 ＝ｍｖ2 ＝ｍｖ3 であるか否かを判定する。なお、ここでは完全等価を判定するが、所定の範囲に収まっているか否かを判定する近似等価であってもよい。
【００９６】
第二動きベクトル出力部３０は、等価判定部２９で等価が判定されたときに、そのうちの一つの動きベクトル（等価だからどれでも構わない。たとえば、ｍｖ0 ）を、それらのサブブロックＳＢ0 〜ＳＢ3 に対応するマクロブロックＭＢの動きベクトルｍｖとして出力するとともに、大きな分割モード（１６×１６分割モード）ｍＭＢを出力する。
【００９７】
第三動きベクトル出力部３１は、等価判定部２９で等価が判定されなかったときに、それら４個の動きベクトルｍｖ0 、ｍｖ1 、ｍｖ2 、ｍｖ3 と、小さな分割モード（８×８分割モード）ｍＳＢを出力する。
【００９８】
図１７は、変更された動き推定部１９′の動作フローチャートを示す図である。このフローチャートは、多くの部分で、変更前の動き推定部１９の動作フローチャート（図１２）と類似するが、極小解収束判定処理（ステップＳ３１）及びその判定結果の分岐（ステップＳ３２）並びに収束判定時の動きベクトル出力処理（ステップＳ３３）を有さない点で相違する。また、一次探索処理（ステップＳ３０）に続けて二次探索処理（ステップＳ３４）を実行する点でも相違し、さらに、一次探索処理（ステップＳ３０）の最大反復数ｎを“８”（所定の上限反復数）にしている点、及び、二次探索処理（ステップＳ３４）の最大反復数ｎを“７”にしている点でも相違する。一次探索処理と二次探索処理のサブルーチンフロー（図１３と図１４）は、最大反復数ｎの点（図１３のステップＳ４１→ｎ＝“８”、図１４のステップＳ５１→ｎ＝“７”）を除き変更前と変わらない。
【００９９】
変更されたフローチャート（図１７）を開始すると、まず、通常の最大反復数（“１４”）のほぼ１／２相当の値（所定の上限反復数“８”）でＮＮＳ関数を実行して、マクロブロックＭＢ （図２参照）の動きベクトルｆｖを求める一次探索処理を行い（ステップＳ３０）、続けて、二次探索処理を行う（ステップＳ３４）。
【０１００】
この二次探索処理では、一次探索処理で求められた動きベクトルｆｖを初期値にして、マクロブロックＭＢを４分割したサブブロックＳＢ0 〜ＳＢ3 （図２参照）の各々の動きベクトルｍｖ0 〜ｍｖ3 をＮＮＳ関数を用いて求める。このときにＮＮＳ関数に引数として与える最大反復数ｎは、通常の値（“１４”）から一次探索処理の最大反復数（所定の上限反復数“８”）を引いた“７”である。
【０１０１】
二次探索処理を完了すると、次に、二次探索処理で求められた４つの動きベクトルｍｖ0 〜ｍｖ3 の等価を判定する等価判定処理を行う（ステップＳ３５）。そして、その等価判定処理の判定結果を調べて（ステップＳ３６）「等価」であれば、大きな分割モード（「１６×１６」等）を選択するとともに、上記の二次探索処理の戻り値（ｍｖ0 〜ｍｖ3 ）のいずれか（たとえば、ｍｖ0 ）を１個の動きベクトルｍｖとして出力する（ステップＳ３７）。
【０１０２】
または、ステップＳ３６の判定結果が「等価でない」場合は、小さな分割モード（「８×８」等）を選択するとともに、上記の二次探索処理の戻り値（ｍｖ0 〜ｍｖ3 ）を４個の動きベクトルｍｖ0 〜ｍｖ3 として出力する（ステップＳ３８）。
【０１０３】
図１８は、変更された動き推定部１９′及び変更されたフローチャート（図１７）の動作概念図である。この図において、「一次探索」は一次探索部２１又はステップＳ３０を表し、「二次探索」は二次探索部２１又はステップＳ３４を表す。また、「等価判定」は等価判定部２９又はステップＳ３５を表し、その下の左側の枠は第二動きベクトル出力部３０又はステップＳ３７を表し、右側の枠は第三動きベクトル出力部３１又はステップＳ３８を表す。
【０１０４】
最初の「一次探索」では、最大反復数ｎ（所定の上限反復数“８”）を上限にして、マクロブロックＭＢの動きベクトルｆｖ＝（ｆｖｘ，ｆｖｙ）を求め、次の「二次探索」では、「一次探索」の探索結果（ｆｖｘ，ｆｖｙ）をオフセット初期値（ｏｘ＝ｆｖｘ，ｏｙ＝ｆｖｙ）にセットし、最大反復数ｎ（通常の最大反復数“１４”から所定の上限反復数“８”を引いた残りの値“７”）を上限にして、マクロブロックＭＢを分割したサブブロックＳＢ0 〜ＳＢ3 の各々の動きベクトルｍｖ0 〜ｍｖ3 を求める。「等価判定」では、それら４個の動きベクトルｍｖ0 〜ｍｖ3 の等価を判定し、等価であれば、１個の動きベクトルｍｖ0 の出力と大きな分割モードの選択を行い、一方、等価でなければ、４個の動きベクトルｍｖ0 〜ｍｖ3 の出力と小さな分割モードの選択を行う。
【０１０５】
このような変更例においても、マクロブロックＭＢの動きベクトルｆｖを求め（一次探索）た後、サブブロックＳＢ0 〜ＳＢ3 の各々の動きベクトルｍｖ0 〜ｍｖ3 を求めている（二次探索）ため、つまり、最初に大きなブロック（マクロブロック）をサーチ（一次探索）した後、小さなブロック（サブブロック）をサーチ（二次探索）しているため、変更前と同様に、最初のサーチの段階で多くの画素値を対象にして広範囲に平均化された状態（低周波成分に相当する要素）を参照した残差評価値を得ることができる。このため、特に小さなブロックにおける間違った極小解に陥る可能性を緩和できる。したがって、最近傍探索法などの探索アルゴリズムの欠点を克服でき、そのアルゴリズムの利点（少ない計算量、高速性）を最大限に活用することができるという格別有益なメリットを得られる。
【０１０６】
また、一次探索の最大反復数（所定の上限反復数“８”）と二次探索の最大反復数（“７”）を足し合わせたものが、ＮＮＳ関数における通常の最大反復数（“１４”）になるため、この変形例におけるトータルの計算量も、一次探索の計算量と二次探索の計算量を足しても２倍にはならない。また、最初に大きなブロック（マクロブロック）をサーチ（一次探索）した後、小さなブロック（サブブロック）をサーチ（二次探索）しているため、小さな動きに対してはもちろんのこと、誤差や偏差が増える性質がある大きな動きに対しても、計算量を倍増することなく、統計的にみてほぼ適切な分割モードの選択を行うことができる。
【０１０７】
なお、このような変更例において、必要であれば、たとえば、ソフトウェア処理の場合で処理時間の不足が見込まれるようなときには、二次探索をスキップし、一次探索で求められた１個の動きベクトルｆｖの出力と、大きな分割モードの選択を行うようにして、時間の調整をしてもよい。
【０１０８】
また、実施形態及び変形例について、以下のようにしてもよい。
（ａ）サブブロックのサイズ、個数、形状は任意である。また、分割方法に階層関係があれば同様に適用できる。例えば、Ｈ．２６４では「１６×１６」を分割した「８×８」をさらに「４×８」、「８×４」、「４×４」に分割することができ、階層構造が二重になっているが、このいずれかの階層間で、または両方の階層間で行うことができる。
（ｂ）残差評価値はＳＡＤの代わりにＳＳＤ（sum of squared difference：差分二乗和）等であってもよい。サブブロック評価値の集まりからブロック評価値を計算可能であれば、全く同様に適用できる。また、動きベクトルの符号割り当てコストを評価値に加えてもよい。
（ｃ）動きベクトルの等価判別は、完全等価のみならず、各成分の差分絶対値が所定値以内などの近似等価によって行ってもよい。
（ｄ）探索アルゴリズムは、最近傍探索法だけでなく、たとえば、Ｎステップ探索法や対数探索法又は階層探索法などの座標毎の誤差の総和に基づく残差評価値の比較に従って探索範囲を限定する他の探索アルゴリズムを用いてもよい。
【図面の簡単な説明】
【０１０９】
【図１】動き補償予測ブロックの種類を示す図である。
【図２】本実施形態の便宜的な選択対象となる二つの動き補償予測ブロックを示す図である。
【図３】動き補償予測符号化装置のブロック図である。
【図４】元画像のブロック位置（座標）とブロックサイズを説明する図である。
【図５】参照画像に与える探索中心のオフセットを示す図である。
【図６】最近傍探索処理（ＮＮＳ関数）のフローチャートを示す図である。
【図７】残差評価値演算処理のサブルーチンフローを示す図である。
【図８】残差評価値演算の概念図である。
【図９】動き推定部１９の概念的なブロック図である。
【図１０】動き推定部１９の動作を説明するための概念図（１／２）である。
【図１１】動き推定部１９の動作を説明するための概念図（２／２）である。
【図１２】動き推定部１９の動作フローチャートを示す図である。
【図１３】一次探索処理の動作フローチャートを示す図である。
【図１４】二次探索処理の動作フローチャートを示す図である。
【図１５】改良されたＮＮＳ関数処理の要部フローチャートを示す図である。
【図１６】図９の動き推定部１９の変形例を示す概念的なブロック図である。
【図１７】変更された動き推定部１９′の動作フローチャートを示す図である。
【図１８】変更された動き推定部１９′及び変更されたフローチャート（図１７）の動作概念図である。
【図１９】動き補償予測符号化の簡略化した概念図である。
【図２０】動き補償予測符号化における被符号化画像生成の概念図である。
【図２１】動きの遅い画像と速い画像にそれぞれ大きなブロックと小さなブロックを適用した概念図である。
【符号の説明】
【０１１０】
Ｓ３０  ステップ（第一動きベクトル演算工程）
Ｓ３１  ステップ（第一判定工程）
Ｓ３３  ステップ（第一選択工程）
Ｓ３４  ステップ（第二動きベクトル演算工程）
Ｓ３５  ステップ（第二判定工程）
Ｓ３７  ステップ（第二選択工程）
Ｓ３８  ステップ（第三選択工程）
ＳＢ0 〜ＳＢ3   サブブロック（第二ブロック）
ＭＢ  マクロブロック（第一ブロック）
１０  動き補償予測符号化装置
２５  一次探索部（第一動きベクトル演算手段）
２６  極小解収束判定部（第一判定手段）
２７  第一動きベクトル出力部（第一選択手段）
２８  二次探索部（第二動きベクトル演算手段）
２９  等価判定部（第二判定手段）
３０  第二動きベクトル出力部（第二選択手段）
３１  第三動きベクトル出力部（第三選択手段）
【図１】
2006180426.tif 000003
【図２】
2006180426.tif 000004
【図３】
2006180426.tif 000005
【図４】
2006180426.tif 000006
【図５】
2006180426.tif 000007
【図６】
2006180426.tif 000008
【図７】
2006180426.tif 000009
【図８】
2006180426.tif 000010
【図９】
2006180426.tif 000011
【図１０】
2006180426.tif 000012
【図１１】
2006180426.tif 000013
【図１２】
2006180426.tif 000014
【図１３】
2006180426.tif 000015
【図１４】
2006180426.tif 000016
【図１５】
2006180426.tif 000017
【図１６】
2006180426.tif 000018
【図１７】
2006180426.tif 000019
【図１８】
2006180426.tif 000020
【図１９】
2006180426.tif 000021
【図２０】
2006180426.tif 000022
【図２１】
2006180426.tif 000023