以下に図面を参照して、本発明にかかる動画処理装置、動画処理方法および動画処理プログラムの実施の形態を詳細に説明する。
(動画処理方法の一実施例)
図1は、実施の形態にかかる動画処理方法の一実施例を示す説明図である。図1において、動画処理装置100は、階層型の動き検出を行うコンピュータである。ここで、階層型の動き検出とは、動き検出処理全体を複数の段階に分け、前の段階ほど、画像、参照画像を縮小した画像に対して動き検出処理を行い、二段階目以降では、前段で検出した動きベクトルから特定される参照画像上の探索範囲について動き検出処理を行う手法である。
また、動き検出処理とは、対象画像から分割された元ブロックと類似するブロックを参照画像から探索し、元ブロックとの空間的な位置の差を動きベクトルとして出力する処理である。対象画像とは、動画像である一連のフレームのうちの処理対象となる対象フレームの画像である。対象画像は、対象フレームの原画像であってもよく、また、対象フレームの原画像を縮小した画像であってもよい。
参照画像とは、一連のフレームのうちの対象画像から分割されたブロックと類似するブロックを探索する参照フレームの画像である。ブロックとは、対象画像や参照画像を、例えば、8×8画素や16×16画素などの単位で区切って分割した画像であり、対象画像においては、いわゆるマクロブロックや、ブロックパーティションなどのフレーム間予測の実施単位である。
具体的には、例えば、動画処理装置100は、1段階目の動き検出処理において、所定の縮小率で対象画像を縮小した画像と参照画像を縮小した画像とを用いて、動きベクトルを検出する。より具体的には、例えば、動画処理装置100は、動きベクトルの候補となる候補ベクトルごとに、候補ベクトルに対応する参照ブロックと元ブロックとの違いを示す評価値を算出する。そして、動画処理装置100は、例えば、算出した評価値が最小となる候補ベクトルを動きベクトルとして出力する。そして、動画処理装置100は、2段階目の動き検出処理において、対象画像と参照画像を用いて、1段階目の動き検出結果である動きベクトルから特定される対象画像上の点を中心とした探索範囲について動きベクトルを再探索する。
評価値は、例えば、元ブロックと参照ブロックとの対応する画素間の差分を表す値を累積加算することにより算出される。評価値は、元ブロックと参照ブロックとの類似度を判断する指標となる。画素間の差分を表す値は、例えば、画素間の画素値の差の絶対値である。画素値は、画素が示す色情報であり、例えば、輝度成分値、青色色差成分値、赤色色差成分値などの成分値であってもよく、また、赤成分値、緑成分値、青成分値などの成分値であってもよい。
評価値は、具体的には、例えば、SAD(Sum of Absolute Difference)やSATD(Sum of Absolute Transformed Difference)やSSD(Sum of Squared Difference)である。また、各参照ブロックの評価値の算出処理(累積加算演算)は、例えば、画素間の差分を表す値が累積加算される過程において、その累積加算値が、算出済みの他の参照ブロックの評価値よりも大きくなった場合、その後の累積加算過程を続行しても、その評価値が元ブロックの中で最良の評価値を示すことはないので、評価値の算出処理は中断される。
ここで、階層型の動き検出におけるk段階目(k:自然数)の動き検出結果である動きベクトルで示される領域と、(k+1)段階目の動き検出処理で探索対象となる参照ブロックとは相関性が高い。このため、k段階目の動き検出処理の評価値導出における累積加算値の変化と、(k+1)段階目の動き検出処理の評価値導出における累積加算値の変化は、画像の縮小率分を補正すれば、ほぼ同じような変化を示す。
そこで、本実施の形態では、動画処理装置100は、1段階目の動き検出処理において画素間の差分を表す値を累積加算する過程を区切って分割された区間同士の増分値を比較する。そして、動画処理装置100は、比較した比較結果に基づいて、2段階目の動き検出処理において、より早い段階で累積加算演算を打ち切れる可能性が高い累積加算順序を決定する。以下、動画処理装置100の動画処理例について説明する。
(1)動画処理装置100は、対象画像を縮小した画像から分割された第1ブロックと、参照画像を縮小した画像上の探索範囲内の参照ブロックとの対応する画素間の差分を表す値を所定の順序で累積加算することにより、参照ブロックごとの評価値を算出する。所定の順序は、例えば、ラスタスキャン順である。
(2)動画処理装置100は、参照ブロックの評価値の算出時に画素間の差分を表す値が累積加算される過程を区切って分割された区間に対応して、当該区間における画素間の差分を表す値の増分値を記録する。ここで、参照ブロックの評価値の算出時に画素間の差分を表す値を累積加算する1回の処理を「1処理ステップ」とする。
この場合、動画処理装置100は、例えば、参照ブロックの評価値が算出されるまでの総処理ステップ数を区切って、画素間の差分を表す値を累積加算する過程を複数の区間に分割する。一例として2分割する場合を例に挙げると、動画処理装置100は、画素間の差分を表す値を累積加算する過程を区間S1と区間S2とに分割する。
そして、動画処理装置100は、区間S1における画素間の差分を表す値の増分値を記録する。また、動画処理装置100は、区間S2における画素間の差分を表す値の増分値を記録する。ただし、区間S2(または、区間S1)における増分値は、参照ブロックの評価値から区間S1(または、区間S2)における増分値を減算することにより求めることにしてもよい。
(3)動画処理装置100は、算出した参照ブロックごとの評価値に基づいて、第1ブロックの第1動きベクトルを検出する。具体的には、例えば、動画処理装置100は、算出した評価値が最小となる参照ブロックを示す候補ベクトルを、第1ブロックの第1動きベクトルとして検出する。
(4)動画処理装置100は、記録した記録内容に基づいて、検出した第1動きベクトルが示す参照ブロックの評価値の算出時に画素間の差分を表す値が累積加算された過程における区間同士の増分値を比較する。ここで、グラフ110を用いて、参照ブロックの評価値の算出時に画素間の差分を表す値が累積加算されていく様子について説明する。
グラフ110は、第1動きベクトルが示す参照ブロックの評価値を算出した際の累積加算値の時間変化例を表す。ここで、画素間の差分を表す値を累積加算する過程を区間S1と区間S2とに2分割した場合を想定する。グラフ110では、累積加算値が、中間点までは処理ステップ数の増加に伴って緩やかに大きくなり、中間点を過ぎた辺りから急激に大きくなっている。
この場合、動画処理装置100は、区間S1における増分値x1と区間S2における増分値x2とを比較する(x1<x2)。なお、図1の例では、参照ブロックの評価値は、SADにベクトルによる符号化コストを加算したものとし、累積加算値の初期値は、「0」ではなく、ベクトルによる符号化コストの値そのものとする。
(5)動画処理装置100は、比較した比較結果に基づいて、第1ブロックに対応する対象画像内の第2ブロックと、第1動きベクトルから特定される参照画像上の探索範囲内の参照ブロックとの対応する画素間の差分を表す値を累積加算する累積加算順序を決定する。ここで、2段階目の動き検出処理における参照ブロックは、第1動きベクトルから特定される参照画像上のブロックとその周辺に配置されるブロックであり、1段階目の動き検出処理における参照ブロックとの類似性が高い。
このため、2段階目の動き検出処理における累積加算値の時間変化は、ほとんどの候補ベクトルにおいて、1段階目の動き検出処理と類似する曲線、あるいは、若干上回るような曲線になることが予想される。すなわち、1段階目の動き検出処理の評価値導出における累積加算値の時間変化と、2段階目の動き検出処理の評価値導出における累積加算値の時間変化は、画像の縮小率分や処理ステップ数の違いを補正すれば、ほぼ同じような変化を示す。
グラフ120,130は、第1動きベクトルから特定される参照画像上の探索範囲内の参照ブロックの評価値を算出する際に予測される累積加算値の時間変化を表す。具体的には、グラフ120は、1段階目の動き検出処理と同じ順序で累積加算を行った場合に予測される累積加算値の時間変化を表している。処理ステップ数sBは、最小評価値に達する処理ステップ数である。
また、グラフ130は、1段階目の動き検出処理と逆の順序で累積加算を行った場合に予測される累積加算値の時間変化を表している。処理ステップ数sCは、最小評価値に達する処理ステップ数である。なお、最小評価値とは、算出済みの最小の評価値である。
ここで、各参照ブロック(候補ベクトル)における評価値の累積加算演算は、例えば、累積加算値が最小評価値を上回った時点で中断される。このため、2段階目の動き検出処理では、グラフ120の処理ステップ数sBよりも早い処理ステップ数sCで最小評価値に達するグラフ130のように累積加算を行うほうが望ましい。
すなわち、2段階目の動き検出処理では、1段階目の動き検出処理とは逆の順序で累積加算を行うほうが、より早い処理ステップ数で累積加算演算が打ち切られる可能性が高い。そこで、動画処理装置100は、例えば、区間S2の増分値x2が区間S1の増分値x1より大きい場合は、2段階目の動き検出処理における累積加算順序を、1段階目の動き検出処理における累積加算順序の逆順に決定する。
このように、動画処理装置100によれば、1段階目の動き検出処理において画素間の差分を表す値を累積加算する過程を区切って分割された区間同士の増分値を比較することができる。また、動画処理装置100によれば、比較した比較結果に基づいて、2段階目の動き検出処理において、より早い処理ステップ数で累積加算演算を打ち切れる可能性が高い累積加算順序を決定することができる。
これにより、2段階目の動き検出処理における累積加算演算をより早い処理ステップ数で打ち切れる確率を高めて動き検出にかかる演算量を削減することができ、動き検出にかかる動画処理装置100の処理時間および消費電力を削減することができる。
(コンピュータシステム200のハードウェア構成例)
つぎに、動画処理装置100が適用されるコンピュータシステム200のハードウェア構成例について説明する。コンピュータシステム200は、例えば、動画像を記録・再生する機能を有するシステムであり、具体的には、例えば、パーソナル・コンピュータ、テレビジョン、レコーダ、スマートフォン、ビデオカメラ、デジタルカメラ、携帯電話、スマートフォンなどである。
図2は、コンピュータシステム200のハードウェア構成例を示すブロック図である。図2において、コンピュータシステム200は、CPU(Central Processing Unit)201と、メモリ202と、I/F(Interface)203と、を有する。また、各構成部はバス210によってそれぞれ接続されている。
ここで、CPU201は、コンピュータシステム200の全体の制御を司る。メモリ202は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有している。より具体的には、例えば、フラッシュROMがOSやファームウェアなどのプログラムを記憶し、ROMがアプリケーションプログラムを記憶し、RAMがCPU201のワークエリアとして使用される。メモリ202に記憶されているプログラムは、CPU201にロードされることで、コーディングされている処理をCPU201に実行させることになる。
I/F203は、他の装置からのデータの入出力を制御する。具体的には、例えば、I/F203は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークに接続され、このネットワークを介して他の装置に接続される。そして、I/F203は、ネットワークと内部のインターフェースを司り、他の装置からのデータの入出力を制御する。なお、コンピュータシステム200は、上述した構成部のほかに、例えば、磁気ディスクドライブ、磁気ディスク、ディスプレイ、キーボード、マウス、イメージセンサなどを有することにしてもよい。アクセラレータ204は、CPU動画像処理の一部を実現するハードウェアを備えている。
(動画処理装置100の機能的構成例)
図3は、動画処理装置100の機能的構成例を示すブロック図である。図3において、動画処理装置100は、入力部301と、第1の縮小部302と、第2の縮小部303と、第1の検出部304と、決定部305と、第2の検出部306と、処理部307と、出力部308と、を含む構成である。具体的には、例えば、各機能部は、論理積回路であるAND、否定論理回路であるINVERTER、論理和回路であるOR、論理和否定回路であるNORや、ラッチ回路であるFF(Flip Flop)などの素子によって形成されてもよい。また、各機能部は、例えば、Verilog−HDL(Hardware Description Language)などの記述によって機能定義し、その記述を論理合成してFPGA(Field Programmable Gate Array)によって実現してもよい。また、各機能部は、例えば、図2に示したメモリ202に記憶されたプログラムをCPU201に実行させることにより、または、アクセラレータ204により、またはCPU201とアクセラレータ204とで処理を分担し、全体で、その機能を実現することにしてもよい。
入力部301は、対象画像OPの入力を受け付ける。対象画像OPは、動画像である一連のフレームのうちの処理対象となる対象フレームの画像である。対象画像OPは、例えば、対象フレームの原画像であってもよく、また、対象フレームの原画像を縮小した画像であってもよい。具体的には、例えば、入力部301は、メモリ202に対するデータの入出力を制御するメモリコントローラ(不図示)を介して、メモリ202に記憶された対象画像OPの入力を受け付ける。
また、入力部301は、参照画像RPの入力を受け付ける。参照画像RPは、一連のフレームのうちの対象画像OPから分割されたブロックと類似するブロックを探索する参照フレームの画像である。参照画像RPは、例えば、参照フレームの復号画像(例えば、局所復号画像)である。具体的には、例えば、入力部301は、メモリコントローラ(不図示)を介して、メモリ202に記憶された参照画像の入力を受け付ける。
第1の縮小部302は、所定の縮小率αで対象画像OPを縮小する。具体的には、例えば、縮小率αが「α=0.5」の場合、第1の縮小部302は、対象画像OPを水平垂直両方で半分にサブサンプリングして対象画像OPの縮小画像を生成する。
また、第2の縮小部303は、縮小率αで参照画像RPを縮小する。具体的には、例えば、縮小率αが「α=0.5」の場合、第2の縮小部303は、参照画像RPを水平垂直両方で半分にサブサンプリングして参照画像RPの縮小画像を生成する。
なお、ここでは、第1の縮小部302と第2の縮小部303とを別々に設ける場合を例に挙げて説明したが、これに限らない。例えば、一つの縮小部が、対象画像OPおよび参照画像RPを時分割処理することにより、対象画像OPの縮小画像および参照画像RPの縮小画像を生成することにしてもよい。
また、ここではサブサンプリングによる縮小画像生成方法を示したが、縮小画像の生成はこれに限らない。任意の縮小画像生成方法を用いることができる。
第1の検出部304は、対象画像OPの縮小画像と参照画像RPの縮小画像とに基づいて、対象画像OPの縮小画像から分割されたブロックの第1動きベクトルV1を検出する。ここで、第1動きベクトルV1は、対象画像OPの縮小画像から分割されたブロックと、参照画像RPの縮小画像上の探索範囲内の参照ブロックとの空間的な位置の差を示すベクトルである。
以下の説明では、対象画像OPの縮小画像から分割されたブロックを「元ブロックb」と表記する場合がある。また、参照画像RPの縮小画像上の探索範囲内の参照ブロックを「参照ブロックrb」と表記する場合がある。また、参照画像RPの縮小画像上の探索範囲は予め指定されている。探索範囲は、例えば、参照画像RPの縮小画像上における元ブロックbの位置を中心として±15画素の範囲などである。
具体的には、例えば、第1の検出部304は、第1の算出部309と、記録部310と、を含む。ここで、第1の算出部309は、参照画像RPの縮小画像上の探索範囲内の参照ブロックrbを1画素精度(あるいは、半画素精度、1/4画素精度など)で順次選択する。そして、第1の算出部309は、元ブロックbと参照ブロックrbとの対応する画素間の差分を表す値を累積加算順序Xで累積加算することにより、参照ブロックrbごとの評価値を算出する。
ここで、累積加算順序Xは、画素間の差分を表す値を累積加算する順序であり、すなわち、どのような順番で元ブロックbから画素を選択するのかを示すものである。累積加算順序Xは、例えば、元ブロックbの左上の画素を始点とし、元ブロックbの右下の画素を終点とするラスタスキャン順である。
以下の説明では、参照ブロックrb(あるいは、後述する参照ブロックRB)の評価値を「評価値SAD」と表記する場合がある。評価値SADは、例えば、元ブロックb内の画素値と参照ブロックrb内の画素値との差の絶対値を合計したものである。また、画素間の画素値の差の絶対値を「絶対値diff」と表記する場合がある。
そして、第1の検出部304は、第1の算出部309によって算出された参照ブロックrbごとの評価値SADに基づいて、元ブロックbの第1動きベクトルV1を検出する。具体的には、例えば、第1の検出部304は、参照画像RPの縮小画像上の探索範囲内の参照ブロックrbのうち評価値SADが最小となる参照ブロックrbに対応する候補ベクトルを第1動きベクトルV1として検出する。
また、記録部310は、第1の算出部309による参照ブロックrbの評価値SADの算出時に絶対値diffが累積加算される過程を区切って分割された区間に対応して、当該区間における絶対値diffの増分値を記録する。具体的には、例えば、記録部310は、参照ブロックrbの評価値SADが算出されるまでの総処理ステップ数を区切って、絶対値diffを累積加算する過程を区間S1〜Snに分割する(n:2以上の自然数)。そして、記録部310は、区間S1〜Snのうちの区間Siに対応して、区間Siにおける絶対値diffの増分値を記録する(i=1,2,…,n)。
決定部305は、参照ブロックRBの評価値SADを算出する際の累積加算順序Yを決定する。ここで、参照ブロックRBは、第1の検出部304によって検出された第1動きベクトルV1から特定される参照画像RP上の探索範囲内のブロックである。参照画像RP上の探索範囲は、例えば、縮小率αに応じて第1動きベクトルV1をスケーリングしたベクトルが示す参照画像RP上の点を中心とした±15画素程度の範囲である。また、累積加算順序Yは、元ブロックbに対応する対象画像OP上の元ブロックBと、参照ブロックRBとの対応する画素間の絶対値diffを累積加算して参照ブロックRBの評価値SADを算出する際の順序である。
具体的には、例えば、決定部305は、比較部311を含む。ここで、比較部311は、第1動きベクトルV1が示す参照ブロックrbの評価値SADの算出時に絶対値diffが累積加算された過程における区間同士の増分値を比較する。決定部305は、比較部311によって比較された比較結果に基づいて、参照ブロックRBの評価値SADを算出する際の累積加算順序Yを決定する。なお、決定部305の具体的な処理内容については、図4および図5を用いて後述する。
第2の検出部306は、対象画像OPと参照画像RPとに基づいて、対象画像OPから分割された元ブロックBの第2動きベクトルV2を検出する。ここで、第2動きベクトルV2は、対象画像OPから分割された元ブロックBと、第1動きベクトルV1から特定される参照画像RPの探索範囲内の参照ブロックRBとの空間的な位置の差を示すベクトルである。
具体的には、例えば、第2の検出部306は、第2の算出部312を含む。ここで、第2の算出部312は、参照画像RP上の探索範囲内の参照ブロックRBを1画素精度(あるいは、半画素精度、1/4画素精度など)で順次選択する。そして、第2の算出部312は、決定部305によって決定された累積加算順序Yに従って、元ブロックBと参照ブロックRBとの対応する画素間の絶対値diffを累積加算することにより、参照ブロックRBごとの評価値SADを算出する。
そして、第2の検出部306は、算出した参照ブロックRBごとの評価値SADに基づいて、元ブロックBの第2動きベクトルV2を検出する。具体的には、例えば、第2の検出部306は、参照画像RP上の探索範囲内の参照ブロックRBのうち評価値SADが最小となる参照ブロックRBに対応する候補ベクトルを第2動きベクトルV2として検出する。
処理部307は、検出された第2動きベクトルV2に基づいて、所定の処理を実行する。具体的には、例えば、対象画像OPが符号化対象画像であった場合、処理部307は、元ブロックBと第2動きベクトルV2が示す参照画像RP上の参照ブロックRBとに基づいて、フレーム間予測画像を生成することにしてもよい。さらに、処理部307は、対象画像OP(元ブロックB)とフレーム間予測画像との差分画像を符号化することにしてもよい。
また、例えば、対象画像OPが手ぶれ補正対象画像であった場合、処理部307は、検出された第2動きベクトルV2に基づいて、対象画像OPと参照画像RPとのずれ量を検出することにしてもよい。第2動きベクトルV2は、例えば、第2の検出部306によって検出された対象画像OP上の特徴部分の元ブロックBについての動きベクトルである。
ここで、特徴部分の元ブロックBは、例えば、対象画像OP上のエッジ部分の元ブロックBである。そして、処理部307は、対象画像OP上の特徴部分の元ブロックBごとの第2動きベクトルV2の平均値を算出することにより、対象画像OPと参照画像RPとのずれ量を検出することにしてもよい。
出力部308は、処理部307によって実行された処理の処理結果を出力する。具体的には、例えば、出力部308は、処理部307によって生成されたフレーム間予測画像を出力することにしてもよく、また、処理部307によって符号化されたビットストリームを出力することにしてもよい。また、例えば、出力部308は、処理部307によって検出された対象画像OPと参照画像RPとのずれ量を出力することにしてもよい。
なお、動画処理装置100は、処理部307を有さないことにしてもよい。この場合、出力部308は、例えば、処理部307と同等の機能を実現する他の装置に、第2の検出部306によって検出された元ブロックBの第2動きベクトルV2を出力することにしてもよい。
(決定部305の具体的な処理内容)
つぎに、決定部305の具体的な処理内容について説明する。
<第1の決定処理>
ここでは、まず、参照ブロックrbの評価値SADが算出されるまでの総処理ステップ数を2等分(n=2)に区切って、絶対値diffを累積加算する過程を区間S1と区間S2とに分割する場合を想定する。
この場合、記録部310は、例えば、区間S1における絶対値diffの増分値と、区間S2における絶対値diffの増分値とを記録する。そして、比較部311は、第1動きベクトルV1が示す参照ブロックrbの評価値SADの算出時に絶対値diffが累積加算された過程における区間S1の増分値と区間S2の増分値とを比較する。
ここで、区間S1の増分値が区間S2の増分値以上の場合は、参照ブロックRBの評価値SADの算出時に、累積加算順序Xとは逆の順序で絶対値diffを累積加算するよりも累積加算順序Xと同じ順序で絶対値diffを累積加算するほうが、より早い処理ステップ数で最小評価値minSADに達する可能性が高い。
このため、決定部305は、区間S1の増分値が区間S2の増分値以上の場合は、累積加算順序Yを、累積加算順序Xと同順に決定する。なお、最小評価値minSADは、参照ブロックRBの評価値SADの算出時において、算出済みの他の参照ブロックRBの最小の評価値SADである。
一方、区間S1の増分値が区間S2の増分値未満の場合は、参照ブロックRBの評価値SADの算出時に、累積加算順序Xと同じ順序で絶対値diffを累積加算するよりも累積加算順序Xと逆の順序で絶対値diffを累積加算するほうが、より早い処理ステップ数で最小評価値minSADに達する可能性が高い。このため、決定部305は、区間S1の増分値が区間S2の増分値未満の場合は、累積加算順序Yを、累積加算順序Xと逆順に決定する。
一例として、累積加算順序Xを、元ブロックbの左上の画素を始点とし、元ブロックbの右下の画素を終点とするラスタスキャン順であるとする。この場合、累積加算順序Xの逆順は、元ブロックbの右下の画素を始点とし、元ブロックbの左上の画素を終点とするラスタスキャン順となる。
<第2の決定処理>
つぎに、参照ブロックrbの評価値SADが算出されるまでの総処理ステップ数を3分割(n=3)して、絶対値diffを累積加算する過程を区間S1、区間S2および区間S3に分割する場合を想定する。
図4は、累積加算値の時間変化を示す説明図(その1)である。図4において、グラフ410は、第1動きベクトルV1が示す参照ブロックrbの評価値SADの算出時における絶対値diffの累積加算値の時間変化例を表す。また、絶対値diffが累積加算される過程が区間S1と区間S2と区間S3とに分割されている。グラフ410では、区間S1に比べて区間S3での絶対値diffの累積加算値の上昇度合いが大きくなっている。なお、区間S1と区間S3は同じ間隔である。
この場合、記録部310は、例えば、区間S1における絶対値diffの増分値と、区間S3における絶対値diffの増分値とを記録する。そして、比較部311は、第1動きベクトルV1が示す参照ブロックrbの評価値SADの算出時に絶対値diffが累積加算された過程における区間S1の増分値(図4中、増分値x1)と区間S3の増分値(図4中、増分値x2)とを比較する。
ここで、グラフ420,430は、第1動きベクトルV1から特定される参照画像RP上の探索範囲内の参照ブロックRBの評価値SADを算出する際に予測される絶対値diffの累積加算値の時間変化例を表す。具体的には、グラフ420は、累積加算順序Xと同じ順序で絶対値diffの累積加算を行った場合に予測される累積加算値の時間変化を表している。処理ステップ数sBは、予測される最小評価値minSADに達する処理ステップ数である。
また、グラフ430は、累積加算順序Xと逆の順序で絶対値diffの累積加算を行った場合に予測される累積加算値の時間変化を表している。処理ステップ数sCは、予測される最小評価値minSADに達する処理ステップ数である。グラフ420とグラフ430とを比較すると、グラフ430のほうが早い処理ステップ数で最小評価値minSADに達している。
すなわち、区間S1の増分値が区間S3の増分値未満の場合は、参照ブロックRBの評価値SADの算出時に、累積加算順序Xと同じ順序で絶対値diffを累積加算するよりも累積加算順序Xと逆の順序で絶対値diffを累積加算するほうが、より早い処理ステップ数で最小評価値minSADに達する可能性が高い。このため、決定部305は、区間S1の増分値が区間S3の増分値未満の場合は、累積加算順序Yを、累積加算順序Xと逆順に決定することにしてもよい。
一方、区間S1の増分値が区間S3の増分値以上の場合は、参照ブロックRBの評価値SADの算出時に、累積加算順序Xとは逆の順序で絶対値diffを累積加算するよりも累積加算順序Xと同じ順序で絶対値diffを累積加算するほうが、より早い処理ステップ数で最小評価値minSADに達する可能性が高い。このため、決定部305は、区間S1の増分値が区間S3の増分値以上の場合は、累積加算順序Yを、累積加算順序Xと同順に決定することにしてもよい。
<第3、第4および第5の決定処理>
つぎに、参照ブロックrbの評価値SADが算出されるまでの総処理ステップ数をn分割して、絶対値diffを累積加算する過程を区間S1〜区間Snに分割する場合を想定する。
図5は、累積加算値の時間変化を示す説明図(その2)である。図5において、グラフ510は、第1動きベクトルV1が示す参照ブロックrbの評価値SADの算出時における絶対値diffの累積加算値の時間変化例を表す。また、絶対値diffが累積加算される過程が区間S1と区間S2と区間S3とに等分割されている。
この場合、記録部310は、例えば、区間S1における絶対値diffの増分値と、区間S2における絶対値diffの増分値と、区間S3における絶対値diffの増分値とを記録する。そして、比較部311は、第1動きベクトルV1が示す参照ブロックrbの評価値SADの算出時に絶対値diffが累積加算された過程における区間同士の増分値を比較する。
決定部305は、比較部311によって比較された比較結果に基づいて、区間S1〜S3のうちの増分値が最大の区間および増分値が最小の区間を特定する。図5の例では、区間S1〜S3のうち、区間S1の増分値(図5中、増分値x1)が最小となり、区間S3の増分値(図5中、増分値x3)が最大となる。
ここで、グラフ520,530,540,550は、第1動きベクトルV1から特定される参照画像RP上の探索範囲内の参照ブロックRBの評価値SADを算出する際に予測される絶対値diffの累積加算値の時間変化例を表す。具体的には、グラフ520は、累積加算順序Xと同じ順序で絶対値diffの累積加算を行った場合に予測される累積加算値の時間変化を表している。処理ステップ数sBは、予測される最小評価値minSADに達する処理ステップ数である。
・第3の決定処理
グラフ530は、区間S1〜S3のうち増分値が最大となる区間S3に対応する部分の絶対値diffを最初に累積加算した場合に予測される累積加算値の時間変化を表している。処理ステップ数sCは、予測される最小評価値minSADに達する処理ステップ数である。
ここで、グラフ520とグラフ530とを比較すると、グラフ530のほうが早い処理ステップ数で最小評価値minSADに達している。すなわち、区間S1〜S3のうち増分値が最大となる区間S3に対応する部分の絶対値diffを最初に累積加算した場合は、より早い処理ステップ数で最小評価値minSADに達する可能性が高い。
このため、決定部305は、累積加算順序Yを、区間S1〜Snのうちの増分値が最大となる区間に対応する部分の絶対値diffを最初に累積加算する順序に決定することにしてもよい。図5の例では、決定部305は、累積加算順序Yを、区間S3に対応する部分の絶対値diffを最初に累積加算する順序に決定する。
一例として、ブロックを8×8画素単位のマクロブロックとし、ブロック内の画素群を画素1〜画素64(左上を始点とするラスタスキャン順に番号を付した場合)とする。この場合、例えば、区間S1に対応する部分の画素は「画素1〜画素21」となり、区間S2に対応する部分の画素は「画素22〜画素44」となり、区間S3に対応する部分の画素は「画素45〜画素64」となる。
このため、決定部305は、累積加算順序Yを、ブロック(元ブロックB、参照ブロックRB)内の画素45〜画素64の画素間の絶対値diffを最初に累積加算する順序に決定する。なお、区間S3に対応する部分の後は、「区間S1→区間S2」の順に累積加算を行うことにしてもよく、また、「区間S2→区間S1」の順に累積加算を行うことにしてもよい。
・第4の決定処理
また、グラフ540は、区間S1〜S3のうち増分値が最小となる区間S1に対応する部分の絶対値diffを最後に累積加算した場合に予測される累積加算値の時間変化を表している。処理ステップ数sDは、予測される最小評価値minSADに達する処理ステップ数である。
ここで、グラフ520とグラフ540とを比較すると、グラフ540のほうが早い処理ステップ数で最小評価値minSADに達している。すなわち、区間S1〜S3のうち増分値が最小となる区間S1に対応する部分の絶対値diffを最後に累積加算した場合は、より早い処理ステップ数で最小評価値minSADに達する可能性が高い。
このため、決定部305は、累積加算順序Yを、区間S1〜Snのうちの増分値が最小となる区間に対応する部分の絶対値diffを最後に累積加算する順序に決定することにしてもよい。図5の例では、決定部305は、累積加算順序Yを、区間S1に対応する部分の絶対値diffを最後に累積加算する順序に決定する。
上述したブロックを8×8画素単位のマクロブロックとする例では、累積加算順序Yは、ブロック内の画素1〜画素21の画素間の絶対値diffを最後に累積加算する順序となる。なお、区間S1に対応する部分の前は、「区間S2→区間S3」の順に累積加算を行うことにしてもよく、また、「区間S3→区間S2」の順に累積加算を行うことにしてもよい。
・第5の決定処理
また、グラフ550は、区間S3に対応する部分の絶対値diffを最初に累積加算するとともに、区間S1に対応する部分の絶対値diffを最後に累積加算した場合に予測される累積加算値の時間変化を表している。処理ステップ数sEは、予測される最小評価値minSADに達する処理ステップ数である。
ここで、グラフ520とグラフ550とを比較すると、グラフ550のほうが早い処理ステップ数で最小評価値minSADに達している。すなわち、区間S1〜S3のうち、増分値が最大となる区間S3に対応する部分の絶対値diffを最初に累積加算するとともに、増分値が最小となる区間S1に対応する部分の絶対値diffを最後に累積加算した場合は、より早い処理ステップ数で最小評価値minSADに達する可能性が高い。
このため、決定部305は、累積加算順序Yを、区間S1〜Snのうち、増分値が最大となる区間に対応する部分の絶対値diffを最初に累積加算するとともに、増分値が最小となる区間に対応する部分の絶対値diffを最後に累積加算する順序に決定することにしてもよい。
図5の例では、決定部305は、累積加算順序Yを、区間S3に対応する部分の絶対値diffを最初に累積加算するとともに、区間S1に対応する部分の絶対値diffを最後に累積加算する順序に決定する。上述したブロックを8×8画素単位のマクロブロックとする例では、累積加算順序Yは、ブロック内の画素45〜画素64の画素間の絶対値diffを最初に累積加算し、画素1〜画素21の画素間の絶対値diffを最後に累積加算する順序となる。
(動画処理装置100の各種処理手順)
つぎに、動画処理装置100の各種処理手順について説明する。
<第1決定処理手順>
まず、動画処理装置100の第1決定処理手順について説明する。第1決定処理は、参照ブロックrbの評価値SADの算出時に絶対値diffを累積加算する過程を2分割した場合の累積加算順序Yを決定する処理である。
図6は、動画処理装置100の第1決定処理手順の一例を示すフローチャートである。図6のフローチャートにおいて、まず、動画処理装置100は、対象画像OPの縮小画像を生成する(ステップS601)。つぎに、動画処理装置100は、参照画像RPの縮小画像を生成する(ステップS602)。
そして、動画処理装置100は、対象画像OPの縮小画像から元ブロックbを選択する(ステップS603)。つぎに、動画処理装置100は、第1最小評価値算出処理を実行する(ステップS604)。なお、第1最小評価値算出処理の具体的な処理手順については、図7を用いて後述する。
そして、動画処理装置100は、「minSAD−interSAD」が「interSAD」より大きいか否かを判断する(ステップS605)。なお、minSADは、評価値SADの最小評価値である。また、interSADは、後述するチェックポイントに達した時点の絶対値diffの累積加算値であり、区間S1の絶対値diffの増分値に相当する。
ここで、「minSAD−interSAD」が「interSAD」以下の場合(ステップS605:No)、動画処理装置100は、累積加算順序Yを累積加算順序Xと同順に決定する(ステップS606)。一方、「minSAD−interSAD」が「interSAD」より大きい場合(ステップS605:Yes)、動画処理装置100は、累積加算順序Yを累積加算順序Xと逆順に決定する(ステップS607)。
つぎに、動画処理装置100は、元ブロックbと対応付けて、第1動きベクトルV1と累積加算順序情報とを出力する(ステップS608)。なお、第1動きベクトルは、後述する最小評価ベクトルvectorである。また、累積加算順序情報は、累積加算順序Yを表す情報である。そして、動画処理装置100は、対象画像OPの縮小画像から選択していない未選択の元ブロックbがあるか否かを判断する(ステップS609)。
ここで、未選択の元ブロックbがある場合(ステップS609:Yes)、動画処理装置100は、ステップS603に戻って、対象画像OPの縮小画像から未選択の元ブロックbを選択する。一方、未選択の元ブロックbがない場合(ステップS609:No)、動画処理装置100は、本フローチャートによる一連の処理を終了する。
これにより、1段階目の動き検出処理において絶対値diffを累積加算する過程を2分割した区間S1,S2のうち、区間S1の増分値が区間S2の増分値以上の場合は、累積加算順序Yを累積加算順序Xと同順に決定することができる。また、区間S1の増分値が区間S2の増分値未満の場合は、累積加算順序Yを累積加算順序Xと逆順に決定することができる。
つぎに、図6に示したステップS604の第1最小評価値算出処理の具体的な処理手順について説明する。
図7は、第1最小評価値算出処理の具体的処理手順の一例を示すフローチャートである。図7のフローチャートにおいて、まず、動画処理装置100は、最小評価値minSADを「minSAD=+∞」で初期化する(ステップS701)。
つぎに、動画処理装置100は、参照画像RPの縮小画像から探索範囲内の参照ブロックrbを選択する(ステップS702)。そして、動画処理装置100は、参照ブロックrbの評価値SADを算出する第1評価値算出処理を実行する(ステップS703)。なお、第1評価値算出処理の具体的な処理手順については、図8を用いて後述する。
つぎに、動画処理装置100は、参照ブロックrbの評価値SADが最小評価値minSAD未満か否かを判断する(ステップS704)。ここで、参照ブロックrbの評価値SADが最小評価値minSAD以上の場合(ステップS704:No)、動画処理装置100は、ステップS708に移行する。
一方、参照ブロックrbの評価値SADが最小評価値minSAD未満の場合(ステップS704:Yes)、動画処理装置100は、最小評価値minSADを参照ブロックrbの評価値SADに更新する(ステップS705)。つぎに、動画処理装置100は、最小評価ベクトルvectorを現在の候補ベクトルに更新する(ステップS706)。
そして、動画処理装置100は、チェックポイントでの累積加算値interSADを累積加算値tmp_interSADに更新する(ステップS707)。なお、累積加算値tmp_interSADについては、図8を用いて後述する。つぎに、動画処理装置100は、参照画像RPの縮小画像から選択されていない探索範囲内の参照ブロックrbがあるか否かを判断する(ステップS708)。
ここで、未選択の参照ブロックrbがある場合(ステップS708:Yes)、動画処理装置100は、ステップS702に戻って、参照画像RPの縮小画像から探索範囲内の未選択の参照ブロックrbを選択する。一方、未選択の参照ブロックrbがない場合(ステップS708:No)、動画処理装置100は、第1最小評価値算出処理を呼び出したステップに戻る。
これにより、最小評価値minSADに対応する参照ブロックrbの候補ベクトルを第1動きベクトルV1として検出することができる。また、最小評価値minSADの算出時におけるチェックポイントでの累積加算値を記録することができる。
つぎに、図7に示したステップS703の第1評価値算出処理の具体的な処理手順について説明する。
図8は、第1評価値算出処理の具体的処理手順の一例を示すフローチャートである。図8のフローチャートにおいて、まず、動画処理装置100は、評価値SADの算出時に絶対値diffを累積加算する過程を2分割するチェックポイントを特定する(ステップS801)。なお、チェックポイントは、例えば、処理ステップ数(または画素数)によって特定される。
つぎに、動画処理装置100は、評価値SADを「SAD=0」で初期化する(ステップS802)。そして、動画処理装置100は、累積加算順序Xに従って、元ブロックb内の画素を選択する(ステップS803)。つぎに、動画処理装置100は、累積加算順序Xに従って、参照ブロックrb内の画素を選択する(ステップS804)。
そして、動画処理装置100は、選択した画素間の画素値の差の絶対値diffを算出し(ステップS805)、評価値SADに絶対値diffを加算する(ステップS806)。つぎに、動画処理装置100は、現在の処理ステップ数がチェックポイントか否かを判断する(ステップS807)。
ここで、現在の処理ステップ数がチェックポイントではない場合(ステップS807:No)、動画処理装置100は、ステップS809に移行する。一方、現在の処理ステップ数がチェックポイントの場合(ステップS807:Yes)、動画処理装置100は、累積加算値tmp_interSADを評価値SADに更新する(ステップS808)。
そして、動画処理装置100は、元ブロックbから選択されていない未選択の画素があるか否かを判断する(ステップS809)。ここで、未選択の画素がある場合(ステップS809:Yes)、動画処理装置100は、ステップS803に戻って、元ブロックb内の未選択の画素を選択する。一方、未選択の画素がない場合(ステップS809:No)、動画処理装置100は、第1評価値算出処理を呼び出したステップに戻る。
これにより、参照ブロックrbごとの評価値SADを算出するとともに、評価値SADの算出時におけるチェックポイントでの累積加算値(区間S1の絶対値diffの増分値)を記録することができる。
<第2決定処理手順>
つぎに、動画処理装置100の第2決定処理手順について説明する。第2決定処理は、参照ブロックrbの評価値SADの算出時に絶対値diffを累積加算する過程を3分割した場合の累積加算順序Yを決定する処理である。
図9は、動画処理装置100の第2決定処理手順の一例を示すフローチャートである。図9のフローチャートにおいて、まず、動画処理装置100は、対象画像OPの縮小画像を生成する(ステップS901)。つぎに、動画処理装置100は、参照画像RPの縮小画像を生成する(ステップS902)。
そして、動画処理装置100は、対象画像OPの縮小画像から元ブロックbを選択する(ステップS903)。つぎに、動画処理装置100は、第2最小評価値算出処理を実行する(ステップS904)。なお、第2最小評価値算出処理の具体的な処理手順については、図10を用いて後述する。
そして、動画処理装置100は、「minSAD−interSAD2」が「interSAD1」より大きいか否かを判断する(ステップS905)。なお、interSAD1は、後述する第1のチェックポイントに達した時点の絶対値diffの累積加算値であり、区間S1の絶対値diffの増分値に相当する。また、interSAD2は、後述する第2のチェックポイントに達した時点の絶対値diffの累積加算値であり、区間S1の絶対値diffの増分値と区間S2の絶対値diffの増分値とを足し合わせたものに相当する。
ここで、「minSAD−interSAD2」が「interSAD1」以下の場合(ステップS905:No)、動画処理装置100は、累積加算順序Yを累積加算順序Xと同順に決定する(ステップS906)。一方、「minSAD−interSAD2」が「interSAD1」より大きい場合(ステップS905:Yes)、動画処理装置100は、累積加算順序Yを累積加算順序Xと逆順に決定する(ステップS907)。
つぎに、動画処理装置100は、元ブロックbと対応付けて、第1動きベクトルV1と累積加算順序情報とを出力する(ステップS908)。そして、動画処理装置100は、対象画像OPの縮小画像から選択していない未選択の元ブロックbがあるか否かを判断する(ステップS909)。
ここで、未選択の元ブロックbがある場合(ステップS909:Yes)、動画処理装置100は、ステップS903に戻って、対象画像OPの縮小画像から未選択の元ブロックbを選択する。一方、未選択の元ブロックbがない場合(ステップS909:No)、動画処理装置100は、本フローチャートによる一連の処理を終了する。
これにより、1段階目の動き検出処理において絶対値diffを累積加算する過程を3分割した区間S1〜S3のうち、区間S1の増分値が区間S3の増分値未満の場合は、累積加算順序Yを累積加算順序Xと逆順に決定することができる。また、区間S1の増分値が区間S3の増分値以上の場合は、累積加算順序Yを累積加算順序Xと同順に決定することができる。
つぎに、図9に示したステップS904の第2最小評価値算出処理の具体的な処理手順について説明する。
図10は、第2最小評価値算出処理の具体的処理手順の一例を示すフローチャートである。図10のフローチャートにおいて、まず、動画処理装置100は、最小評価値minSADを「minSAD=+∞」で初期化する(ステップS1001)。
つぎに、動画処理装置100は、参照画像RPの縮小画像から探索範囲内の参照ブロックrbを選択する(ステップS1002)。そして、動画処理装置100は、参照ブロックrbの評価値SADを算出する第2評価値算出処理を実行する(ステップS1003)。なお、第2評価値算出処理の具体的な処理手順については、図11を用いて後述する。
つぎに、動画処理装置100は、参照ブロックrbの評価値SADが最小評価値minSAD未満か否かを判断する(ステップS1004)。ここで、参照ブロックrbの評価値SADが最小評価値minSAD以上の場合(ステップS1004:No)、動画処理装置100は、ステップS1009に移行する。
一方、参照ブロックrbの評価値SADが最小評価値minSAD未満の場合(ステップS1004:Yes)、動画処理装置100は、最小評価値minSADを参照ブロックrbの評価値SADに更新する(ステップS1005)。つぎに、動画処理装置100は、最小評価ベクトルvectorを現在の候補ベクトルに更新する(ステップS1006)。
そして、動画処理装置100は、第1のチェックポイントでの累積加算値interSAD1を累積加算値tmp_interSAD1に更新する(ステップS1007)。つぎに、動画処理装置100は、第2のチェックポイントでの累積加算値interSAD2を累積加算値tmp_interSAD2に更新する(ステップS1008)。なお、累積加算値tmp_interSAD1および累積加算値tmp_interSAD2については、図11を用いて後述する。
そして、動画処理装置100は、参照画像RPの縮小画像から選択されていない探索範囲内の参照ブロックrbがあるか否かを判断する(ステップS1009)。ここで、未選択の参照ブロックrbがある場合(ステップS1009:Yes)、動画処理装置100は、ステップS1002に戻って、参照画像RPの縮小画像から探索範囲内の未選択の参照ブロックrbを選択する。一方、未選択の参照ブロックrbがない場合(ステップS1009:No)、動画処理装置100は、第2最小評価値算出処理を呼び出したステップに戻る。
これにより、最小評価値minSADに対応する参照ブロックrbの候補ベクトルを第1動きベクトルV1として検出することができる。また、最小評価値minSADの算出時における第1および第2のチェックポイントでの累積加算値を記録することができる。
つぎに、図10に示したステップS1003の第2評価値算出処理の具体的な処理手順について説明する。
図11は、第2評価値算出処理の具体的処理手順の一例を示すフローチャートである。図11のフローチャートにおいて、まず、動画処理装置100は、評価値SADの算出時に絶対値diffを累積加算する過程を3分割する第1および第2のチェックポイントを特定する(ステップS1101)。
つぎに、動画処理装置100は、評価値SADを「SAD=0」で初期化する(ステップS1102)。そして、動画処理装置100は、累積加算順序Xに従って、元ブロックb内の画素を選択する(ステップS1103)。つぎに、動画処理装置100は、累積加算順序Xに従って、参照ブロックrb内の画素を選択する(ステップS1104)。
そして、動画処理装置100は、選択した画素間の画素値の差の絶対値diffを算出し(ステップS1105)、評価値SADに絶対値diffを加算する(ステップS1106)。つぎに、動画処理装置100は、現在の処理ステップ数が第1のチェックポイントか否かを判断する(ステップS1107)。
ここで、現在の処理ステップ数が第1のチェックポイントではない場合(ステップS1107:No)、動画処理装置100は、ステップS1109に移行する。一方、現在の処理ステップ数が第1のチェックポイントの場合(ステップS1107:Yes)、動画処理装置100は、累積加算値tmp_interSAD1を評価値SADに更新する(ステップS1108)。
つぎに、動画処理装置100は、現在の処理ステップ数が第2のチェックポイントか否かを判断する(ステップS1109)。ここで、現在の処理ステップ数が第2のチェックポイントではない場合(ステップS1109:No)、動画処理装置100は、ステップS1111に移行する。一方、現在の処理ステップ数が第2のチェックポイントの場合(ステップS1109:Yes)、動画処理装置100は、累積加算値tmp_interSAD2を評価値SADに更新する(ステップS1110)。
そして、動画処理装置100は、元ブロックbから選択されていない未選択の画素があるか否かを判断する(ステップS1111)。ここで、未選択の画素がある場合(ステップS1111:Yes)、動画処理装置100は、ステップS1103に戻って、元ブロックb内の未選択の画素を選択する。一方、未選択の画素がない場合(ステップS1111:No)、動画処理装置100は、第2評価値算出処理を呼び出したステップに戻る。
これにより、参照ブロックrbごとの評価値SADを算出するとともに、評価値SADの算出時における第1および第2のチェックポイントの累積加算値を記録することができる。
<第3決定処理手順>
つぎに、動画処理装置100の第3決定処理手順について説明する。第3決定処理は、参照ブロックrbの評価値SADの算出時に絶対値diffを累積加算する過程をn分割した場合の累積加算順序Yを決定する処理である。
図12は、動画処理装置100の第3決定処理手順の一例を示すフローチャートである。図12のフローチャートにおいて、まず、動画処理装置100は、対象画像OPの縮小画像を生成する(ステップS1201)。つぎに、動画処理装置100は、参照画像RPの縮小画像を生成する(ステップS1202)。
そして、動画処理装置100は、対象画像OPの縮小画像から元ブロックbを選択する(ステップS1203)。つぎに、動画処理装置100は、第3最小評価値算出処理を実行する(ステップS1204)。なお、第3最小評価値算出処理の具体的な処理手順については、図13を用いて後述する。
そして、動画処理装置100は、累積加算順序Yを最大増分区間に対応する部分の絶対値diffを最初に累積加算する順序に決定する(ステップS1205)。つぎに、動画処理装置100は、元ブロックbと対応付けて、第1動きベクトルV1と累積加算順序情報とを出力する(ステップS1206)。
そして、動画処理装置100は、対象画像OPの縮小画像から選択していない未選択の元ブロックbがあるか否かを判断する(ステップS1207)。ここで、未選択の元ブロックbがある場合(ステップS1207:Yes)、動画処理装置100は、ステップS1203に戻って、対象画像OPの縮小画像から未選択の元ブロックbを選択する。一方、未選択の元ブロックbがない場合(ステップS1207:No)、動画処理装置100は、本フローチャートによる一連の処理を終了する。
これにより、累積加算順序Yを、1段階目の動き検出処理において絶対値diffを累積加算する過程をn分割した区間S1〜Snのうちの増分値が最大となる最大増分区間に対応する部分を最初に累積加算する順序に決定することができる。
つぎに、図12に示したステップS1204の第3最小評価値算出処理の具体的な処理手順について説明する。
図13は、第3最小評価値算出処理の具体的処理手順の一例を示すフローチャートである。図13のフローチャートにおいて、まず、動画処理装置100は、最小評価値minSADを「minSAD=+∞」で初期化する(ステップS1301)。
つぎに、動画処理装置100は、参照画像RPの縮小画像から探索範囲内の参照ブロックrbを選択する(ステップS1302)。そして、動画処理装置100は、評価値SADを「SAD=0」で初期化する(ステップS1303)。つぎに、動画処理装置100は、直前のチェックポイントの累積加算値を現在の評価値に設定する(ステップS1304)。
つぎに、動画処理装置100は、最大増分maxincを「maxinc=0」で初期化する(ステップS1305)。そして、動画処理装置100は、参照ブロックrbの評価値SADを算出する第3評価値算出処理を実行する(ステップS1306)。なお、第3評価値算出処理の具体的な処理手順については、図14を用いて後述する。
つぎに、動画処理装置100は、参照ブロックrbの評価値SADが最小評価値minSAD未満か否かを判断する(ステップS1307)。ここで、参照ブロックrbの評価値SADが最小評価値minSAD以上の場合(ステップS1307:No)、動画処理装置100は、ステップS1311に移行する。
一方、参照ブロックrbの評価値SADが最小評価値minSAD未満の場合(ステップS1307:Yes)、動画処理装置100は、最小評価値minSADを参照ブロックrbの評価値SADに更新する(ステップS1308)。つぎに、動画処理装置100は、最小評価ベクトルvectorを現在の候補ベクトルに更新する(ステップS1309)。
そして、動画処理装置100は、最大増分区間intervalを区間tmp_intervalに更新する(ステップS1310)。なお、最大増分区間intervalおよび区間tmp_intervalについては、図14を用いて後述する。つぎに、動画処理装置100は、参照画像RPの縮小画像から選択されていない探索範囲内の参照ブロックrbがあるか否かを判断する(ステップS1311)。
ここで、未選択の参照ブロックrbがある場合(ステップS1311:Yes)、動画処理装置100は、ステップS1302に戻って、参照画像RPの縮小画像から探索範囲内の未選択の参照ブロックrbを選択する。一方、未選択の参照ブロックrbがない場合(ステップS1311:No)、動画処理装置100は、第3最小評価値算出処理を呼び出したステップに戻る。
これにより、最小評価値minSADに対応する参照ブロックrbの候補ベクトルを第1動きベクトルV1として検出することができる。また、最小評価値minSADの算出時における最大増分区間を記録することができる。
つぎに、図13に示したステップS1306の第3評価値算出処理の具体的な処理手順について説明する。
図14は、第3評価値算出処理の具体的処理手順の一例を示すフローチャートである。図14のフローチャートにおいて、まず、動画処理装置100は、評価値SADの算出時に絶対値diffを累積加算する過程をn分割するチェックポイントを特定する(ステップS1401)。
そして、動画処理装置100は、累積加算順序Xに従って、元ブロックb内の画素を選択する(ステップS1402)。つぎに、動画処理装置100は、累積加算順序Xに従って、参照ブロックrb内の画素を選択する(ステップS1403)。
そして、動画処理装置100は、選択した画素間の画素値の差の絶対値diffを算出し(ステップS1404)、評価値SADに絶対値diffを加算する(ステップS1405)。つぎに、動画処理装置100は、現在の処理ステップ数がチェックポイントか否かを判断する(ステップS1406)。
ここで、現在の処理ステップ数がチェックポイントではない場合(ステップS1406:No)、動画処理装置100は、ステップS1412に移行する。一方、現在の処理ステップ数がチェックポイントの場合(ステップS1406:Yes)、動画処理装置100は、評価値SADから現在の評価値prevSADを減算することにより増分値incを算出する(ステップS1407)。
つぎに、動画処理装置100は、増分値incが最大増分maxincより大きいか否かを判断する(ステップS1408)。ここで、増分値incが最大増分maxinc以下の場合(ステップS1408:No)、動画処理装置100は、ステップS1411に移行する。
一方、増分値incが最大増分maxincより大きい場合(ステップS1408:Yes)、動画処理装置100は、最大増分maxincを増分値incに更新する(ステップS1409)。そして、動画処理装置100は、現在の区間を区間tmp_intervalとして記録する(ステップS1410)。
つぎに、動画処理装置100は、直前のチェックポイントの累積加算値を現在の評価値prevSADに設定する(ステップS1411)。そして、動画処理装置100は、元ブロックbから選択されていない未選択の画素があるか否かを判断する(ステップS1412)。
ここで、未選択の画素がある場合(ステップS1412:Yes)、動画処理装置100は、ステップS1402に戻って、元ブロックb内の未選択の画素を選択する。一方、未選択の画素がない場合(ステップS1412:No)、動画処理装置100は、第3評価値算出処理を呼び出したステップに戻る。
これにより、参照ブロックrbごとの評価値SADを算出するとともに、評価値SADの算出時における最大増分区間を記録することができる。
<第4決定処理手順>
つぎに、動画処理装置100の第4決定処理手順について説明する。第4決定処理は、参照ブロックrbの評価値SADの算出時に絶対値diffを累積加算する過程をn分割した場合の累積加算順序Yを決定する処理である。
図15は、動画処理装置100の第4決定処理手順の一例を示すフローチャートである。図15のフローチャートにおいて、まず、動画処理装置100は、対象画像OPの縮小画像を生成する(ステップS1501)。つぎに、動画処理装置100は、参照画像RPの縮小画像を生成する(ステップS1502)。
そして、動画処理装置100は、対象画像OPの縮小画像から元ブロックbを選択する(ステップS1503)。つぎに、動画処理装置100は、第4最小評価値算出処理を実行する(ステップS1504)。なお、第4最小評価値算出処理の具体的な処理手順については、図16を用いて後述する。
そして、動画処理装置100は、累積加算順序Yを最小増分区間に対応する部分の絶対値diffを最後に累積加算する順序に決定する(ステップS1505)。つぎに、動画処理装置100は、元ブロックbと対応付けて、第1動きベクトルV1と累積加算順序情報とを出力する(ステップS1506)。
そして、動画処理装置100は、対象画像OPの縮小画像から選択していない未選択の元ブロックbがあるか否かを判断する(ステップS1507)。ここで、未選択の元ブロックbがある場合(ステップS1507:Yes)、動画処理装置100は、ステップS1503に戻って、対象画像OPの縮小画像から未選択の元ブロックbを選択する。一方、未選択の元ブロックbがない場合(ステップS1507:No)、動画処理装置100は、本フローチャートによる一連の処理を終了する。
これにより、累積加算順序Yを、1段階目の動き検出処理において絶対値diffを累積加算する過程をn分割した区間S1〜Snのうちの増分値が最小となる最小増分区間に対応する部分を最後に累積加算する順序に決定することができる。
つぎに、図15に示したステップS1504の第4最小評価値算出処理の具体的な処理手順について説明する。
図16は、第4最小評価値算出処理の具体的処理手順の一例を示すフローチャートである。図16のフローチャートにおいて、まず、動画処理装置100は、最小評価値minSADを「minSAD=+∞」で初期化する(ステップS1601)。
つぎに、動画処理装置100は、参照画像RPの縮小画像から探索範囲内の参照ブロックrbを選択する(ステップS1602)。そして、動画処理装置100は、評価値SADを「SAD=0」で初期化する(ステップS1603)。つぎに、動画処理装置100は、直前のチェックポイントの累積加算値を現在の評価値に設定する(ステップS1604)。
つぎに、動画処理装置100は、最小増分minincを「mininc=+∞」で初期化する(ステップS1605)。そして、動画処理装置100は、参照ブロックrbの評価値SADを算出する第4評価値算出処理を実行する(ステップS1606)。なお、第4評価値算出処理の具体的な処理手順については、図17を用いて後述する。
つぎに、動画処理装置100は、参照ブロックrbの評価値SADが最小評価値minSAD未満か否かを判断する(ステップS1607)。ここで、参照ブロックrbの評価値SADが最小評価値minSAD以上の場合(ステップS1607:No)、動画処理装置100は、ステップS1611に移行する。
一方、参照ブロックrbの評価値SADが最小評価値minSAD未満の場合(ステップS1607:Yes)、動画処理装置100は、最小評価値minSADを参照ブロックrbの評価値SADに更新する(ステップS1608)。つぎに、動画処理装置100は、最小評価ベクトルvectorを現在の候補ベクトルに更新する(ステップS1609)。
そして、動画処理装置100は、最小増分区間intervalを区間tmp_intervalに更新する(ステップS1610)。なお、最小増分区間intervalおよび区間tmp_intervalについては、図17を用いて後述する。つぎに、動画処理装置100は、参照画像RPの縮小画像から選択されていない探索範囲内の参照ブロックrbがあるか否かを判断する(ステップS1611)。
ここで、未選択の参照ブロックrbがある場合(ステップS1611:Yes)、動画処理装置100は、ステップS1602に戻って、参照画像RPの縮小画像から探索範囲内の未選択の参照ブロックrbを選択する。一方、未選択の参照ブロックrbがない場合(ステップS1611:No)、動画処理装置100は、第4最小評価値算出処理を呼び出したステップに戻る。
これにより、最小評価値minSADに対応する参照ブロックrbの候補ベクトルを第1動きベクトルV1として検出することができる。また、最小評価値minSADの算出時における最小増分区間を記録することができる。
つぎに、図16に示したステップS1606の第4評価値算出処理の具体的な処理手順について説明する。
図17は、第4評価値算出処理の具体的処理手順の一例を示すフローチャートである。図17のフローチャートにおいて、まず、動画処理装置100は、評価値SADの算出時に絶対値diffを累積加算する過程をn分割するチェックポイントを特定する(ステップS1701)。
そして、動画処理装置100は、累積加算順序Xに従って、元ブロックb内の画素を選択する(ステップS1702)。つぎに、動画処理装置100は、累積加算順序Xに従って、参照ブロックrb内の画素を選択する(ステップS1703)。
そして、動画処理装置100は、選択した画素間の画素値の差の絶対値diffを算出し(ステップS1704)、評価値SADに絶対値diffを加算する(ステップS1705)。つぎに、動画処理装置100は、現在の処理ステップ数がチェックポイントか否かを判断する(ステップS1706)。
ここで、現在の処理ステップ数がチェックポイントではない場合(ステップS1706:No)、動画処理装置100は、ステップS1712に移行する。一方、現在の処理ステップ数がチェックポイントの場合(ステップS1706:Yes)、動画処理装置100は、評価値SADから現在の評価値prevSADを減算することにより増分値incを算出する(ステップS1707)。
つぎに、動画処理装置100は、増分値incが最小増分mininc未満か否かを判断する(ステップS1708)。ここで、増分値incが最小増分mininc以上の場合(ステップS1708:No)、動画処理装置100は、ステップS1711に移行する。
一方、増分値incが最小増分mininc未満の場合(ステップS1708:Yes)、動画処理装置100は、最小増分minincを増分値incに更新する(ステップS1709)。そして、動画処理装置100は、現在の区間を区間tmp_intervalとして記録する(ステップS1710)。
つぎに、動画処理装置100は、直前のチェックポイントの累積加算値を現在の評価値prevSADに設定する(ステップS1711)。そして、動画処理装置100は、元ブロックbから選択されていない未選択の画素があるか否かを判断する(ステップS1712)。
ここで、未選択の画素がある場合(ステップS1712:Yes)、動画処理装置100は、ステップS1702に戻って、元ブロックb内の未選択の画素を選択する。一方、未選択の画素がない場合(ステップS1712:No)、動画処理装置100は、第4評価値算出処理を呼び出したステップに戻る。
これにより、参照ブロックrbごとの評価値SADを算出するとともに、評価値SADの算出時における最小増分区間を記録することができる。
<第5決定処理手順>
つぎに、動画処理装置100の第5決定処理手順について説明する。第5決定処理は、参照ブロックrbの評価値SADの算出時に絶対値diffを累積加算する過程をn分割した場合の累積加算順序Yを決定する処理である。
図18は、動画処理装置100の第5決定処理手順の一例を示すフローチャートである。図18のフローチャートにおいて、まず、動画処理装置100は、対象画像OPの縮小画像を生成する(ステップS1801)。つぎに、動画処理装置100は、参照画像RPの縮小画像を生成する(ステップS1802)。
そして、動画処理装置100は、対象画像OPの縮小画像から元ブロックbを選択する(ステップS1803)。つぎに、動画処理装置100は、第5最小評価値算出処理を実行する(ステップS1804)。なお、第5最小評価値算出処理の具体的な処理手順については、図19を用いて後述する。
そして、動画処理装置100は、累積加算順序Yを、最大増分区間に対応する部分の絶対値diffを最初に累積加算するとともに、最小増分区間に対応する部分の絶対値diffを最後に累積加算する順序に決定する(ステップS1805)。つぎに、動画処理装置100は、元ブロックbと対応付けて、第1動きベクトルV1と累積加算順序情報とを出力する(ステップS1806)。
そして、動画処理装置100は、対象画像OPの縮小画像から選択していない未選択の元ブロックbがあるか否かを判断する(ステップS1807)。ここで、未選択の元ブロックbがある場合(ステップS1807:Yes)、動画処理装置100は、ステップS1803に戻って、対象画像OPの縮小画像から未選択の元ブロックbを選択する。一方、未選択の元ブロックbがない場合(ステップS1807:No)、動画処理装置100は、本フローチャートによる一連の処理を終了する。
これにより、累積加算順序Yを、区間S1〜Snのうち、増分値が最大となる最大増分区間に対応する部分を最初に累積加算するとともに、増分値が最小となる最小増分区間に対応する部分を最後に累積加算する順序に決定することができる。
つぎに、図18に示したステップS1804の第5最小評価値算出処理の具体的な処理手順について説明する。
図19は、第5最小評価値算出処理の具体的処理手順の一例を示すフローチャートである。図19のフローチャートにおいて、まず、動画処理装置100は、最小評価値minSADを「minSAD=+∞」で初期化する(ステップS1901)。
つぎに、動画処理装置100は、参照画像RPの縮小画像から探索範囲内の参照ブロックrbを選択する(ステップS1902)。そして、動画処理装置100は、評価値SADを「SAD=0」で初期化する(ステップS1903)。つぎに、動画処理装置100は、直前のチェックポイントの累積加算値を現在の評価値に設定する(ステップS1904)。
つぎに、動画処理装置100は、最大増分maxincを「maxinc=0」で初期化する(ステップS1905)。つぎに、動画処理装置100は、最小増分minincを「mininc=+∞」で初期化する(ステップS1906)。そして、動画処理装置100は、参照ブロックrbの評価値SADを算出する第5評価値算出処理を実行する(ステップS1907)。なお、第5評価値算出処理の具体的な処理手順については、図20を用いて後述する。
つぎに、動画処理装置100は、参照ブロックrbの評価値SADが最小評価値minSAD未満か否かを判断する(ステップS1908)。ここで、参照ブロックrbの評価値SADが最小評価値minSAD以上の場合(ステップS1908:No)、動画処理装置100は、ステップS1913に移行する。
一方、参照ブロックrbの評価値SADが最小評価値minSAD未満の場合(ステップS1908:Yes)、動画処理装置100は、最小評価値minSADを参照ブロックrbの評価値SADに更新する(ステップS1909)。つぎに、動画処理装置100は、最小評価ベクトルvectorを現在の候補ベクトルに更新する(ステップS1910)。
そして、動画処理装置100は、最大増分区間max_intervalを区間tmp_max_intervalに更新する(ステップS1911)。なお、最大増分区間max_intervalおよび区間tmp_max_intervalについては、図20を用いて後述する。
つぎに、動画処理装置100は、最小増分区間min_intervalを区間tmp_min_intervalに更新する(ステップS1912)。なお、最小増分区間min_intervalおよび区間tmp_min_intervalについては、図20を用いて後述する。
そして、動画処理装置100は、参照画像RPの縮小画像から選択されていない探索範囲内の参照ブロックrbがあるか否かを判断する(ステップS1913)。ここで、未選択の参照ブロックrbがある場合(ステップS1913:Yes)、動画処理装置100は、ステップS1902に戻って、参照画像RPの縮小画像から探索範囲内の未選択の参照ブロックrbを選択する。一方、未選択の参照ブロックrbがない場合(ステップS1913:No)、動画処理装置100は、第5最小評価値算出処理を呼び出したステップに戻る。
これにより、最小評価値minSADに対応する参照ブロックrbの候補ベクトルを第1動きベクトルV1として検出することができる。また、最小評価値minSADの算出時における最大増分区間および最小増分区間を記録することができる。
つぎに、図19に示したステップS1907の第5評価値算出処理の具体的な処理手順について説明する。
図20は、第5評価値算出処理の具体的処理手順の一例を示すフローチャートである。図20のフローチャートにおいて、まず、動画処理装置100は、評価値SADの算出時に絶対値diffを累積加算する過程をn分割するチェックポイントを特定する(ステップS2001)。
そして、動画処理装置100は、累積加算順序Xに従って、元ブロックb内の画素を選択する(ステップS2002)。つぎに、動画処理装置100は、累積加算順序Xに従って、参照ブロックrb内の画素を選択する(ステップS2003)。
そして、動画処理装置100は、選択した画素間の画素値の差の絶対値diffを算出し(ステップS2004)、評価値SADに絶対値diffを加算する(ステップS2005)。つぎに、動画処理装置100は、現在の処理ステップ数がチェックポイントか否かを判断する(ステップS2006)。
ここで、現在の処理ステップ数がチェックポイントではない場合(ステップS2006:No)、動画処理装置100は、ステップS2015に移行する。一方、現在の処理ステップ数がチェックポイントの場合(ステップS2006:Yes)、動画処理装置100は、評価値SADから現在の評価値prevSADを減算することにより増分値incを算出する(ステップS2007)。
つぎに、動画処理装置100は、増分値incが最大増分maxincより大きいか否かを判断する(ステップS2008)。ここで、増分値incが最大増分maxincより大きい場合(ステップS2008:Yes)、動画処理装置100は、最大増分maxincを増分値incに更新する(ステップS2009)。そして、動画処理装置100は、現在の区間を区間tmp_max_intervalとして記録する(ステップS2010)。
また、ステップS2008において、増分値incが最大増分maxinc以下の場合(ステップS2008:No)、動画処理装置100は、増分値incが最小増分mininc未満か否かを判断する(ステップS2011)。ここで、増分値incが最小増分mininc以上の場合(ステップS2011:No)、動画処理装置100は、ステップS2014に移行する。
一方、増分値incが最小増分mininc未満の場合(ステップS2011:Yes)、動画処理装置100は、最小増分minincを増分値incに更新する(ステップS2012)。そして、動画処理装置100は、現在の区間を区間tmp_min_intervalとして記録する(ステップS2013)。
つぎに、動画処理装置100は、直前のチェックポイントの累積加算値を現在の評価値prevSADに設定する(ステップS2014)。そして、動画処理装置100は、元ブロックbから選択されていない未選択の画素があるか否かを判断する(ステップS2015)。
ここで、未選択の画素がある場合(ステップS2015:Yes)、動画処理装置100は、ステップS2002に戻って、元ブロックb内の未選択の画素を選択する。一方、未選択の画素がない場合(ステップS2015:No)、動画処理装置100は、第5評価値算出処理を呼び出したステップに戻る。
これにより、参照ブロックrbごとの評価値SADを算出するとともに、評価値SADの算出時における最大増分区間および最小増分区間を記録することができる。
以上で示した第1〜第5の決定処理手順では、各最小評価値算出処理(S604、S904、S1204、S1504、S1804)からは各チェックポイントでの累積加算値、または最大や最小の増分を示す区間を出力させ、最小評価値算出処理後に、元ブロックbにおける累積加算順序Yを決定(S605〜S607、S905〜S907、S1205、S1505、S1805)している。一方、各最小評価値を更新(S705、S1005、S1308、S1608、S1909)するごとに累積加算順序Y決定処理を行い、最後に行われた累積加算順序Y決定処理の結果を、第1〜第5の決定処理手順の結果としてもよい。この際、最小評価値を更新した時点での各チェックポイントでの累積加算値、または最大や最小の増分を示す区間の保持(S707、S1007、S1008、S1310、S1610、S1911、S1912)は行わなくてもよい。
この場合、図3における決定部305と比較部311は、第1の算出部によってある参照ブロックrbの評価値が算出した結果が最小評価値を更新するたびに動作し、記録部310に保持された絶対値diffから累積加算順序Yを決定する。
<動き検出処理手順>
つぎに、動画処理装置100の動き検出処理手順について説明する。この動き検出処理は、元ブロックbに対応する対象画像OP上の元ブロックBの第2動きベクトルV2を検出する処理である。
図21は、動画処理装置100の動き検出処理手順の一例を示すフローチャートである。図21のフローチャートにおいて、まず、動画処理装置100は、最小評価値minSADを「minSAD=+∞」で初期化する(ステップS2101)。
そして、動画処理装置100は、第1動きベクトルV1から特定される参照画像RPの探索範囲内の参照ブロックRBを選択する(ステップS2102)。つぎに、動画処理装置100は、評価値SADを「SAD=0」で初期化する(ステップS2103)。
そして、動画処理装置100は、元ブロックbに対応する累積加算順序情報から特定される累積加算順序Yに従って、元ブロックB内の画素を選択する(ステップS2104)。つぎに、動画処理装置100は、累積加算順序Yに従って、参照ブロックRB内の画素を選択する(ステップS2105)。
そして、動画処理装置100は、選択した画素間の画素値の差の絶対値diffを算出し(ステップS2106)、評価値SADに絶対値diffを加算する(ステップS2107)。つぎに、動画処理装置100は、参照ブロックRBの評価値SADが最小評価値minSADよりも大きいか否かを判断する(ステップS2108)。
ここで、参照ブロックRBの評価値SADが最小評価値minSADよりも大きい場合(ステップS2108:Yes)、動画処理装置100は、ステップS2113に移行する。一方、参照ブロックRBの評価値SADが最小評価値minSAD以下の場合(ステップS2108:No)、動画処理装置100は、元ブロックBから選択されていない未選択の画素があるか否かを判断する(ステップS2109)。
ここで、未選択の画素がある場合(ステップS2109:Yes)、動画処理装置100は、ステップS2104に戻って、元ブロックB内の未選択の画素を選択する。一方、未選択の画素がない場合(ステップS2109:No)、動画処理装置100は、参照ブロックRBの評価値SADが最小評価値minSAD未満か否かを判断する(ステップS2110)。
ここで、参照ブロックRBの評価値SADが最小評価値minSAD以上の場合(ステップS2110:No)、動画処理装置100は、ステップS2113に移行する。一方、参照ブロックRBの評価値SADが最小評価値minSAD未満の場合(ステップS2110:Yes)、動画処理装置100は、最小評価値minSADを参照ブロックRBの評価値SADに更新する(ステップS2111)。
つぎに、動画処理装置100は、最小評価ベクトルvectorを現在の候補ベクトルに更新する(ステップS2112)。そして、動画処理装置100は、参照画像RPの探索範囲内の選択されていない未選択の参照ブロックRBがあるか否かを判断する(ステップS2113)。
ここで、未選択の参照ブロックRBがある場合(ステップS2113:Yes)、動画処理装置100は、ステップS2103に戻って、参照画像RPの探索範囲内の未選択の参照ブロックRBを選択する。一方、未選択の参照ブロックRBがない場合(ステップS2113:No)、動画処理装置100は、元ブロックBと対応付けて、第2動きベクトルV2を出力して(ステップS2114)、本フローチャートによる一連の処理を終了する。なお、第2動きベクトルV2は、最小評価ベクトルvectorである。
これにより、累積加算演算をより早い処理ステップ数で打ち切れる可能性が高い累積加算順序Yに従って、元ブロックBと参照ブロックRBとの対応する画素間の絶対値diffを累積加算して、参照ブロックRBごとの評価値SADを算出することができる。
(動画符号化装置の構成例)
つぎに、動画処理装置100を動画符号化装置に適用した場合の構成例について説明する。
図22は、動画符号化装置の構成例を示すブロック図(その1)である。図22において、動画符号化装置2200は、フレーム内予測モード決定部2201と、フレーム内予測部2202と、動き検出部2203と、フレーム間予測部2204と、直交変換/量子化部2205と、逆直交変換/逆量子化部2206と、エントロピー符号化部2207と、ループ内フィルタ部2208と、参照画像(局所復号画像)メモリ2209と、を有する。
フレーム内予測モード決定部2201は、フレーム内予測の予測モードを決定する。フレーム内予測部2202は、フレーム内予測処理を行う。動き検出部2203は、動きベクトルを検出する。動き検出部2203は、例えば、動画処理装置100の入力部301〜第2の検出部306に相当し、動き検出部2203から出力される動きベクトルは、第2動きベクトルV2に相当する。
フレーム間予測部2204は、動き検出部2203から出力される動きベクトルに基づいて、フレーム間予測処理を行う。フレーム間予測部2204は、例えば、動画処理装置100の処理部307に相当する。直交変換/量子化部2205は、直交変換、量子化処理を行う。
逆直交変換/逆量子化部2206は、逆直交変換、逆量子化処理を行う。エントロピー符号化部2207は、エントロピー符号化処理を行ってストリームを生成する。ループ内フィルタ部2208は、フィルタ前局所復号画像に対してフィルタ処理を行う。参照画像(局所復号画像)メモリ2209は、ループ内フィルタ部2208から出力される参照画像(局所復号画像)を記憶する。
なお、図22の例では、動き検出部2203が、1段階目の動き検出処理と2段階目の動き検出処理とを行う場合を例に挙げて説明したが、1段階目の動き検出処理を行う構成部と2段階目の動き検出処理を行う構成部とを別々に設けることにしてもよい。
図23は、動画符号化装置の構成例を示すブロック図(その2)である。図23において、動画符号化装置2300は、フレーム内予測モード決定部2201と、フレーム内予測部2202と、フレーム間予測部2204と、直交変換/量子化部2205と、逆直交変換/逆量子化部2206と、エントロピー符号化部2207と、ループ内フィルタ部2208と、縮小画生成部2301と、第1の動き検出部2302と、第2の動き検出部2303と、SDRAM(Synchronous Dynamic Random Access Memory)2304と、を有する。
縮小画生成部2301は、縮小画像を生成する。縮小画生成部2301は、例えば、動画処理装置100の第1の縮小部302および第2の縮小部303に相当する。第1の動き検出部2302は、第1の動きベクトルを検出する。第1の動き検出部2302は、例えば、動画処理装置100の第1の検出部304および決定部305に相当する。また、第1の動き検出部2302から出力される第1の動きベクトルは第1動きベクトルV1に相当し、第1の動き検出部2302から出力される評価指標算出方法情報は累積加算情報に相当する。
第2の動き検出部2303は、第2の動きベクトルを検出する。第2の動き検出部2303は、例えば、動画処理装置100の第2の検出部306に相当する。また、第2の動き検出部2303から出力される第2の動きベクトルは、第2動きベクトルV2に相当する。SDRAM2304は、縮小画メモリ2305と、原画メモリ2306と、参照画像(局所復号画像)メモリ2307と、を含む。
縮小画メモリ2305は、縮小画生成部2301から出力される縮小画像を記憶する。原画メモリ2306は、原画を記憶する。原画は、例えば、対象画像OPの原画像である。参照画像(局所復号画像)メモリ2307は、ループ内フィルタ部2208から出力される参照画像(局所復号画像)を記憶する。
以上説明したように、実施の形態にかかる動画処理装置100によれば、1段階目の動き検出処理において絶対値diffを累積加算する過程を2分割した区間S1と区間S2との増分値を比較することができる。また、動画処理装置100によれば、区間S1の増分値が区間S2の増分値以上の場合は、累積加算順序Yを累積加算順序Xと同順に決定することができる。また、動画処理装置100によれば、区間S1の増分値が区間S2の増分値未満の場合は、累積加算順序Yを累積加算順序Xと逆順に決定することができる。これにより、2段階目の動き検出処理における累積加算演算を、累積加算順序Xに従って行う場合よりも早い処理ステップ数で打ち切れる可能性が高い累積加算順序Yを出力することができる。
また、動画処理装置100によれば、1段階目の動き検出処理において絶対値diffを累積加算する過程を3分割した区間S1〜S3のうちの区間S1と区間S3との増分値を比較することができる。また、動画処理装置100によれば、区間S1の増分値が区間S3の増分値未満の場合は、累積加算順序Yを累積加算順序Xと逆順に決定することができる。また、動画処理装置100によれば、区間S1の増分値が区間S3の増分値以上の場合は、累積加算順序Yを累積加算順序Xと同順に決定することができる。これにより、2段階目の動き検出処理における累積加算演算を、累積加算順序Xに従って行う場合よりも早い処理ステップ数で打ち切れる可能性が高い累積加算順序Yを出力することができる。
また、動画処理装置100によれば、1段階目の動き検出処理において絶対値diffを累積加算する過程をn分割した区間S1〜Snのうちの区間同士の増分値を比較することができる。また、動画処理装置100によれば、累積加算順序Yを、区間S1〜Snのうちの増分値が最大となる最大増分区間に対応する部分を最初に累積加算する順序に決定することができる。これにより、2段階目の動き検出処理における累積加算演算を、累積加算順序Xに従って行う場合よりも早い処理ステップ数で打ち切れる可能性が高い累積加算順序Yを出力することができる。
また、動画処理装置100によれば、1段階目の動き検出処理において絶対値diffを累積加算する過程をn分割した区間S1〜Snのうちの区間同士の増分値を比較することができる。また、動画処理装置100によれば、累積加算順序Yを、区間S1〜Snのうちの増分値が最小となる最小増分区間に対応する部分を最後に累積加算する順序に決定することができる。
また、動画処理装置100によれば、1段階目の動き検出処理において絶対値diffを累積加算する過程をn分割した区間S1〜Snのうちの区間同士の増分値を比較することができる。また、動画処理装置100によれば、累積加算順序Yを、区間S1〜Snのうち、増分値が最大となる最大増分区間に対応する部分を最初に累積加算するとともに、増分値が最小となる最小増分区間に対応する部分を最後に累積加算する順序に決定することができる。これにより、2段階目の動き検出処理における累積加算演算を、累積加算順序Xに従って行う場合よりも早い処理ステップ数で打ち切れる可能性が高い累積加算順序Yを出力することができる。
また、動画処理装置100によれば、2段階目の動き検出処理において、元ブロックBと参照ブロックRBとの対応する画素間の絶対値diffを累積加算順序Yに従って累積加算して、参照ブロックRBごとの評価値SADを算出することができる。これにより、2段階目の動き検出処理における累積加算演算をより早い処理ステップ数で打ち切れる確率を高めることができる。この結果、動き検出にかかる演算量を削減して、動き検出にかかる動画処理装置100の処理時間および消費電力を削減することができる。
なお、上述した説明では、2段階の動き検出を例に挙げて説明したが、3段階以上の動き検出に本動画処理方法を適用することにしてもよい。具体的には、例えば、動画処理装置100は、3段階目以降の動き検出処理においても、1段階目の動き検出処理において決定した累積加算順序Yに従って画素間の絶対値diffを累積加算することにしてもよい。また、動画処理装置100は、k段階目の動き検出処理において(k+1)段階目の動き検出処理で用いる累積加算順序Yを逐次決定することにしてもよい。
また、本実施の形態で説明した動画処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本動画処理プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本動画処理プログラムは、インターネット等のネットワークを介して配布してもよい。
また、本実施の形態で説明した動画処理装置100は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、例えば、上述した動画処理装置100の機能部をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、動画処理装置100を製造することができる。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)対象画像を縮小した画像から分割された第1ブロックと、参照画像を縮小した画像上の探索範囲内の参照ブロックとの対応する画素間の差分を表す値を所定の順序で累積加算することにより、前記参照ブロックごとの評価値を算出する算出部と、
前記参照ブロックの評価値の算出時に前記値が累積加算される過程を区切って分割された区間に対応して、前記区間における前記値の増分値を記録する記録部と、
前記算出部によって算出された算出結果に基づいて、前記第1ブロックの動きベクトルを検出する検出部と、
前記記録部によって記録された記録内容に基づいて、前記検出部によって検出された前記動きベクトルが示す参照ブロックの評価値の算出時に前記値が累積加算された過程における区間同士の増分値を比較する比較部と、
前記比較部によって比較された比較結果に基づいて、前記第1ブロックに対応する前記対象画像上の第2ブロックと前記動きベクトルから特定される前記参照画像上の探索範囲内の参照ブロックとの対応する画素間の差分を表す値を累積加算して当該参照ブロックの評価値を算出する際の累積加算順序を決定する決定部と、
を有することを特徴とする動画処理装置。
(付記2)前記記録部は、
前記過程を区切って2分割された第1および第2の区間のうちの少なくともいずれかの区間の増分値を保持し、
前記比較部は、
前記記録部によって記録された記録内容に基づいて、前記動きベクトルが示す参照ブロックの評価値の算出時に前記値が累積加算された過程の第1の区間の増分値と第2の区間の増分値とを比較し、
前記決定部は、
前記第1の区間の増分値が前記第2の区間の増分値以上の場合は、前記累積加算順序を前記所定の順序と同順に決定し、前記第1の区間の増分値が前記第2の区間の増分値未満の場合は、前記累積加算順序を前記所定の順序と逆順に決定することを特徴とする付記1に記載の動画処理装置。
(付記3)前記記録部は、
前記過程を区切って3分割された第1、第2および第3の区間のうちの少なくとも前記第1および第2の区間の増分値を記録し、
前記比較部は、
前記記録部によって記録された記録内容に基づいて、前記動きベクトルが示す参照ブロックの評価値の算出時に前記値が累積加算された過程の第1の区間の増分値と第3の区間の増分値とを比較し、
前記決定部は、
前記第1の区間の増分値が前記第3の区間の増分値以上の場合は、前記累積加算順序を前記所定の順序と同順に決定し、前記第1の区間の増分値が前記第3の区間の増分値未満の場合は、前記累積加算順序を前記所定の順序と逆順に決定することを特徴とする付記1に記載の動画処理装置。
(付記4)前記記録部は、
前記過程を区切って分割された複数の区間の各々の区間の増分値を保持し、
前記比較部は、
前記記録部によって記録された保持内容に基づいて、前記動きベクトルが示す参照ブロックの評価値の算出時に前記値が累積加算された過程の区間同士の増分値を比較し、
前記決定部は、
前記累積加算順序を、前記複数の区間のうちの増分値が最大となる区間に対応する部分の画素間の差分を表す値を最初に累積加算する順序に決定することを特徴とする付記1に記載の動画処理装置。
(付記5)前記記録部は、
前記過程を区切って分割された複数の区間の各々の区間の増分値を保持し、
前記比較部は、
前記記録部によって記録された記録内容に基づいて、前記動きベクトルが示す参照ブロックの評価値の算出時に前記値が累積加算された過程の区間同士の増分値を比較し、
前記決定部は、
前記累積加算順序を、前記複数の区間のうちの増分値が最小となる区間に対応する部分の画素間の差分を表す値を最後に累積加算する順序に決定することを特徴とする付記1または4に記載の動画処理装置。
(付記6)前記決定部によって決定された前記累積加算順序に従って、前記第2ブロックと前記動きベクトルから特定される前記参照画像の探索範囲内の参照ブロックとの対応する画素間の差分を表す値を累積加算することにより、前記参照ブロックごとの評価値を算出する第2の算出部と、
前記第2の算出部によって算出された算出結果に基づいて、前記第2ブロックの動きベクトルを検出する第2の検出部と、
を有することを特徴とする付記1〜5のいずれか一つに記載の動画処理装置。
(付記7)前記評価値は、SAD(Sum of Absolute Difference)またはSATD(Sum of Absolute Transformed Difference)またはSSD(Sum of Squared Difference)であることを特徴とする付記1〜6のいずれか一つに記載の動画処理装置。
(付記8)前記第2ブロックと前記第2の検出部によって検出された前記動きベクトルが示す前記参照画像上の参照ブロックとに基づいて、フレーム間予測画像を生成する処理部をさらに有することを特徴とする付記1〜7のいずれか一つに記載の動画処理装置。
(付記9)前記第2の検出部によって検出された前記動きベクトルに基づいて、前記対象画像と前記参照画像とのずれ量を検出する処理部をさらに有することを特徴とする付記1〜7のいずれか一つに記載の動画処理装置。
(付記10)コンピュータが、
対象画像を縮小した画像から分割された第1ブロックと、参照画像を縮小した画像上の探索範囲内の参照ブロックとの対応する画素間の差分を表す値を所定の順序で累積加算することにより、前記参照ブロックごとの評価値を算出し、
前記参照ブロックの評価値の算出時に前記値が累積加算される過程を区切って分割された区間に対応して、前記区間における前記値の増分値を記録し、
算出した算出結果に基づいて、前記第1ブロックの動きベクトルを検出し、
記録した記録内容に基づいて、検出した前記動きベクトルが示す参照ブロックの評価値の算出時に前記値が累積加算された過程における区間同士の増分値を比較し、
比較した比較結果に基づいて、前記第1ブロックに対応する前記対象画像上の第2ブロックと前記動きベクトルから特定される前記参照画像上の探索範囲内の参照ブロックとの対応する画素間の差分を表す値を累積加算して当該参照ブロックの評価値を算出する際の累積加算順序を決定する、
処理を実行することを特徴とする動画処理方法。
(付記11)コンピュータに、
対象画像を縮小した画像から分割された第1ブロックと、参照画像を縮小した画像上の探索範囲内の参照ブロックとの対応する画素間の差分を表す値を所定の順序で累積加算することにより、前記参照ブロックごとの評価値を算出し、
前記参照ブロックの評価値の算出時に前記値が累積加算される過程を区切って分割された区間に対応して、前記区間における前記値の増分値を記録し、
算出した算出結果に基づいて、前記第1ブロックの動きベクトルを検出し、
記録した記録内容に基づいて、検出した前記動きベクトルが示す参照ブロックの評価値の算出時に前記値が累積加算された過程における区間同士の増分値を比較し、
比較した比較結果に基づいて、前記第1ブロックに対応する前記対象画像上の第2ブロックと前記動きベクトルから特定される前記参照画像上の探索範囲内の参照ブロックとの対応する画素間の差分を表す値を累積加算して当該参照ブロックの評価値を算出する際の累積加算順序を決定する、
処理を実行させることを特徴とする動画処理プログラム。
(付記12)コンピュータに、
対象画像を縮小した画像から分割された第1ブロックと、参照画像を縮小した画像上の探索範囲内の参照ブロックとの対応する画素間の差分を表す値を所定の順序で累積加算することにより、前記参照ブロックごとの評価値を算出し、
前記参照ブロックの評価値の算出時に前記値が累積加算される過程を区切って分割された区間に対応して、前記区間における前記値の増分値を記録し、
算出した算出結果に基づいて、前記第1ブロックの動きベクトルを検出し、
記録した記録内容に基づいて、検出した前記動きベクトルが示す参照ブロックの評価値の算出時に前記値が累積加算された過程における区間同士の増分値を比較し、
比較した比較結果に基づいて、前記第1ブロックに対応する前記対象画像上の第2ブロックと前記動きベクトルから特定される前記参照画像上の探索範囲内の参照ブロックとの対応する画素間の差分を表す値を累積加算して当該参照ブロックの評価値を算出する際の累積加算順序を決定する、
処理を実行させる動画処理プログラムを記録したことを特徴とする前記コンピュータに読み取り可能な記録媒体。