JP4547668B2 - 動き補償予測符号化装置及び動き補償予測符号化方法 - Google Patents

動き補償予測符号化装置及び動き補償予測符号化方法 Download PDF

Info

Publication number
JP4547668B2
JP4547668B2 JP2004374255A JP2004374255A JP4547668B2 JP 4547668 B2 JP4547668 B2 JP 4547668B2 JP 2004374255 A JP2004374255 A JP 2004374255A JP 2004374255 A JP2004374255 A JP 2004374255A JP 4547668 B2 JP4547668 B2 JP 4547668B2
Authority
JP
Japan
Prior art keywords
block
motion
motion vector
search
determination
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2004374255A
Other languages
English (en)
Other versions
JP2006180426A (ja
Inventor
玲 浜田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Casio Computer Co Ltd
Original Assignee
Casio Computer Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Casio Computer Co Ltd filed Critical Casio Computer Co Ltd
Priority to JP2004374255A priority Critical patent/JP4547668B2/ja
Publication of JP2006180426A publication Critical patent/JP2006180426A/ja
Application granted granted Critical
Publication of JP4547668B2 publication Critical patent/JP4547668B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、動き補償予測符号化装置及び動き補償予測符号化方法に関し、詳しくは、動き補償予測ブロックのサイズを選択して使用できる動き補償予測符号化装置及び動き補償予測符号化方法に関する。
我々が目にする動画は、時間軸上に連続する多数のフレーム画像(静止画)の残像に過ぎない。ギクシャク感のないスムーズな動きにするには、残像効果が失われる前に次のフレーム画像を表示しなければならず、それには、たとえば、毎秒30フレームないしはそれ以上のフレーム画像を必要とするが、こうした多数のフレーム画像からなる動画は、その情報量が膨大なものとなり、蓄積媒体の容量や伝送経路の帯域を圧迫する。
そこで、動画の情報量を削減(圧縮)するための技術として、「動き補償予測符号化」が用いられる。
図19は、動き補償予測符号化の簡略化した概念図である。左列に符号化前(情報量削減前)の画像(以下、元画像)P1、P2、P3、・・・・、P7が並んでいる。並び順は時間軸に沿って上から下である。動き補償予測符号化では、少なくとも1枚の元画像P1(イントラ画像ともいう)はそのまま(無圧縮又は静止画の符号化技術で圧縮し)伝送路(又は蓄積媒体)を介して復号側に送出しなければならないが、残りの元画像P2、P3、・・・・、P7については、時間軸を過去に遡った一つ前の元画像(参照画像)との間の「動き情報」を取り出し、その動き情報からなる被符号化画像P2′、P3′、・・・・、P7′を伝送路を介して復号側に送出する。被符号化画像P2′、P3′、・・・・、P7′の情報量は、元画像P2、P3、・・・・、P7のそれよりも少ない。このため、伝送路上(または蓄積媒体)における情報量は、すべての元画像を送出する場合に比べて遙かに削減される。
復号側では、イントラ画像(元画像P1)はそのまま復元画像P1″として用いるが、それ以外の復元画像P2′、P3′、・・・・、P7′については、時間軸を過去に遡った一つ前の復元画像と「動き情報」とにより画像を再生するという手順を繰り返すことにより、元画像P1、P2、P3、・・・・、P7と同じ並びの復元画像P1″、P2″、P3″、・・・・、P7″を得る。なお、図の説明では、時間軸を過去に遡った一つ“前”の元画像を「参照画像」としているが、これは伝送系メディアの場合である。蓄積系では時間軸上の未来の画像(一つ“後”の元画像)を「参照画像」とすることもある。
図20は、動き補償予測符号化における被符号化画像生成の概念図である(たとえば、特許文献1参照。)。この図において、動き補償予測符号化では、動画像を構成する元画像を16×16画素などの小さな動き補償予測ブロック(以下、単に「ブロック」という)に分割し、このブロック単位に、時間的に前(蓄積系では後の場合もある)に位置する参照画像から被符号化画像を作成する。
たとえば、被符号化画像1がB1〜B25(Bはブロックの略)までの25個のブロックに分割されていると仮定した場合、まず、B1と同じ大きさのブロック(B1′)を参照画像2から取り出し、そのB1′とB1との画素毎の差分(残差信号)を取る。そして、参照画像2の上のB1′の位置を1画素単位(又は数画素単位若しくは数分の1画素単位)ずつ少しずつずらしながら、逐次に残差信号を収集していき、残差信号が最小となったときのB1′(図ではB1″)とB1との相対的なズレの大きさ及びズレの方向をベクトル量3(動きベクトル)で検出する。これを、他のブロック(B2〜B25)についても同様に繰り返すことにより、最終的に、すべてのブロック(B1〜B25)の動きベクトルと残差信号とを得ることができる。復号側には、それらの動きベクトルと残差信号を各ブロック(B1〜B25)に格納した被符号化画像4を送出する。
復号側では、送られてきた被符号化画像4のB1〜B25の各動きベクトルを用いて、対象となる参照画像に相当する復元画像のブロックを選択し、そのブロックとB1〜B25の各残差信号を画素毎に加算して、B1〜B25を再現し、元画像と同じ復元画像を再構成する。
ここで、ブロックサイズを小さくすると、よりきめ細かな動き予測を行うことができることから、初期の動画像符号化方式(MPEG−2:Moving Picture Experts Group )では「16×16」の一種類しかなかったブロックサイズが、その上位バージョン(MPEG−4)では「16×16」と「8×8」の二種類となり、さらに、最新バージョン(MPEG−4/AVC又はH.264/AVC)では「16×16」、「16×8」、「8×16」、「8×8」、「8×4」、「4×8」、「4×4」の7種類になった。
これにより、小さなブロックを選択して動き予測の精度を高めることができるようになった。反面、小さなブロックは、符号化処理量の増加を招き、伝送情報量や処理のオーバヘッド及び電力消費を大きくすることから、とりわけ動きの遅い動画に用いて不適切であり、動きの量に対応した適切な大きさのブロックを選択できる技術が求められている。
図21は、動きの遅い画像と速い画像にそれぞれ大きなブロックと小さなブロックを適用した概念図である。動きの遅い画像とは、たとえば、静止した被写体をカメラでゆっくりパンしながら撮影した画像などである。また、動きの速い画像とは、画面の物体が不規則且つ多方向に高速移動する画像などである。図示の例では、動きの遅い画像として、記念撮影時にカメラを水平方向左から右へとゆっくりパンさせた画像(a)を示し、また、動きの速い画像として、ボウリングのピンが激しくはじけ飛ぶ様子を撮影した画像(b)を示している。
動きの遅い画像(a)に対して小さなブロックを適用した場合、画質の点では何らの不都合もないが、不必要な演算処理が生じるという欠点がある。この欠点は、動き補償予測符号化装置の電力消費増大を招くため、特にバッテリ駆動のカメラ等の場合に大きな障害となる。したがって、動きの遅い画像(a)に対しては、望ましくは大きなブロックを適用すべきである。図中の丸印(○)は適切なブロック選択を示し、罰印(×)は不適切なブロック選択を示している。
一方、動きの速い画像(b)に対して大きなブロックを適用した場合、それぞれのブロック内で多方向の物体移動が生じる可能性がある。そのようなとき、それぞれのブロックで予測された動きベクトルは、そのブロック内の物体の動きを正しく表していない。したがって、動きの速い画像(b)に対しては、画質の点で小さなブロックを適用すべきである。
動きの量に対応した適切な大きさのブロックを選択できる従来技術としては、たとえば、16×16動きベクトル検出部と、8×8動きベクトル検出部と、それらの二つの動き検出部で得られた動き補償予測結果のうちのどちらか一方を選択するベクトル選択部とを備えたものが知られている(たとえば、特許文献2参照)。
これによれば、16×16ブロックと、そのブロックを4分割した8×8ブロックのそれぞれで得られた動き補償予測結果のうち適切な方を選択できる。このため、動きが遅い動画の場合には大きなサイズの「16×16ブロック」を選択して伝送情報量の削減と電力消費の抑制及び処理のオーバヘッドの軽減を図り、一方、動きが速い動画の場合には小さなサイズの「8×8ブロック」を選択してよりきめ細かな動き予測を図ることができる。
特表2003−533142号公報 特開2000−102016号公報
しかしながら、上記の従来技術にあっては、「16×16ブロック」と、そのブロックを4分割した「8×8ブロック」のそれぞれで動き補償予測を行っているため、たとえば、「全探索法」で予測を行った場合、トータルの演算量は、16×16ブロック1個分の演算量のほぼ2倍にも達する。これは、ブロックの面積に比例して演算量が増えるため、8×8ブロック4個分の演算量は、16×16ブロック1個分の演算量にほぼ匹敵するからである。
なお、このこと(演算量が2倍に増える)は「全探索法」よりも演算量が少ない他の探索法(最近傍探索法など)を用いた場合でも同じである。たとえば、最近傍探索法を行ったときの16×16ブロック1個分の演算量をAとするとき(このAは全探索法よりも少ないが)、同様に最近傍探索を行った8×8ブロック4個分の演算量もほぼAと同等になるため、トータルの演算量が、やはり2倍(≒2A)になるからである。
そこで、本発明の目的は、トータルの演算量を減らしつつ、最適なブロックサイズの選択を可能とする動き補償予測符号化装置及び動き補償予測符号化方法を提供することにある。
請求項1記載の発明は、探索アルゴリズムの第1の上限反復数以下で第一ブロックの動きベクトルを演算する第一動きベクトル演算手段と、前記第一動きベクトル演算手段で演算された動きベクトルが前記探索アルゴリズムにおける評価値が極小解に収束したときのものであるか否かを判定する第一判定手段と、前記第一判定手段の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第一選択手段と、前記第一判定手段の判定結果が否定の場合に探索アルゴリズムの第2の上限反復数以下で前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する第二動きベクトル演算手段と、前記第二動きベクトル演算手段で演算された第二ブロックの各々の動きベクトルの互いの差が所定の範囲に収まっているか否かを判定する第二判定手段と、前記第二判定手段の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第二選択手段と、前記第二判定手段の判定結果が否定の場合に前記第二ブロックを動き補償予測ブロックとして選択する第三選択手段とを備え、前記第一乃至第三選択手段の何れかによって選ばれた動き補償予測ブロックを用いて符号化を行うことを特徴とする動き補償予測符号化装置である。
請求項2記載の発明は、前記探索アルゴリズムは、最近傍探索法、Nステップ探索法、対数探索法又は階層探索法であることを特徴とする請求項1に記載の動き補償予測符号化装置である。
請求項3記載の発明は、前記第二動きベクトル演算手段は、前記第一動きベクトル演算手段の反復がN回で終わったとき、N+1回から反復を開始するとともに、その反復の初期値として、前記第一動きベクトル演算手段のN反復で得られた中間値を使用することを特徴とする請求項1又は請求項2いずれかに記載の動き補償予測符号化装置である。
請求項4記載の発明は、探索アルゴリズムの第1の上限反復数以下で第一ブロックの動きベクトルを演算する第一動きベクトル演算工程と、前記第一動きベクトル演算工程で演算された動きベクトルが前記探索アルゴリズムにおける評価値が極小解に収束したときのものであるか否かを判定する第一判定工程と、前記第一判定工程の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第一選択工程と、前記第一判定工程の判定結果が否定の場合に探索アルゴリズムの第2の上限反復数以下で前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する第二動きベクトル演算工程と、前記第二動きベクトル演算工程で演算された第二ブロックの各々の動きベクトルの互いの差が所定の範囲に収まっているか否かを判定する第二判定工程と、前記第二判定工程の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第二選択工程と、前記第二判定工程の判定結果が否定の場合に前記第二ブロックを動き補償予測ブロックとして選択する第三選択工程とを含み、前記第一乃至第三選択工程の何れかによって選ばれた動き補償予測ブロックを用いて符号化を行うことを特徴とする動き補償予測符号化方法である。
請求項5記載の発明は、前記探索アルゴリズムは、最近傍探索法、Nステップ探索法、対数探索法又は階層探索法であることを特徴とする請求項4に記載の動き補償予測符号化方法である。
請求項6記載の発明は、前記第二動きベクトル演算工程は、前記第一動きベクトル演算工程の反復がN回で終わったとき、N+1回から反復を開始するとともに、その反復の初期値として、前記第一動きベクトル演算工程のN反復で得られた中間値を使用することを特徴とする請求項4又は請求項5いずれかに記載の動き補償予測符号化方法である。
本発明では、画像の動きに対応した適切な大きさのブロック(第一ブロックと第二ブロック)を選択することができ、加えて、第一動きベクトル演算手段と第二動きベクトル演算手段のトータルの演算量を大幅に削減できる。さらに、大きなサイズの第一ブロックの探索から始めて小さなサイズの第二ブロックの探索へと進むので、誤った極小解に陥る不具合も抑制できる。
以下、本発明の実施形態を、図面を参照しながら説明する。なお、以下の説明における様々な細部の特定ないし実例および数値や文字列その他の記号の例示は、本発明の思想を明瞭にするための、あくまでも参考であって、それらのすべてまたは一部によって本発明の思想が限定されないことは明らかである。また、周知の手法、周知の手順、周知のアーキテクチャおよび周知の回路構成等(以下「周知事項」)についてはその細部にわたる説明を避けるが、これも説明を簡潔にするためであって、これら周知事項のすべてまたは一部を意図的に排除するものではない。かかる周知事項は本発明の出願時点で当業者の知り得るところであるので、以下の説明に当然含まれている。
<動き補償予測ブロック>
まず、動き補償予測ブロックについて説明する。
図1は、動き補償予測ブロックの種類を示す図である。(a)〜(h)は、それぞれMPEG−4/AVC(又はH.264/AVC)で使用が認められている7種類の動き補償予測ブロックである。詳しくは、(a)は「16×16」のサイズの動き補償予測ブロック、(b)は「16×16」の動き補償予測ブロックを上下に2分割したそれぞれ「16×8」のサイズの動き補償予測ブロック、(c)は同じく「16×16」の動き補償予測ブロックを左右に2分割したそれぞれ「8×16」のサイズの動き補償予測ブロック、(d)は同じく「16×16」の動き補償予測ブロックを上下左右に4分割したそれぞれ「8×8」のサイズの動き補償予測ブロックである。
また、(e)は「8×8」の動き補償予測ブロック、(f)は「8×8」の動き補償予測ブロックを上下に2分割したそれぞれ「8×4」のサイズの動き補償予測ブロック、(g)は同じく「8×8」の動き補償予測ブロックを左右に2分割したそれぞれ「4×8」のサイズの動き補償予測ブロック、(h)は同じく「8×8」の動き補償予測ブロックを上下左右に4分割したそれぞれ「4×4」のサイズの動き補償予測ブロックである。
動き補償予測ブロックの選択は、(a)〜(d)のグループの中で行われる。すなわち、最大サイズの「16×16」、最大サイズを上下に2分割した「16×8」、最大サイズを左右に2分割した「8×16」、及び、最大サイズを上下左右に4分割した「8×8」の中から選ばれる。また、選択された動き補償予測ブロックが(d)(「16×16」を上下左右に4分割した「8×8」)である場合は、それぞれの「8×8」ブロック毎に、さらに(e)〜(h)のグループの中から選択できるように階層化されている。
なお、一般的に(a)の動き補償予測ブロック(「16×16」)のことを「マクロブロック」といい、また、(b)〜(h)の分割された動き補償予測ブロックのことを「サブブロック」という。
このように、動き補償予測ブロックの種類は多く、ブロック選択の組み合わせも多岐にわたるため、本実施形態では説明の簡単化のために、「16×16」の動き補償予測ブロック(a)と、それを四分割した大きさの「8×8」の動き補償予測ブロック(d)を選択するものとする。
図2は、本実施形態の便宜的な選択対象となる二つの動き補償予測ブロックを示す図である。この図においては、「16×16」の動き補償予測ブロックと、それを四分割した大きさの「8×8」の動き補償予測ブロックが例示されている。以下、上記の一般呼称に倣って、「16×16」の動き補償予測ブロックを「マクロブロック(略号:MB)」(発明の要旨に記載の第一ブロックに相当)といい、それを四分割した大きさの「8×8」の動き補償予測ブロックを「サブブロック(略号:SB)」(発明の要旨に記載の第二ブロックに相当)ということにする。但し、これは、両者のブロックを区別するための、あくまでも説明上の便宜であって、これらの呼び名(マクロ・・・・、サブ・・・・)から発明の外縁を把握してはならない。また、4個のSBの各々に左上から順に添え字0、1,2,3を付けて識別することにする。すなわち、左上のSBをSB0 、右上のSBをSB1 、左下のSBをSB2 、右下のSBをSB3 として識別することにする。
<動き補償予測符号化装置の構成>
次に、動き補償予測符号化装置の構成を説明する。
図3は、動き補償予測符号化装置のブロック図である。動き補償予測符号化装置10は、入力されたビットストリーム中の現フレーム(元画像)と予測画像との差分をとる減算部11と、その差分を何らかの2次元関数の有限級数変換(たとえば、2次元離散コサイン変換:DCT)式として表示することにより圧縮する変換部12と、変換式の係数を量子化する量子化部13と、この量子化データと後述の動き情報及び分割モードとを符号化(たとえば、エントロピー符号化)して、その符号化ビットストリームを伝送媒体や蓄積媒体に出力する符号化部14と、量子化データを逆量子化する逆量子化部15と、逆量子化されたデータを逆変換して元の差分に戻す逆変換部16と、この差分と予測画像とを加算して復元画像を再生する加算部17と、復元画像を保持する復元画像メモリ18と、現在の元画像と復元画像メモリ18に保持されている一つ前の復元画像(参照画像)とに基づいて動き情報(動きベクトル等)やブロックの分割モードを推定する動き推定部19と、この動き情報に基づいて予測画像を生成する動き補償部20とを備える。
<最近傍探索について>
次に、本実施形態の特徴的事項を備える動き推定部19の構成と動作を説明するが、その前に、この動き推定部19で使用する探索アルゴリズム(最近傍探索法)について具体的に説明する。
まず、探索アルゴリズムで用いられる用語等について説明する。
図4は、元画像のブロック位置(座標)とブロックサイズを説明する図である。この図において、元画像21の升目22のそれぞれはブロック(MB又はSB)であり、それらのブロック位置は、たとえば、その升目22の左上隅の画素座標(x,y)で表されるものとする。また、ブロックサイズは横方向(行方向)をsx、縦方向(列方向)をsyとして表されるものとする。
図5は、参照画像に与える探索中心のオフセットを示す図である。この図において、参照画像23の上の探索中心24のオフセットは(ox,oy)で表されるものとする。
図6は、最近傍探索処理(以下、NNS関数と呼ぶことにする。)のフローチャートを示す図である。このNNS関数では、まず、与えられた引数(x:ブロックX座標,y:ブロックY座標,ox:オフセットX座標,oy:オフセットY座標,sx:ブロックサイズX,sy:ブロックサイズY,n:最大反復数)を読み込む(ステップS10)。
ここで、上記引数のうちの最大反復数nは、NNS関数の繰り返しループの上限値である。NNS関数は、この最大反復数nを上限にして動きベクトル予測を行う。なお、最大反復数nの値を増やしていくと誤った極小解に捕まる確率が徐々に下がっていくが、ある値を超えると計算量が増える割にはその確率が思うように下がらず一定の確率に漸近していくようになる。そのため、通常はこのような漸近状態に陥る値よりも少し前の値にnを設定する。このときの値はシステム毎に異なることが多い。計算量が増えても構わなければ、大きめの値を設定するし、計算量を増やしたくなければ、小さめの値を設定するからである。本明細書では、説明の便宜上、上記の一般的な考え方に倣って設定された値(誤った極小解に捕まる確率が低下して漸近状態に陥ったときの値又はそれよりも少し前の値)のことを「通常の値」又は「通常の最大反復数」ということとし、且つ、その通常の値を“14”(単なる一例に過ぎない)とすることにする。
次いで、反復のためのループ変数iに初期値0をセット(ステップS11)した後、探索中心の残差評価値SADaと、その近傍4点の残差評価値SADb〜SADeを演算する残差評価値演算処理を実行する(ステップS12)。
図7は、残差評価値演算処理のサブルーチンフローを示す図である。
図8は、残差評価値演算の概念図である。
残差評価値演算処理のサブルーチンフローでは、たとえば、SAD関数を用いて、計5点の残差評価値SADa〜SADeを順次に演算する(ステップS20〜ステップS24)。SAD関数とは、差分絶対値和(sum of absolute difference)を計算するための関数である。
探索中心はオフセット(x0 ,y0 )で与えられる。また、その近傍4点の位置は、オフセット(x0 ,y0 )のx座標とy座標を調節することによって与えられる。たとえば、オフセット(x0 ,y0 )のx座標を+1すると、探索中心(x0 ,y0 )の1画素右(x0 +1、y0 )となり、同様に、オフセット(x0 ,y0 )のx座標を−1すると、探索中心(x0 ,y0 )の1画素左(x0 −1、y0 )となる。さらに、オフセット(x0 ,y0 )のy座標を+1すると、探索中心(x0 ,y0 )の1画素上(x0 、y0 +1)となり、オフセット(x0 ,y0 )のy座標を−1すると、探索中心(x0 ,y0 )の1画素下(x0 、y0 −1)となる。
したがって、この残差評価値演算処理のサブルーチンフローによれば、SAD関数を用いて、探索中心(x0 ,y0 )の残差評価値SADa、探索中心(x0 ,y0 )の1画素右(x0 +1、y0 )の残差評価値SADb、探索中心(x0 ,y0 )の1画素左(x0 −1、y0 )の残差評価値SADc、探索中心(x0 ,y0 )の1画素上(x0 、y0 +1)の残差評価値SADd、及び、探索中心(x0 ,y0 )の1画素下(x0 、y0 −1)の残差評価値SADeを演算することができる。
このようにして、探索中心の残差評価値SADaと、その近傍4点の残差評価値SADa〜SADeを求めると、再び、図6のフローに戻り、SADa〜SADeのうちの最小値を求める(ステップS13)。これには、たとえば、Min関数を使用できる。Min関数は、引数内の複数の数値のなかで最小のものを戻り値として返すので、Min(SADa、SADb、SADc、SADe)とすればよい。
次に、最小値(Min関数の戻り値)が探索中心で得られたもの(SADa)であるか否かを判定する(ステップS14)。そして、最小値が探索中心で得られたものであれば、その探索中心の座標を戻り値にして(ステップS15)、フローを終了(反復を終了)する一方、最小値が探索中心で得られたものでなければ、最小値が得られた探索点の座標を新たな探索中心(x0 ,y0 )にセットする(ステップS16)。
つまり、最小値=SADbであれば探索中心の1画素右(x0 +1,y0 )を新たな探索中心(x0 ,y0 )にセットし、最小値=SADcであれば探索中心の1画素左(x0 −1,y0 )を新たな探索中心(x0 ,y0 )にセットし、最小値=SADdであれば探索中心の1画素上(x0 ,y0 +1)を新たな探索中心(x0 ,y0 )にセットし、又は、最小値=SADeであれば探索中心の1画素下(x0 ,y0 −1)を新たな探索中心(x0 ,y0 )にセットする。
そして、ループ変数iを+1して(ステップS17)、そのiが最大反復数nを超えているか否かを判定し(ステップS18)、超えていなければ、ステップS12に戻って以上の処理を繰り返し(反復し)、超えていれば、そのときの探索中心の座標を戻り値にして(ステップS14)、フローを終了(反復を終了)する。
このように、最近傍探索処理(NNS関数)は、与えられた引数の最大反復数nを上限にして、反復(ループ)を繰り返しながら逐次に探索を行い、探索中心の残差評価値SADaが最小値になったとき(極小解に収束したとき)、または、ループ変数iの値が最大反復数nを超えたときのいずれかの場合に、そのときの探索中心の座標を戻り値(動きベクトル)として返すことができる。
<動き推定部の構成と動作>
図9は、動き推定部19の概念的なブロック図である。動き推定部19は、一次探索部25(第一動きベクトル演算手段)、極小解収束判定部26(第一判定手段)、第一動きベクトル出力部27(第一選択手段)、二次探索部28(第二動きベクトル演算手段)、等価判定部29(第二判定手段)、第二動きベクトル出力部30(第二選択手段)、及び、第三動きベクトル出力部31(第三選択手段)を備える。
一次探索部25は、マクロブロックMB (図2参照)の動きベクトルfvを上記のNNS関数を用いて演算する。このNNS関数に引数として与える最大反復数nは、通常の値(“14”)よりも小さな値(たとえば、“2”)である。この小さな値“2”は、発明の要旨に記載の「第1の上限反復数」に相当する。一次探索部25からは、MBの動きベクトルfvと共に、その動きベクトルfvが得られたときのNNS関数の中間値(SADa〜SADe:図6のステップS12参照)も取り出されている。なお、NNS関数に引数として与える最大反復数nは、上記例示の“2”に限定されない。NNS関数で最も精度が得られる通常の最大反復数(“14”)よりも小さな値であればよい。たとえば、“1”でもよく、あるいは、“3”や“4”などであってもよい。最大反復数(第1の上限反復数)を増やすほど、動きベクトルの演算精度を高められるが、計算量が増えるため、演算精度と計算量のどちらを重視するかで決めればよい。
極小解収束判定部26は、一次探索部25から取り出されたSADa〜SADeに基づいて極小解の「収束」を判定する。すなわち、SADa〜SADeの中でSADaが最小であれば、極小解の「収束」を判定し、そうでなければ、「非収束」を判定する。
第一動きベクトル出力部27は、極小解収束判定部26で極小解の「収束」が判定されたときに、一次探索部25から取り出された動きベクトルfvをそのMBの動きベクトルmvとして出力するとともに、大きな分割モード(16×16分割モード)mMBを出力する。
二次探索部28は、極小解収束判定部26で極小解の収束が判定されなかったとき(非収束が判定されたとき)に、一次探索部25から取り出された動きベクトルfvを初期値にして、マクロブロックMBを4分割したサブブロックSB0 〜SB3 (図2参照)の各々の動きベクトルmv0 〜mv3 を上記のNNS関数を用いて演算する。
このときにNNS関数に引数として与える最大反復数nは、一次探索部28で用いた最大反復数、すなわち第1の上限反復数(“2”)よりも大きな値(たとえば、“13”)である。この値“13”は、発明の要旨に記載の「第2の上限反復数」に相当する。なお、この上限反復数は、通常の最大反復数(“14”)としてもよい。
等価判定部29は、二次探索部28で求められた4個の動きベクトルmv0 〜mv3 の等価を判定する。つまり、mv0 =mv1 =mv2 =mv3 であるか否かを判定する。なお、ここでは完全等価を判定するが、所定の範囲に収まっているか否かを判定する近似等価であってもよい。
第二動きベクトル出力部30は、等価判定部29で等価が判定されたときに、そのうちの一つの動きベクトル(等価だからどれでも構わない。たとえば、mv0 )を、それらのサブブロックSB0 〜SB3 に対応するマクロブロックMBの動きベクトルmvとして出力するとともに、大きな分割モード(16×16分割モード)mMBを出力する。
第三動きベクトル出力部31は、等価判定部29で等価が判定されなかったときに、それら4個の動きベクトルmv0 、mv1 、mv2 、mv3 と、小さな分割モード(8×8分割モード)mSBを出力する。
図10及び図11は、動き推定部19の動作を説明するための概念図である。まず、図10に示すように、最大反復数nを小さくして(第1の上限反復数“2”にして)マクロブロック(MB)の動きベクトル(fv)を求めたときには、次の二つのケースが起こり得る。
第一のケースは、「最大反復数(第1の上限反復数“2”)に達する前」に動きベクトルfvが得られたケースである。この第一のケースの場合、得られた動きベクトルfvは、極小解に収束したときのものであるから、そのマクロブロックMBの正しい動きベクトルである。したがって、この場合には、大きい分割モード(「16×16」等)を選択し、且つ、大きい分割モードに対応した1個の動きベクトルmv(=fv)を出力して差し支えない。
一方、第二のケースは、「最大反復数(第1の上限反復数“2”)に達したとき」に動きベクトルfvが得られたケース(A)である。上記のNNS関数は、最大反復数に達したときに強制的に反復を終了して、その時点の探索中心の座標を戻り値(動きベクトルfv)として返すから、この第二のケースで得られた動きベクトルfvは暫定値である。
また、このときの動きベクトルfvは、「最大反復数(第1の上限反復数“2”)に達しても収束しなかった」ものであると言い換えることもできる。そして、「最大反復数(第1の上限反復数“2”)に達しても収束しなかった」ということは、マクロブロック全体が大きく移動している可能性が高く、このような動きが激しい動画の場合は、マクロブロックMBを含む物体が複雑に変形しているおそれが多分にあるから、マクロブロックよりも小さなブロック(サブブロックSB0 〜SB3 )単位で探索した方がより高精度に動きベクトルを検出できる。
このため、本実施形態では、第二のケースが発生した場合、図11に示すように、NNS関数の最大反復数nを大きな値(第2の上限反復数“13”)にして、4つのサブブロックSB0 、SB1 、SB2 、SB3 の動きベクトルmv0 、mv1 、mv2 、mv3 を求め、そして、それら4つの動きベクトルmv0 、mv1 、mv2 、mv3 の等価を判定し、等価でない場合は、小さな分割モード(たとえば、4つの「8×8」)を選択するとともに、4個の動きベクトルmv0 、mv1 、mv2 、mv3 を出力し、一方、4つの動きベクトルmv0 、mv1 、mv2 、mv3 が等価であった場合は、大きい分割モード(「16×16」等)を選択するとともに、1個の動きベクトルmv0 を出力している。
これは、最大反復数nを大きな値(第2の上限反復数“13”)にセットしたNNS関数で求められた4個の動きベクトルmv0 、mv1 、mv2 、mv3 は、対応する4つのサブブロックSB0 、SB1 、SB2 、SB3 の各々の画像の動きを正確に表していると考えられるため、4個の動きベクトルmv0 、mv1 、mv2 、mv3 が等価でない(不揃いである)ということは、4つのサブブロックSB0 、SB1 、SB2 、SB3 の各画像がバラバラに動いていることを示すからである。この場合は、小さな分割モード(「8×8」等)を選択すると共に、小さな分割モードに対応した4個の動きベクトルmv0 、mv1 、mv2 、mv3 を出力すべきである。
一方、同様に、最大反復数nを大きな値(第2の上限反復数“13”)にセットしたNNS関数で求められた4個の動きベクトルmv0 、mv1 、mv2 、mv3 が等価である(揃っている)ということは、4つのサブブロックSB0 、SB1 、SB2 、SB3 の各画像が同量且つ同一方向に動いていることを示すから、この場合は、大きな分割モード(「16×16」等)を選択すると共に、大きな分割モードに対応した1個の動きベクトル(mv0 、mv1 、mv2 、mv3 のいずれか、ここではmv0 )を出力すべきである。
以上のとおり、動きの遅い動画の場合にはマクロブロックMBの探索(一次探索)を行うことによって、そのマクロブロックMBの選択と1個の動きベクトルmv(=fv)を出力することができ、一方、動きの速い動画の場合には一次探索に加えて、さらに、サブブロックSB0 〜SB3 の探索(二次探索)を行うことによって、そのサブブロックSB0 〜SB3 の選択と速い動きに対応した4個の動きベクトルmv0 〜mv3 を出力することができる。また、4個の動きベクトルmv0 〜mv3 が揃っていた場合には動きの遅い動画であったと判断して、マクロブロックMBの選択と1個の動きベクトルmv(=mv0 )を出力することができる。
<動き推定部の詳細動作>
次に、上記の動き推定部19の動作をより詳しく説明する。なお、ここではフローチャートの形で説明するが、これには二つの意味合いがある。第一の意味は、フローに沿って順番に動作説明を行うことにより理解を助ける点にあり、第二の意味は、上記の動き推定部19のそれぞれの機能をハードロジックで構成する実施態様だけでなく、このようなフローチャートの流れに沿って設計されたソフトウェアとコンピュータとの有機的結合によって実現される実施態様も排除しない点にある。
<動き推定部の動作フロー>
図12は、動き推定部19の動作フローチャートを示す図である。このフローチャートを開始すると、まず、通常の最大反復数(“14”)よりも小さな最大反復数(第1の上限反復数“2”)で上記のNNS関数を実行して、マクロブロックMB (図2参照)の動きベクトルfvを求める一次探索処理を行う(ステップS30:第一動きベクトル演算工程)。次いで、求められた動きベクトルfvが極小解に収束したときのものであるか否かを判定する極小解収束判定処理(ステップS31:第一判定工程)を行うが、この判定は、一次探索処理で動きベクトルfvを求めた際の中間値(SADa〜SADe)に基づいて行うことができる。すなわち、SADa〜SADeの中でSADaが最小であれば、極小解の「収束」を判定し、そうでなければ、「非収束」を判定することができる。これには、たとえば、引数で与えた複数の数値のうち最小のものを返すMin関数を用いることができる。Min関数の引数にSADa、SADb、SADc、SADd、SADeを与え、そのMin関数の戻り値とSADaとが等値であるか否かを調べればよい。
そして、極小解収束判定処理の判定結果を調べて(ステップS32)「収束」であれば、大きな分割モード(「16×16」等)を選択するとともに、上記の一次探索処理の戻り値(fv)を1個の動きベクトルmvとして出力する(ステップS33:第一選択工程)。これは、上記の第一のケースに相当する。
一方、ステップS32の判定結果が「非収束」の場合(上記の第二のケースに相当する)は、次に、二次探索処理を行う(ステップS34:第二動きベクトル演算工程)。この二次探索処理では、極小解収束判定処理で極小解の収束が判定されなかったとき(非収束が判定されたとき)に、一次探索処理で求められた動きベクトルfvを初期値にして、マクロブロックMBを4分割したサブブロックSB0 〜SB3 (図2参照)の各々の動きベクトルmv0 〜mv3 を上記のNNS関数を用いて求める。このときにNNS関数に引数として与える最大反復数nは、一次探索処理の最大反復数(第1の上限反復数“2”)よりも大きな値(第2の上限反復数“13”)である。
二次探索処理を完了すると、次に、二次探索処理で求められた4つの動きベクトルmv0 〜mv3 の等価を判定する等価判定処理を行う(ステップS35:第二判定工程)。そして、その等価判定処理の判定結果を調べて(ステップS36)「等価」であれば、大きな分割モード(「16×16」等)を選択するとともに、上記の二次探索処理の戻り値(mv0 〜mv3 )のいずれか(たとえば、mv0 )を1個の動きベクトルmvとして出力する(ステップS37:第二選択工程)。
または、ステップS36の判定結果が「等価でない」の場合は、小さな分割モード(「8×8」等)を選択するとともに、上記の二次探索処理の戻り値(mv0 〜mv3 )を4個の動きベクトルmv0 〜mv3 として出力する(ステップS38:第三選択工程)。
<一次探索処理>
図13は、一次探索処理の動作フローチャートを示す図である。このフローチャートでは、まず、NNS関数に与える引数(x:ブロックX座標,y:ブロックY座標,ox:オフセットX座標,oy:オフセットY座標,sx:ブロックサイズX,sy:ブロックサイズY,n:最大反復数)をセットする(ステップS40、ステップS41)。この一次探索処理はマクロブロックMB (図2参照)の動きベクトルfvを求めるので、sxとsyにはそれぞれマクロブロックMBの横サイズ(“16”)と縦サイズ(“16”)をセットする。また、最大反復数nには、通常の値(“14”)よりも小さな値(第1の上限反復数“2”)をセットする。
このように、必要な引数(x,y,ox,oy,sx=16,sy=16,n=2)をセットして上記のNNS関数を実行(ステップS42)することにより、そのNNS関数の戻り値として、マクロブロックMBの動きベクトルfvを得ることができる。
<二次探索処理>
図14は、二次探索処理の動作フローチャートを示す図である。このフローチャートでは、まず、NNS関数に与える引数のうちsx、sy及びnをセットする(ステップS51、ステップS51)。この二次探索処理では、マクロブロックMBを4分割したサブブロックSB0 、SB1 、SB2 、SB3 (図2参照)の各々の動きベクトルmv0 、mv1 、mv2 、mv3 を求めるため、sxとsyには、それぞれサブブロックの横サイズ(“8”)と縦サイズ(“8”)をセットし、また、最大反復数nには大きな値(第2の上限反復数“13”)をセットする。
次いで、探索対象の一番目(最初)のサブブロックSB0 の座標(x=X、y=Y)とオフセット(ox=fvx 、oy=fvy)をセットする(ステップS52)。ここで、fvxとfvyはそれぞれ一次探索処理で得られた動きベクトルfvのX座標(fvx)とY座標(fvy)を表す。このことは、一次探索処理で得られた動きベクトルfv(fvx,fvy)を、NNS関数のオフセット(ox,oy)の初期値として与えたことになる。
このように、所要の引数(x=X、y=Y、ox=fvx 、oy=fvy 、sx=8、sy=8、n=13)を与えてNNS関数を実行(ステップS53)することにより、そのNNS関数の戻り値として、一番目(最初)のサブブロック(SB0 )の動きベクトルmv0 を得ることができる。
次いで、探索対象の二番目のサブブロック(SB1 )の座標(x=X+8、y=Y)とオフセット(ox=fvx 、oy=fvy)をセットする(ステップS54)。上記と同様にfvxとfvyはそれぞれ一次探索処理で得られた動きベクトルfvのX座標(fvx)とY座標(fvy)である。つまり、ここでも、一次探索処理で得られた動きベクトルfv(fvx,fvy)を、NNS関数のオフセット(ox,oy)の初期値として与える。
このように、所要の引数(x=X+8、y=Y、ox=fvx 、oy=fvy 、sx=8、sy=8、n=13)を与えてNNS関数を実行(ステップS55)することにより、そのNNS関数の戻り値として、二番目のサブブロック(SB1 )の動きベクトルmv1 を得ることができる。
次いで、探索対象の三番目のサブブロック(SB2 )の座標(x=X、y=Y+8)とオフセット(ox=fvx 、oy=fvy)をセットする(ステップS56)。上記と同様にfvxとfvyはそれぞれ一次探索処理で得られた動きベクトルfvのX座標(fvx)とY座標(fvy)である。つまり、ここでも、一次探索処理で得られた動きベクトルfv(fvx,fvy)を、NNS関数のオフセット(ox,oy)の初期値として与える。
このように、所要の引数(x=X、y=Y+8、ox=fvx 、oy=fvy 、sx=8、sy=8、n=13)を与えてNNS関数を実行(ステップS57)することにより、そのNNS関数の戻り値として、三番目のサブブロック(SB2 )の動きベクトルmv2 を得ることができる。
次いで、探索対象の四番目(最後)のサブブロック(SB3 )の座標(x=X+8、y=Y+8)とオフセット(ox=fvx 、oy=fvy)をセットする(ステップS58)。上記と同様にfvxとfvyはそれぞれ一次探索処理で得られた動きベクトルfvのX座標(fvx)とY座標(fvy)である。つまり、ここでも、一次探索処理で得られた動きベクトルfv(fvx,fvy)を、NNS関数のオフセット(ox,oy)の初期値として与える。
このように、所要の引数(x=X+8、y=Y+8、ox=fvx 、oy=fvy 、sx=8、sy=8、n=13)を与えてNNS関数を実行(ステップS59)することにより、そのNNS関数の戻り値として、四番目(最後)のサブブロック(SB3 )の動きベクトルmv3 を得ることができる。
以上のとおり、この二次探索処理では、最大反復数nに第2の上限反復数“13”をセットしたNNS関数を用いて、サブブロックSB0 、SB1 、SB2 、SB3 のそれぞれの正確な動きベクトルmv0 、mv1 、mv2 、mv3 を得ることができる。
<実施形態のまとめ>
本実施形態によれば、最大反復数nを通常の値(“14”)よりも小さな値(第1の上限反復数“2”)にしたNNS関数を用いてマクロブロックMBの動きベクトルfvを求める一次探索部21(又は図12のステップS30)と、その一次探索で求められた動きベクトルfvが最大反復数n(第1の上限反復数“2”)未満で得られたか否か(つまり、極小解に収束したときの動きベクトルfvであるか否か)を判定する極小解収束判定部26(又は図12のステップS31)と、極小解収束が判定されたときに大きい分割モードと1個の動きベクトルmv(=fv)を出力する第一動きベクトル出力部27(又は図12のステップS33)と、極小解収束が判定されなかったときに最大反復数nを大きな値(第2の上限反復数“13”)にしたNNS関数を用いて上記のマクロブロックMBを分割したサブブロックSB0 〜SB3 の各々の動きベクトルmv0 〜mv3 を求める二次探索部24(又は図12のステップS34)と、その4個の動きベクトルmv0 〜mv3 の等価を判定する等価判定部29(又は図12のステップS35)と、等価が判定されたときに大きい分割モードと1個の動きベクトルmv(=mv0 )を出力する第二動きベクトル出力部30(又は図12のステップS37)と、等価が判定されなかったときに小さな分割モードと4個の動きベクトルmv0 〜mv3 を出力する第三動きベクトル出力部31(又は図12のステップS38)とを備えたので、次の効果を奏することができる。
(1)計算量の削減:
本実施形態では、まず、一次探索部21でマクロブロックMBの動きベクトルfvを求め、次いで、極小解収束判定部26で、そのマクロブロックfvが極小解に収束したときのものであるか否かを判定して、この判定結果が否定の場合にのみ二次探索部24で、サブブロックSB0 〜SB3 の各々の動きベクトルmv0 〜mv3 を求めている。つまり、極小解収束判定部26の判定結果が肯定の場合(前記の第一のケースの場合)には、二次探索部24は演算を行わず(休止状態)、この場合の演算量はもっぱら一次探索部21のみによって与えられる。しかも、この一次探索部21の最大反復数nは通常の値(“14”)よりも小さな値(第1の上限反復数“2”)であるため、ループの繰り返しは最大でもn=2回であり、一次探索部21の計算量それ自体も少ない。
したがって、この第一のケースにおいては、従来技術のように、一つのマクロブロック(16×16ブロック)と、そのマクロブロックを分割した4つのサブブロック(8×8ブロック)のそれぞれの動き補償予測を行ってから探索ブロックの分割方法を決めていたものに比べて、遙かに計算量を削減できる。
一方、極小解収束判定部26の判定結果が否定の場合(前記の第二のケースの場合)は、二次探索部24でもサブブロックSB0 〜SB3 の各々の動きベクトルmv0 〜mv3 を計算するため、実質的な計算量は、一次探索部21の計算量に二次探索部24の計算量を足した量になるが、それでも、上記の理由(ループの繰り返しは最大でもn=2回)から一次探索部21の計算量そのものが少ないため、従来技術のようなほぼ2倍もの大きな演算量にはならない。
(2)適切な分割モード選択:
本実施形態では、まず、マクロブロックMBの動きベクトルfvを求め(一次探索)、次いで、そのマクロブロックfvが極小解に収束したときのものであるか否かを判定して、この判定結果が否定の場合にのみサブブロックSB0 〜SB3 の各々の動きベクトルmv0 〜mv3 を求めている(二次探索)。つまり、最初に大きなブロック(マクロブロック)をサーチし、そのサーチ結果に従って、小さなブロック(サブブロック)をサーチしている。一般的に動き補償予測符号化では、動きベクトルが大きくなるにつれて誤差や偏差が増える性質(量子化によるものと、対象物体の動きの激しさによるものなどが考えられる)があるといわれている。本実施形態では、小さな動きに対しては大きなブロックだけを探索(一次探索)し、一方、大きな動きに対しては大きなブロック単位から探索(一次探索)を始め、その後に、小さなブロックの探索(二次探索)を行うようにしたので、小さな動きに対してはもちろんのこと、誤差や偏差が増える性質がある大きな動きに対しても、計算量を倍増することなく、統計的にみてほぼ適切な分割モードの選択を行うことができる。
(3)誤った極小解の回避:
対象範囲を満遍なく探索する全探索法などの探索アルゴリズムは、正確な結果を得られる点で優れているが、膨大な計算量を必要とする欠点がある。これに対して、ポイント(探索中心)を辿りながら逐次に探索を行う最近傍探索法などの探索アルゴリズムは、少ない計算量で速やかに結果が得られる利点があり、とりわけ、少ない電力消費や高速性が求められる動き補償予測符号化装置に用いて好適である。しかし一方で、最近傍探索法などは、誤った極小解に陥りやすいという欠点を持ち合わせている。これは、ポイントを辿る途中の局所的な最小点(正しくない最小点)を正しい最小点と誤認してしまうことが原因である。こうした誤認は、探索の対象となるブロックサイズが小さいほど起きやすい。近視眼的な探索になり、探索範囲を外れた真の最小点との比較ができないからである。
これに対して、本実施形態では、最初に大きなブロック(マクロブロック)をサーチ(一次探索)し、そのサーチ結果に従って、小さなブロック(サブブロック)をサーチ(二次探索)するので、最初のサーチの段階で多くの画素値を対象にして広範囲に平均化された状態(低周波成分に相当する要素)を参照した残差評価値を得ることができる。このため、特に小さなブロックにおける間違った極小解に陥る可能性を緩和できる。したがって、最近傍探索法などの探索アルゴリズムの欠点を克服でき、そのアルゴリズムの利点(少ない計算量、高速性)を最大限に活用することができるという格別有益なメリットが得られる。
<他の実施形態>
本発明は上記の実施形態に限定されない。その技術思想の範囲内において、様々な変形例を含むことはもちろんである。
たとえば、NNS関数を改良して、一次探索処理で得られた残差評価値SADa〜SADeを、二次探索処理の初期値として流用できるようにしてもよい。
図15は、改良されたNNS関数処理の要部フローチャートを示す図である。改良前(図6)との違いは、探索中心及びその探索中心近傍4点の計5個の残差評価値SADa〜SADeを演算する(ステップS12)前に、新たな処理(ステップS19)を行う点にある。
この新たなステップS19では、まず、NNS関数の呼び出し元が二次探索処理であるか否かを判定する(ステップS19a)。二次探索処理からの呼び出しでない場合には、改良前(図6)と同様に、探索中心及びその探索中心近傍4点の計5個の残差評価値SADa〜SADeを演算する(ステップS12)が、二次探索処理からの呼び出しの場合には、次に、i=0であるか、つまり、NNS関数の開始直後であるか否かを判定する(ステップS19b)。
そして、NNS関数の開始直後でなければ、探索中心及びその探索中心近傍4点の計5個の残差評価値SADa〜SADeを演算(ステップS12)する一方、NNS関数の開始直後であれば、「一次探索処理の中間値(図12のステップS31のSADa〜SADe)を取り込み、それらを探索中心及びその探索中心近傍4点の計5個の残差評価値SADa〜SADeとして流用する」という処理を実行(ステップS18b)してから、改良前(図6)と同様に、SADa〜SADeの最小値を判定する(ステップS13)。
この改良されたNNS関数処理によれば、一次探索処理の中間値を二次探索処理の初期値として再利用するので、二次探索処理の無駄な演算をなくして処理時間を短縮できる。
たとえば、一次探索処理におけるNNS関数の反復がN回で終わったとすると、二次探索処理のNNS関数は、その一次探索処理におけるNNS関数のN反復(図15ではi=0:これは第一反復を意味する)で得られた中間値(SADa〜SADe)を初期値にして反復を開始するので、この二次探索処理におけるNNS関数の反復開始は初回からではなく、N+1回目からとなる。このため、無駄な反復を排除し、それだけ処理時間の短縮を図ることができる。
また、上記の実施形態では、一次探索を実行した後に極小解の収束を判定し、その判定結果が「非収束」の場合にだけ二次探索を実行するようにしているが、これに限らない。たとえば、一次探索を実行した後、続けて二次探索を実行するように変形してもよい。
図16は、図9の動き推定部19の変形例を示す概念的なブロック図である。以下、この変形例を動き推定部19′ということにする。図9の動き推定部19との大きな相違は、極小解収束判定部26と第一動きベクトル出力部27を備えない点、及び、一次探索部25の後ろに二次探索部24を接続している点にあり、さらに、それらの一次探索部25と二次探索部28の最大反復数nをそれぞれn=“8”(一次探索部25)、n=“7”(二次探索部28)としている点にある。一次探索部25の最大反復数“8”は、発明の要旨に記載の「所定の上限反復数」に相当する。この所定の上限反復数は、たとえば、上記例示のとおり、通常の最大反復数(“14”)のほぼ1/2相当としてもよく、あるいは、それに近い値としてもよい。
一次探索部25は、図9の動き推定部19と同様に、マクロブロックMB (図2参照)の動きベクトルfvをNNS関数を用いて演算する。このNNS関数の最大反復数nは、通常の値(“14”)のほぼ1/2程度の値(所定の上限反復数“8”)である。一次探索部25からは、MBの動きベクトルfvが取り出される。
二次探索部28は、一次探索部25から取り出された動きベクトルfvを初期値にして、マクロブロックMBを4分割したサブブロックSB0 〜SB3 (図2参照)の各々の動きベクトルmv0 〜mv3 をNNS関数を用いて演算する。NNS関数の最大反復数nは、通常の値(“14”)から一次探索部25の最大反復数(所定の上限反復数“8”)を引いた“7”である。
等価判定部29は、二次探索部28で求められた4個の動きベクトルmv0 〜mv3 の等価を判定する。つまり、mv0 =mv1 =mv2 =mv3 であるか否かを判定する。なお、ここでは完全等価を判定するが、所定の範囲に収まっているか否かを判定する近似等価であってもよい。
第二動きベクトル出力部30は、等価判定部29で等価が判定されたときに、そのうちの一つの動きベクトル(等価だからどれでも構わない。たとえば、mv0 )を、それらのサブブロックSB0 〜SB3 に対応するマクロブロックMBの動きベクトルmvとして出力するとともに、大きな分割モード(16×16分割モード)mMBを出力する。
第三動きベクトル出力部31は、等価判定部29で等価が判定されなかったときに、それら4個の動きベクトルmv0 、mv1 、mv2 、mv3 と、小さな分割モード(8×8分割モード)mSBを出力する。
図17は、変更された動き推定部19′の動作フローチャートを示す図である。このフローチャートは、多くの部分で、変更前の動き推定部19の動作フローチャート(図12)と類似するが、極小解収束判定処理(ステップS31)及びその判定結果の分岐(ステップS32)並びに収束判定時の動きベクトル出力処理(ステップS33)を有さない点で相違する。また、一次探索処理(ステップS30)に続けて二次探索処理(ステップS34)を実行する点でも相違し、さらに、一次探索処理(ステップS30)の最大反復数nを“8”(所定の上限反復数)にしている点、及び、二次探索処理(ステップS34)の最大反復数nを“7”にしている点でも相違する。一次探索処理と二次探索処理のサブルーチンフロー(図13と図14)は、最大反復数nの点(図13のステップS41→n=“8”、図14のステップS51→n=“7”)を除き変更前と変わらない。
変更されたフローチャート(図17)を開始すると、まず、通常の最大反復数(“14”)のほぼ1/2相当の値(所定の上限反復数“8”)でNNS関数を実行して、マクロブロックMB (図2参照)の動きベクトルfvを求める一次探索処理を行い(ステップS30)、続けて、二次探索処理を行う(ステップS34)。
この二次探索処理では、一次探索処理で求められた動きベクトルfvを初期値にして、マクロブロックMBを4分割したサブブロックSB0 〜SB3 (図2参照)の各々の動きベクトルmv0 〜mv3 をNNS関数を用いて求める。このときにNNS関数に引数として与える最大反復数nは、通常の値(“14”)から一次探索処理の最大反復数(所定の上限反復数“8”)を引いた“7”である。
二次探索処理を完了すると、次に、二次探索処理で求められた4つの動きベクトルmv0 〜mv3 の等価を判定する等価判定処理を行う(ステップS35)。そして、その等価判定処理の判定結果を調べて(ステップS36)「等価」であれば、大きな分割モード(「16×16」等)を選択するとともに、上記の二次探索処理の戻り値(mv0 〜mv3 )のいずれか(たとえば、mv0 )を1個の動きベクトルmvとして出力する(ステップS37)。
または、ステップS36の判定結果が「等価でない」場合は、小さな分割モード(「8×8」等)を選択するとともに、上記の二次探索処理の戻り値(mv0 〜mv3 )を4個の動きベクトルmv0 〜mv3 として出力する(ステップS38)。
図18は、変更された動き推定部19′及び変更されたフローチャート(図17)の動作概念図である。この図において、「一次探索」は一次探索部21又はステップS30を表し、「二次探索」は二次探索部21又はステップS34を表す。また、「等価判定」は等価判定部29又はステップS35を表し、その下の左側の枠は第二動きベクトル出力部30又はステップS37を表し、右側の枠は第三動きベクトル出力部31又はステップS38を表す。
最初の「一次探索」では、最大反復数n(所定の上限反復数“8”)を上限にして、マクロブロックMBの動きベクトルfv=(fvx,fvy)を求め、次の「二次探索」では、「一次探索」の探索結果(fvx,fvy)をオフセット初期値(ox=fvx,oy=fvy)にセットし、最大反復数n(通常の最大反復数“14”から所定の上限反復数“8”を引いた残りの値“7”)を上限にして、マクロブロックMBを分割したサブブロックSB0 〜SB3 の各々の動きベクトルmv0 〜mv3 を求める。「等価判定」では、それら4個の動きベクトルmv0 〜mv3 の等価を判定し、等価であれば、1個の動きベクトルmv0 の出力と大きな分割モードの選択を行い、一方、等価でなければ、4個の動きベクトルmv0 〜mv3 の出力と小さな分割モードの選択を行う。
このような変更例においても、マクロブロックMBの動きベクトルfvを求め(一次探索)た後、サブブロックSB0 〜SB3 の各々の動きベクトルmv0 〜mv3 を求めている(二次探索)ため、つまり、最初に大きなブロック(マクロブロック)をサーチ(一次探索)した後、小さなブロック(サブブロック)をサーチ(二次探索)しているため、変更前と同様に、最初のサーチの段階で多くの画素値を対象にして広範囲に平均化された状態(低周波成分に相当する要素)を参照した残差評価値を得ることができる。このため、特に小さなブロックにおける間違った極小解に陥る可能性を緩和できる。したがって、最近傍探索法などの探索アルゴリズムの欠点を克服でき、そのアルゴリズムの利点(少ない計算量、高速性)を最大限に活用することができるという格別有益なメリットを得られる。
また、一次探索の最大反復数(所定の上限反復数“8”)と二次探索の最大反復数(“7”)を足し合わせたものが、NNS関数における通常の最大反復数(“14”)になるため、この変形例におけるトータルの計算量も、一次探索の計算量と二次探索の計算量を足しても2倍にはならない。また、最初に大きなブロック(マクロブロック)をサーチ(一次探索)した後、小さなブロック(サブブロック)をサーチ(二次探索)しているため、小さな動きに対してはもちろんのこと、誤差や偏差が増える性質がある大きな動きに対しても、計算量を倍増することなく、統計的にみてほぼ適切な分割モードの選択を行うことができる。
なお、このような変更例において、必要であれば、たとえば、ソフトウェア処理の場合で処理時間の不足が見込まれるようなときには、二次探索をスキップし、一次探索で求められた1個の動きベクトルfvの出力と、大きな分割モードの選択を行うようにして、時間の調整をしてもよい。
また、実施形態及び変形例について、以下のようにしてもよい。
(a)サブブロックのサイズ、個数、形状は任意である。また、分割方法に階層関係があれば同様に適用できる。例えば、H.264では「16×16」を分割した「8×8」をさらに「4×8」、「8×4」、「4×4」に分割することができ、階層構造が二重になっているが、このいずれかの階層間で、または両方の階層間で行うことができる。
(b)残差評価値はSADの代わりにSSD(sum of squared difference:差分二乗和)等であってもよい。サブブロック評価値の集まりからブロック評価値を計算可能であれば、全く同様に適用できる。また、動きベクトルの符号割り当てコストを評価値に加えてもよい。
(c)動きベクトルの等価判別は、完全等価のみならず、各成分の差分絶対値が所定値以内などの近似等価によって行ってもよい。
(d)探索アルゴリズムは、最近傍探索法だけでなく、たとえば、Nステップ探索法や対数探索法又は階層探索法などの座標毎の誤差の総和に基づく残差評価値の比較に従って探索範囲を限定する他の探索アルゴリズムを用いてもよい。
動き補償予測ブロックの種類を示す図である。 本実施形態の便宜的な選択対象となる二つの動き補償予測ブロックを示す図である。 動き補償予測符号化装置のブロック図である。 元画像のブロック位置(座標)とブロックサイズを説明する図である。 参照画像に与える探索中心のオフセットを示す図である。 最近傍探索処理(NNS関数)のフローチャートを示す図である。 残差評価値演算処理のサブルーチンフローを示す図である。 残差評価値演算の概念図である。 動き推定部19の概念的なブロック図である。 動き推定部19の動作を説明するための概念図(1/2)である。 動き推定部19の動作を説明するための概念図(2/2)である。 動き推定部19の動作フローチャートを示す図である。 一次探索処理の動作フローチャートを示す図である。 二次探索処理の動作フローチャートを示す図である。 改良されたNNS関数処理の要部フローチャートを示す図である。 図9の動き推定部19の変形例を示す概念的なブロック図である。 変更された動き推定部19′の動作フローチャートを示す図である。 変更された動き推定部19′及び変更されたフローチャート(図17)の動作概念図である。 動き補償予測符号化の簡略化した概念図である。 動き補償予測符号化における被符号化画像生成の概念図である。 動きの遅い画像と速い画像にそれぞれ大きなブロックと小さなブロックを適用した概念図である。
符号の説明
S30 ステップ(第一動きベクトル演算工程)
S31 ステップ(第一判定工程)
S33 ステップ(第一選択工程)
S34 ステップ(第二動きベクトル演算工程)
S35 ステップ(第二判定工程)
S37 ステップ(第二選択工程)
S38 ステップ(第三選択工程)
SB0 〜SB3 サブブロック(第二ブロック)
MB マクロブロック(第一ブロック)
10 動き補償予測符号化装置
25 一次探索部(第一動きベクトル演算手段)
26 極小解収束判定部(第一判定手段)
27 第一動きベクトル出力部(第一選択手段)
28 二次探索部(第二動きベクトル演算手段)
29 等価判定部(第二判定手段)
30 第二動きベクトル出力部(第二選択手段)
31 第三動きベクトル出力部(第三選択手段)

Claims (6)

  1. 探索アルゴリズムの第1の上限反復数以下で第一ブロックの動きベクトルを演算する第一動きベクトル演算手段と、
    前記第一動きベクトル演算手段で演算された動きベクトルが前記探索アルゴリズムにおける評価値が極小解に収束したときのものであるか否かを判定する第一判定手段と、
    前記第一判定手段の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第一選択手段と、
    前記第一判定手段の判定結果が否定の場合に探索アルゴリズムの第2の上限反復数以下で前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する第二動きベクトル演算手段と、
    前記第二動きベクトル演算手段で演算された第二ブロックの各々の動きベクトルの互いの差が所定の範囲に収まっているか否かを判定する第二判定手段と、
    前記第二判定手段の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第二選択手段と、
    前記第二判定手段の判定結果が否定の場合に前記第二ブロックを動き補償予測ブロックとして選択する第三選択手段と
    を備え、
    前記第一乃至第三選択手段の何れかによって選ばれた動き補償予測ブロックを用いて符号化を行うことを特徴とする動き補償予測符号化装置。
  2. 前記探索アルゴリズムは、最近傍探索法、Nステップ探索法、対数探索法又は階層探索法であることを特徴とする請求項1に記載の動き補償予測符号化装置。
  3. 前記第二動きベクトル演算手段は、前記第一動きベクトル演算手段の反復がN回で終わったとき、N+1回から反復を開始するとともに、その反復の初期値として、前記第一動きベクトル演算手段のN反復で得られた中間値を使用することを特徴とする請求項1又は請求項2いずれかに記載の動き補償予測符号化装置。
  4. 探索アルゴリズムの第1の上限反復数以下で第一ブロックの動きベクトルを演算する第一動きベクトル演算工程と、
    前記第一動きベクトル演算工程で演算された動きベクトルが前記探索アルゴリズムにおける評価値が極小解に収束したときのものであるか否かを判定する第一判定工程と、
    前記第一判定工程の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第一選択工程と、
    前記第一判定工程の判定結果が否定の場合に探索アルゴリズムの第2の上限反復数以下で前記第一ブロックの分割ブロックに相当する第二ブロックの各々の動きベクトルを演算する第二動きベクトル演算工程と、
    前記第二動きベクトル演算工程で演算された第二ブロックの各々の動きベクトルの互いの差が所定の範囲に収まっているか否かを判定する第二判定工程と、
    前記第二判定工程の判定結果が肯定の場合に前記第一ブロックを動き補償予測ブロックとして選択する第二選択工程と、
    前記第二判定工程の判定結果が否定の場合に前記第二ブロックを動き補償予測ブロックとして選択する第三選択工程と
    を含み、
    前記第一乃至第三選択工程の何れかによって選ばれた動き補償予測ブロックを用いて符号化を行うことを特徴とする動き補償予測符号化方法。
  5. 前記探索アルゴリズムは、最近傍探索法、Nステップ探索法、対数探索法又は階層探索法であることを特徴とする請求項4に記載の動き補償予測符号化方法。
  6. 前記第二動きベクトル演算工程は、前記第一動きベクトル演算工程の反復がN回で終わったとき、N+1回から反復を開始するとともに、その反復の初期値として、前記第一動きベクトル演算工程のN反復で得られた中間値を使用することを特徴とする請求項4又は請求項5いずれかに記載の動き補償予測符号化方法。
JP2004374255A 2004-12-24 2004-12-24 動き補償予測符号化装置及び動き補償予測符号化方法 Expired - Fee Related JP4547668B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004374255A JP4547668B2 (ja) 2004-12-24 2004-12-24 動き補償予測符号化装置及び動き補償予測符号化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004374255A JP4547668B2 (ja) 2004-12-24 2004-12-24 動き補償予測符号化装置及び動き補償予測符号化方法

Publications (2)

Publication Number Publication Date
JP2006180426A JP2006180426A (ja) 2006-07-06
JP4547668B2 true JP4547668B2 (ja) 2010-09-22

Family

ID=36734071

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004374255A Expired - Fee Related JP4547668B2 (ja) 2004-12-24 2004-12-24 動き補償予測符号化装置及び動き補償予測符号化方法

Country Status (1)

Country Link
JP (1) JP4547668B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008061162A (ja) * 2006-09-04 2008-03-13 Fujitsu Ltd 動きベクトル探索装置および動きベクトル探索方法
KR101517233B1 (ko) 2008-08-12 2015-05-15 엘지전자 주식회사 움직임 추정을 이용한 잡음 제거장치
US8150902B2 (en) * 2009-06-19 2012-04-03 Singular Computing Llc Processing with compact arithmetic processing element
JP7049499B1 (ja) * 2021-03-04 2022-04-06 株式会社Cygames コンテンツ動画再生プログラム、コンテンツ動画再生装置、コンテンツ動画再生方法、コンテンツ動画データ生成プログラム、及びコンテンツ動画データ生成装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1169358A (ja) * 1997-07-30 1999-03-09 Lg Semicon Co Ltd 動画像の動きベクトル予測方法
JP2001078197A (ja) * 1999-09-03 2001-03-23 Canon Inc 画像符号化装置、画像符号化方法及び記憶媒体
JP2003087799A (ja) * 2001-09-17 2003-03-20 Fujitsu Ltd 追跡型動きベクトル探索方法及び装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1169358A (ja) * 1997-07-30 1999-03-09 Lg Semicon Co Ltd 動画像の動きベクトル予測方法
JP2001078197A (ja) * 1999-09-03 2001-03-23 Canon Inc 画像符号化装置、画像符号化方法及び記憶媒体
JP2003087799A (ja) * 2001-09-17 2003-03-20 Fujitsu Ltd 追跡型動きベクトル探索方法及び装置

Also Published As

Publication number Publication date
JP2006180426A (ja) 2006-07-06

Similar Documents

Publication Publication Date Title
JP5785285B2 (ja) 動き予測検索範囲及び拡張動きベクトルの範囲の動的選択
KR100803611B1 (ko) 영상의 부호화, 복호화 방법 및 장치
JP4528441B2 (ja) ブロック整合法及び統合投射法を用いた階層的動き評価処理及び装置
US6542642B2 (en) Image coding process and motion detecting process using bidirectional prediction
JP4735375B2 (ja) 画像処理装置及び動画像符号化方法。
JP4523023B2 (ja) 画像符号化装置および方法
CN101326550A (zh) 利用预测指导的抽取搜索的运动估计
CN1262496A (zh) 使用正交变换域中的块匹配进行运动估测的方法和装置
JP6636615B2 (ja) 動きベクトル場の符号化方法、復号方法、符号化装置、および復号装置
US20050276330A1 (en) Method and apparatus for sub-pixel motion estimation which reduces bit precision
KR100843418B1 (ko) 화상 부호화 장치 및 화상 부호화 방법
US20120263239A1 (en) Method and apparatus for estimating and compensating spatiotemporal motion image
CN101888546B (zh) 一种运动估计的方法及装置
JP2009188996A (ja) 動画像コーデック装置及びその方法
JP2008227670A (ja) 画像符号化装置
JP5441803B2 (ja) 動きベクトル決定装置及び動きベクトル決定方法、コンピュータプログラム
JP2007189276A (ja) 画像圧縮装置及び画像圧縮プログラム
KR20070033345A (ko) 전역 움직임 벡터를 검색하는 방법
CN102362499A (zh) 图像编码装置及图像编码方法
JP5441812B2 (ja) 動画像符号化装置、及びその制御方法
JP4957780B2 (ja) 動き補償予測符号化装置、動き補償予測符号化方法及びプログラム
JP4547668B2 (ja) 動き補償予測符号化装置及び動き補償予測符号化方法
JP4898415B2 (ja) 動画像符号化装置及び動画像符号化方法
JP4438949B2 (ja) 動き補償予測符号化装置、動き補償予測符号化方法及びプログラム
KR100987581B1 (ko) 고속 움직임 추정을 위한 부분 블록정합 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071211

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20091020

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091028

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091216

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100319

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100426

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100611

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100624

R150 Certificate of patent or registration of utility model

Ref document number: 4547668

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130716

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees