以下、この発明による画像処理装置および方法の実施の形態を、図を参照しながら説明する。
[この発明による画像処理装置の実施形態]
この発明による画像処理方法を用いた画像処理装置の実施形態として、撮像装置の場合を例にとって、図を参照しながら説明する。以下に説明する実施の形態の撮像装置では、図2に示すように、連続して撮影された複数枚の画像、例えばP1,P2,P3を、動き検出および動き補償を用いて位置合わせをした後、重ね合わせすることで、ノイズが低減された画像Pmixを得ることができるようにしている。すなわち、複数枚の画像のそれぞれにおけるノイズはランダムなものであるので、同一内容の画像を重ね合わせることで、画像に対してノイズが低減されるものである。
以下の説明において、動き検出および動き補償を用いて複数枚の画像を重ね合わせて、ノイズを低減するシステムをNR(Noise Reduction)システムと呼び、NRシステムによりノイズ低減された画像をNR画像と称することとする。
この明細書では、ノイズ低減を施したい画面(画像)をターゲット画面(ターゲットフレーム)、重ね合わせたい画面を参照画面(参照フレーム)と定義する。連続して撮影された画像は、撮影者の手ブレなどにより、画像の位置がずれており、両画像の重ね合わせを行うには、位置合わせが重要となる。ここで、考慮しなければならないのは、手ブレのような画面全体のブレと共に、画面内における被写体の動きも存在することである。
このため、被写体に対してもノイズ低減効果を高めるためには、図3に示すように、ターゲットフレーム100を分割して生成される複数個のターゲットブロック102のそれぞれ単位での位置合わせが必要になる。
したがって、この実施の形態では、複数個のターゲットブロック102の全てについて、ブロック単位の動きベクトル(以下、ブロック動きベクトルという)121を検出し、それぞれのターゲットブロック102について、対応するブロック動きベクトル104Bを用いて位置合わせを行い、画像を重ね合わせるようにする。
この実施の形態の撮像装置において、静止画撮影時は、図4に示すように、高速で複数枚の画像の撮影を行い、1枚目の撮影画像をターゲットフレーム100とし、2枚目以降、所定枚数の撮影画像を参照フレーム101とし、重ね合わせを行い、その重ね合わせたものを静止画撮影画像として記録するようにする。すなわち、撮影者が撮像装置のシャッターボタンを押下操作すると、高速で前記所定枚数の画像が撮影され、その1枚目に撮影した画像(フレーム)に対して、時間的に後で撮影された複数枚の画像(フレーム)が、重ね合わされることになる。
また、動画撮影時は、図5のように、撮像素子から出力されている現フレームの画像をターゲットフレーム100の画像とし、その前フレームの画像を参照フレーム101の画像とする。したがって、現フレームの画像のノイズ低減を行うために、現フレームの前フレームの画像を現フレームに重ね合わせるということになる。
なお、上述の図4および図5の画像の重ね合わせの方法の説明の場合は、記録する動画画像のフレームレートを60fps(flame/second)としたときに、撮像素子から当該60fpsのフレームレートの2枚の画像フレームを重ね合わせて、その結果としてノイズの低減された60fpsのフレームレートで撮像画像信号が得られる場合である。
しかし、撮像素子から、より高速の、例えば240fpsの高フレームレートで、撮像画像が出力されるように構成されている場合において、動画撮影時においても、4枚ずつの画像を重ねて1枚の動画フレームを生成することで、60fpsのフレームレートの撮像画像信号を得るようにすることもできる。もちろん、240fpsの撮像画像を、この例と同様にして、2枚の画像フレームを重ね合わせて、その結果として240fpsのフレームレートのノイズ低減された撮像画像信号を得るようにすることもできる。
次に、この実施の形態においては、さらに、より高精度で画像の重ね合わせができるように、処理対象画像の画素ピッチの精度(ピクセル精度という)よりも高精度、つまり、元の画面(ターゲットフレーム)の画素ピッチよりも小さいピッチの高精度(この高精度をサブピクセル精度と呼ぶことにする)で、ブロック動きベクトルを検出するようにする。このサブピクセル精度での動きベクトル算出のために、後述するように、この実施の形態の撮像装置においては、ピクセル精度で求めた動きベクトルと、その近傍の参照ベクトルとを用いて補間処理をするようにする。
図1は、この発明の画像処理装置の実施形態としての撮像装置の一例のブロック図を示すものである。
この図1に示すように、この実施形態の撮像装置は、システムバス2にCPU(Central Processing Unit)1が接続されると共に、システムバス2に、撮像信号処理系10や、ユーザ操作入力部3、画像メモリ部4、記録再生装置部5などが接続されて構成されている。なお、この明細書においては、CPU1は、図示は省略するが、種々のソフトウエア処理を行なうプログラムを記憶するROM(Read Only Memory)やワークエリア用RAM(Random Access Memory)などを含むものとしている。
ユーザ操作入力部3を通じた撮像記録開始操作を受けて、図1の撮像装置は、後述するような撮像画像データの記録処理を行なう。また、ユーザ操作入力部3を通じた撮像記録画像の再生開始操作を受けて、図1の撮像装置は、記録再生装置部5の記録媒体に記録された撮像画像データの再生処理を行なう。
図1に示すように、撮像レンズ10Lを備えるカメラ光学系(図示は省略)を通じた被写体からの入射光は、撮像素子11に照射されて撮像される。この例では、撮像素子11は、CCD(Charge Coupled Device)イメージャで構成されている。なお、撮像素子12は、CMOS(Complementary Metal Oxide Semiconductor)イメージャで構成してもよい。
この例の撮像装置においては、撮像記録開始操作がなされると、レンズ10Lを通じて入力された映像が、撮像素子11により撮像画像信号に変換され、タイミング信号発生部12からのタイミング信号に同期した信号として、赤(R)、緑(G)、青(B)の3原色から構成されるベイヤー配列のRAW信号(生の信号)であるアナログ撮像信号が出力される。出力されたアナログ撮像信号は、前処理部13に供給され、欠陥補正やγ補正等の前処理が施され、データ変換部14に供給される。
データ変換部14は、これに入力されたRAW信号であるアナログ撮像信号を、輝度信号成分Yと、色差信号成分Cb/Crとにより構成されるデジタル撮像信号(YCデータ)に変換し、そのデジタル撮像信号を解像度変換部15に供給する。解像度変換部15では、ユーザ操作入力部3を通じて指定された解像度に、デジタル撮像信号を変換し、システムバスを介して、画像メモリ部4に供給する。
ユーザ操作入力部3を通じた撮影指示が、シャッターボタンの押下による静止画撮影指示であったときには、解像度変換部15で解像度変換されたデジタル撮像信号は、前述した複数フレーム分が画像メモリ部4に書き込まれる。そして、複数フレーム分の画像が画像メモリ部4に書き込まれた後、ターゲットフレームの画像データと参照フレームの画像データが、動き検出・動き補償部16によって読み込まれ、画像重ね合わせ部17を経て、コーデック部18においてコーデック変換され、システムバス2を通じて記録再生装置部5の例えばDVD(Digital Versatile Disc)やハードディスクなどの記録媒体に記録される。
この静止画撮影時、シャッターボタンが押下操作される前においては、画像重ね合わせ部17からの画像データは、NTSC(National Television System Committee)エンコーダ19によりNTSC方式の標準カラー映像信号に変換され、例えばLCD(Liquid Crystal Display;液晶ディスプレイ)からなるモニターディスプレイ6に供給され、静止画撮影時のモニター画像がその表示画面にモニター表示される。
また、ユーザ操作入力部3を通じた撮影指示が、動画記録ボタンの押下による動画撮影指示であったときには、解像度変換された画像データは、画像メモリ部4に書き込まれると共に、リアルタイムに動き検出・動き補償部16へ送られ、画像重ね合わせ部17を経て、NTSCエンコーダ部19を通じてモニターディスプレイ6の表示画面に出力されながら、コーデック部18でコーデック変換され、システムバス2を通じて記録再生装置部5に供給され、DVDやハードディスクなどの記録媒体に記録される。
この記録再生装置部5の記録媒体に記録された撮像画像データは、ユーザ操作入力部3を通じた再生開始操作に応じて読み出され、コーデック部18に供給されて、再生デコードされる。そして、再生デコードされた画像データはNTSCエンコーダ19を通じてモニターディスプレイ6に供給され、再生画像がその表示画面に表示される。なお、図1では、図示を省略したが、NTSCエンコーダ19からの出力映像信号は、映像出力端子を通じて外部に導出することが可能とされている。
上述した手ぶれ動きベクトル検出部16は、ハードウエアにより構成することできるし、また、DSP(Digital Signal Processor)を用いて構成することもできる。さらには、CPU1によりソフトウエア処理とすることもできる。
[動き検出・動き補償部16の説明]
動き検出・動き補償部16では、この実施の形態では、基本的には、図33〜図38を用いて説明した、SAD値を用いてブロックマッチング処理を行うことで、動きベクトル検出を行うようにする。ただし、この実施の形態では、ターゲットブロックに対して、サーチ範囲を移動させる複数個の参照ブロックについてのSAD値の全てを記憶するようにするSADテーブルTBLは用いずに、ハードウエア規模の削減を図るようにしている。そのことに関しては、後で詳述する。
図6に、動き検出・動き補償部16の構成例のブロック図を示す。この例では、動き検出・動き補償部16は、ターゲットブロック102の画素データを保持するターゲットブロックバッファ部161と、参照ブロック108の画素データを保持する参照ブロックバッファ部162と、ターゲットブロック102と参照ブロック108との対応する画素についてのSAD値を計算するマッチング処理部163と、マッチング処理部163から出力されるSAD値情報から動きベクトルを算出する動きベクトル算出部164と、それぞれのブロックを制御するコントロール部165と、を備える。
静止画撮像時においては、ターゲットブロックバッファ部161には、画像メモリ4に記憶されているシャッターボタン押下後の最初の撮像フレームが、ターゲットフレーム102として書き込まれ、参照ブロックバッファ部162には、画像メモリ4に記憶されている前記最初の撮像フレームの後の撮像フレームが、参照フレーム108として順次に書き込まれる。
また、動画撮影時においては、ターゲットブロックバッファ部161には、解像度変換部15からの撮像フレームが、ターゲットフレーム102として書き込まれ、参照ブロックバッファ部162には、前記ターゲットフレームよりも1枚前の、画像メモリ4に記憶されている撮像フレームが、参照フレーム108として書き込まれる。
マッチング処理部163では、前述の図33〜図38を用いて説明したブロックマッチング処理を、ターゲットブロックバッファ部161に記憶されたターゲットブロックと、参照ブロックバッファ部162に記憶された参照ブロックとについて行う。
ここで、ブロックマッチングにおけるターゲットブロックと、参照ブロックとの相関の強さを検出するためには、この実施の形態においても、画像データの輝度情報を用いてSAD値算出を行い、その最小SAD値を検出して、当該最小SAD値を呈する参照ブロックを最強相関参照ブロックとして検出するようにする。
なお、SAD値の算出は、輝度情報ではなく、色差信号や、3原色信号R,G,Bの情報を使用しても良いことは言うまでもない。また、SAD値の算出に当たっては、通常は、ブロック内の全画素を用いるようにするが、演算量削減のため、間引き等により、飛び飛びの位置の限られた画素の画素値のみを使用するようにしてもよい。
動きベクトル算出部164は、マッチング処理部163のマッチング処理結果からターゲットブロックに対する参照ブロックの動きベクトルを検出する。この実施形態では、サブピクセル精度の高精度動きベクトルを検出するようにする。
サブピクセル精度の高精度動きベクトルについて説明する。前述したブロックマッチング手法では、ピクセル単位でブロックマッチングを行っているため、動きベクトルはピクセル精度でしか算出されない。図38に示したように、マッチング処理を行った点、つまり、参照ブロックの位置は、ピクセル精度で存在し、より精度の高い動きベクトルを算出するには、サブピクセル単位でのマッチング処理が必要になる。
N倍のピクセル精度(画素ピッチは、1/N)の動きベクトルを算出するために、N倍のピクセル単位でマッチング処理を行うと、SADテーブルは約N2倍の大きさになり、膨大なメモリが必要になる。また、ブロックマッチング処理のために、N倍にアッパーサンプルした画像を生成しなくてはならず、ハードウエアの規模は飛躍的に増大する。
そこで、二次曲線を用いて、SADテーブルを補間することで、ピクセル単位でマッチング処理を行ったSADテーブルから、サブピクセル精度の動きベクトルを算出することを考える。この場合において、二次曲線近似補間ではなく、線形補間や、3次以上の高次の近似曲線補間を用いても良いが、精度とハードウエア化との兼ね合いから、この例では、二次曲線近似補間を用いている。
この二次曲線近似補間においては、図7に示すように、ピクセル精度の動きベクトル104が指し示すSADテーブルのSAD値の最小値Smin(図7の113参照)と、当該最小値Sminの位置の近傍位置の複数個のSAD値(近傍SAD値という)、この例では、最小値Sminの位置のX方向およびY方向に隣接する4個の近傍SAD値Sx1、Sx2およびSy1、Sy2(図7の114,115,116,117参照)を使用する。
図8に示すように、SAD値の最小値Sminと、X方向(水平方向)の近傍2点の近傍SAD値Sx1、Sx2を使って、二次の近似曲線118を当てはめ、この二次曲線118の極小を取る座標が、サブピクセル精度のSAD値の最小値SXminとなる動きベクトル(高精度動きベクトル)のX座標Vxとなる。このときの二次曲線近似補間の式を、次式(1)に示す。
SXmin=1/2×(Sx2−Sx1)/(Sx2−2Smin+Sx1)…式(1)
この計算式(1)で求めたサブピクセル精度のSAD値の最小値SXminがSADテーブル上で取るX座標が、サブピクセル精度のSAD値の最小値となるX座標Vxとなる。
この計算式(1)の割り算は、複数回の引き算で実現可能である。求めたいサブピクセル精度が、例えば元の画素ピッチの1/4の画素ピッチの精度であれば、僅か2回の引き算でも求められるため、回路規模、演算時間、共に小さく、二次の近時曲線補間よりもかなり複雑な三次曲線補間と殆ど変わらない性能が実現できる。
同様に、SAD値の最小値Sminと、Y方向(垂直方向)の近傍2点の近傍SAD値Sy1、Sy2を使って、二次の近似曲線を当て嵌め、この二次曲線の極小値SYminを取るY座標が、サブピクセル精度のSAD値の最小値となるY座標Vyとなる。このときの二次曲線近似補間の式を、次式(2)に示す。
SYmin=1/2×(Sy2−Sy1)/(Sy2−2Smin+Sy1)…式(2)
以上のようにして、二次曲線の近似を、X方向およびY方向の2回、行うことで、サブピクセル精度の高精度の動きベクトル(Vx、Vy)が求まる。
以上の説明では、SAD値の最小値と、そのX方向(水平方向)およびY方向(垂直方向)の近傍2点のSAD値を使用したが、各方向の近傍のSAD値は2点以上であってもよい。また、二次曲線をX方向、Y方向に代えて、例えば、斜め方向に近似曲線を当て嵌めてもかまわない。さらに、X方向、Y方向に、斜め方向を加えて近似曲線を当て嵌めてもかまわない。
以上のような手段、手順を用いることにより、ピクセル単位の精度のSADテーブルの値から、サブピクセル精度のベクトル検出結果が得られることを図9に示す。図9の横軸は、補間倍率であり、1次元方向に分解能を何倍にするかを表している。SADテーブルは2次元のため、テーブル面積は、この2乗の割合で削減されるのに対し、補間による誤差は、線形程度にしか増加しないことから、上述の補間手法の有用性が分かる。
[撮像画像のノイズ低減処理]
<静止画撮影時>
この実施の形態の撮像装置において、静止画撮影時における画像の重ね合わせによるノイズ低減処理のフローチャートを、図10に示す。この図10のフローチャートの各ステップは、CPU1およびこのCPU1により制御される動き検出・動き補償部16のコントロール部165の制御の下に実行されるものである。
まず、シャッターボタンが押下されると、この例の撮像装置においては、CPU1による制御によって、高速で複数枚の画像の撮影が行われる。この例では、静止画撮影時に重ね合わすべきM枚(Mフレーム;Mは2以上の整数)の撮像画像データを取り込み、画像メモリ部4に貼っておく(ステップS1)。
次に、参照フレームは、画像メモリ部4に蓄積されているM枚の画像フレームのうちの時間的にN番目(Nは2以上の整数で、最大値はM)とするのであるが、コントロール部165は、その何番目とする値Nの初期値を、N=2とする(ステップS2)。そして、次に、コントロール部165は、1枚目の画像フレームをターゲット画像(ターゲットフレーム)とし、N枚目の画像を参照画像(参照フレーム)に設定する(ステップS3)。
次に、コントロール部165は、ターゲットフレームにターゲットブロックを設定し(ステップS4)、動き検出・動き補償部16において、画像メモリ部4から、ターゲットブロックバッファ部161へターゲットブロックを読み込み(ステップS5)、参照ブロックバッファ部162へマッチング処理範囲の画素データを読み込む(ステップS6)。
次に、コントロール部165は、参照ブロックバッファ部162から、サーチ範囲内において参照ブロックを読み出し、マッチング処理部163で、後述するようなマッチング処理を行う。そして、この例では、後述するように、マッチング処理部163で算出されたSAD値のうち、後述するSAD値は、SAD値の最小値およびその近傍のSAD値を保持して、二次曲線近似補間処理を行うために、動きベクトル算出部164へ送られる。これをサーチ範囲内のすべての参照ベクトルで繰り返した後、二次曲線近似補間処理部1646で、前述した補間処理を行い、高精度の動きベクトルを出力する(ステップS7)。
次に、コントロール部165は、この高精度の動きベクトルにしたがって、参照ブロックバッファ部162から動き補償画ブロックを読み出し((ステップS8)、ターゲットブロックと同期して、後段の画像重ね合わせ部17へ送る(ステップS9)。
次に、CPU1の制御に従って、画像重ね合わせ部17は、ターゲットブロックと動き補償画ブロックの重ね合わせを行い、重ね合わせたブロックの画像データを画像メモリ部4に貼る。すなわち、画像重ね合わせ部17は、重ね合わせたブロックの画像データを画像メモリ部4に書き込む(ステップS10)。
次に、コントロール部165は、ターゲットフレーム内のすべてのターゲットブロックについてのブロックマッチングを終了したか否か判別し(ステップS11)、すべてのターゲットブロックについては未だブロックマッチングの処理が終了していないと判別したときには、ステップS4に戻って、次のターゲットブロックを設定して、ステップS4〜ステップS11までの処理を繰り返す。
また、コントロール部165は、ステップS11で、ターゲットフレーム内のすべてのターゲットブロックについてのブロックマッチングを終了したと判別したときには、重ね合わすべきすべての参照フレームについての処理が終了したか否か、つまり、M=Nであるか否か判別し(ステップS12)。
ステップS12で、M=Nではないと判別したときには、N=N+1とし(ステップS13)、ステップS3に戻って、このステップS3以降の処理を繰り返す。つまり、Mが3以上の場合は、全てのターゲットブロックにおいて重ね合わせを行った画像を次のターゲット画像とし、3枚目の画像を参照フレームとして、上記の処理を繰り返して行く。これをM枚目の重ね合わせが終わるまで繰り返す。そして、ステップS12で、M=Nであると判別したときには、この処理ルーチンを終了する。
なお、以上の静止画のノイズ低減処理方法は、M枚の画像データを画像メモリ部4に貼っておく手法であるが、1枚撮影するたびに重ね合わせを行っても良い。その場合には、画像メモリ部4に記憶する画像フレームは、1枚でよいので、図10の処理ルーチンのノイズ低減処理方法に比べて、撮影間隔は長くなるが、メモリコストを最小にすることが可能である。
<動画撮影時>
次に、この実施の形態の撮像装置において、動画撮影時における画像の重ね合わせによるノイズ低減処理のフローチャートを、図11に示す。この図11のフローチャートの各ステップも、CPU1およびこのCPU1により制御される動き検出・動き補償部16のコントロール部165の制御の下に実行されるものである。動画記録ボタンがユーザにより操作されると、CPU1は、図11の処理をスタートから開始するように指示する。
この実施の形態では、動き検出・動き補償部16は、ターゲットブロック単位でマッチング処理をするのに適した構成とされている。そこで、解像度変換部15は、CPU1の制御に従って、フレーム画像を保持し、ターゲットブロック単位で、動き検出・動き補償部16へ画像データを送る(ステップS21)。
動き検出・動き補償部16に送られたターゲットブロックの画像データは、ターゲットブロックバッファ部161に格納される。次に、コントロール部165は、ターゲットブロックに対応した参照ベクトルを設定し(ステップS22)、画像メモリ部4から、マッチング処理範囲の画像データを参照ブロックバッファ部162へ読み込む(ステップS23)。
次に、マッチング処理部163および動きベクトル算出部164は、ブロックマッチングによる動き検出処理を行う(ステップS24)。すなわち、マッチング処理部163は、ターゲットブロックの画素値と参照ブロックの画素値との間のSAD値を算出し、算出したSAD値を動きベクトル算出部164へ送る。マッチング処理部163は、この処理をサーチ範囲内のすべての参照ブロックで繰り返す。サーチ範囲内のすべての参照ブロックについてのSAD値の算出が終了した後、動きベクトル算出部164は、最小のSAD値を特定すると共に、その近傍のSAD値を特定し、それらのSAD値を用いて、前述した二次曲線近似補間処理を行い、サブピクセル精度の高精度の動きベクトルを出力する。
次に、コントロール部165は、ステップS24で算出された高精度の動きベクトルにしたがって、参照ブロックバッファ部162から動き補償画ブロックの画像データを読み出し(ステップS25)、ターゲットブロックと同期して、後段の画像重ね合わせ部17へ送る(ステップS26)。
画像重ね合わせ部17においては、ターゲットブロックと動き補償画ブロックの重ね合わせを行う。そして、画像重ね合わせ部17は、その重ね合わせた結果のNR画像の画像データを、NTSCエンコーダ19を通じてモニターディスプレイ6に出力することで、動画記録モニターをすると共に、コーデック部18を通じて記録再生装置部6に送り、記録媒体に記録するようにする(ステップS27)。
画像重ね合わせ部17で重ね合わせされた画像は、また、画像メモリ部4に格納し、次のフレーム(ターゲットフレーム)での参照フレームとなるようにする(ステップS28)。
そして、CPU1は、動画記録停止操作がユーザによりなされたか否か判別し(ステップS29)、当該動画記録停止操作がユーザによりなされていないと判別したときには、ステップS21に戻って、このステップS21以降の処理を繰り返すように指示する。また、ステップS29で、動画記録停止操作がユーザによりなされたと判別したときには、CPU1は、この処理ルーチンを終了するようにする。
以上の動画のノイズ低減処理の処理ルーチンにおいては、1フレーム前の画像フレームを参照フレームとするようにしたが、1フレームよりもさらに過去のフレームの画像を参照フレームとして用いるようにしても良い。また、1フレーム前と2フレーム前の画像を、画像メモリ部4に格納しておき、それらの2枚の画像情報の内容から、どちらの画像フレームを参照フレームにするかを選択しても良い。(どちらかの画像を選択するかのためには、どのような画像内容の識別をするのか、また、どのような識別処理をするのかについて、例を記載してください)
上記のような手段、手順、システム構成を用いることで、一つの共通したブロックマッチング処理のハードウエアで、静止画ノイズ低減処理および動画ノイズ低減処理を行うことが可能になる。
[動きベクトル算出部164について]
次に、動きベクトル算出部164の構成例およびその動作について説明する。まず、この発明の実施形態における動きベクトル算出部164の構成例およびその動作を説明する前に、従来と同様に、SADテーブルを用いる比較例について説明する。
<比較例>
図12に、動きベクトル算出部164の比較例の構成図を示す。この比較例の動きベクトル算出部164は、SAD値書き込み部1641と、SADテーブルTBLと、SAD値比較部1642と、SAD値保持部1643と、X方向(水平方向)近傍値抽出部1644と、Y方向(垂直方向)近傍値抽出部1645と、二次曲線近似補間処理部1646とからなる。
この比較例の動きベクトル算出部164においては、SAD値書き込み部1641は、マッチング処理部163から送られてくる、参照ブロックの位置情報(参照ベクトル)と、当該参照ブロックのSAD値をSADテーブルTBLに格納する。マッチング処理部163でサーチ範囲の全てのマッチング処理が終わったら、SAD値比較部1642は、SADテーブルTBLのすべてのSAD値について比較処理を行って、最小のSAD値を探索し、検出した最小のSAD値およびそのSAD値を呈する参照ブロックの位置情報(参照ベクトル)をSAD値保持部1643に保持する。
次に、検出した最小のSAD値の近傍4個のSAD値およびそれぞれのSAD値を呈する参照ブロックの位置情報(参照ベクトル)をSADテーブルTBLから読み出して、SAD値保持部1643に保持する。
次に、X方向(水平方向)近傍値抽出部1644は、SAD値保持部1643に保持された、前記検出した最小のSAD値とそのX方向(水平方向)の近傍値とを、それぞれの参照ブロックの位置情報(参照ブロック)と共に読み出し、二次曲線近似補間処理部1646に送る。二次曲線近似補間処理部1646は、二次曲線による補間処理を、X方向(水平方向)について、前述したようにして実行する。
次に、Y方向(垂直方向)近傍値抽出部1645は、SAD値保持部1643に保持された、前記検出した最小のSAD値とそのY方向(垂直方向)の近傍値とを、それぞれの参照ブロックの位置情報(参照ブロック)と共に読み出し、二次曲線近似補間処理部1646に送る。二次曲線近似補間処理部1646は、二次曲線による補間処理を、Y方向(垂直方向)について、前述したようにして実行する。
こうして、二次曲線近似補間処理部1646は、二次曲線による補間処理を、X方向およびY方向の2回行い、サブピクセル精度の高精度の動きベクトルを算出する。
この比較例におけるブロックマッチング処理の流れの例を、図13のフローチャートに示す。この比較例のフローチャートの各ステップは、マッチング処理部163および動きベクトル算出部164においてなされるものである。
先ず、マッチング処理部163は、参照ベクトル(Vx,Vy)を設定して、SAD値を計算する参照ブロック位置を設定し(ステップS31)、設定した参照ブロックの画素データを、参照ブロックバッファ部162から読み込む(ステップS32)と共に、ターゲットブロックバッファ部161のターゲットブロックの画素データを読み込んで、ターゲットブロックおよび参照ブロックの各画素データの差分の絶対値の総和、つまり、SAD値を求め(ステップS33)、求めたSAD値を動きベクトル算出部164に送出する。動きベクトル算出部164では、SAD値書き込み部1641が、受け取ったSAD値を、対応する参照ブロックの位置、つまり、参照ベクトルに対応する位置に格納する(ステップS34)。
次に、マッチング処理部163は、サーチ範囲の全ての参照ブロックの位置(参照ベクトル)でマッチング処理を終了したか否か判別し(ステップS35)、未だ、サーチ範囲においては、未処理の参照ブロックがあると判別したときには、ステップS31に戻り、前述したステップS31以降の処理を繰り返す。
また、マッチング処理部163は、ステップS35で、サーチ範囲の全ての参照ブロックの位置(参照ベクトル)でマッチング処理を終了したと判別したときには、その旨を動きベクトル算出部164に伝える。
動きベクトル算出部164では、これに応じて、SAD値比較部1642が、SADテーブルTBLの各SAD値を比較して、SADテーブルTBLにおいて最小となるSAD値を検出し、検出したSAD値の最小値Sminを、その参照ベクトル(参照ブロック位置の情報)と共にSAD値保持部1643の最小値格納部に保持する。そして、SAD値保持部1643は、検出された最小のSAD値Sminの位置の近傍位置の近傍SAD値Sx1、Sx2、Sy1、Sy2を、SADテーブルTBLから取得して、それぞれの格納部に保持する(ステップS36)。
次に、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小のSAD値Sminとその近傍SAD値Sx1、Sx2、Sy1、Sy2およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、サブピクセル精度の高精度の動きベクトルを算出する(ステップS37)。以上で、1枚の参照フレームについての比較例のブロックマッチング処理を終了する。
以上説明した比較例は、SADテーブルTBLを生成し、当該生成したSADテーブルTBLから二次曲線近似補間用の最小のSAD値と、その近傍の4個のSAD値を抽出するようにするので、SADテーブルTBLの分だけ、大規模なメモリを必要とする。
この実施形態では、SADテーブルTBLを生成しないことにより、より回路規模を削減するとともに、処理時間も削減することができるようにする。
<実施形態の動きベクトル算出部164の第1の例>
上述したように、ブロックマッチング処理は、参照ベクトルの示す位置を参照ブロックの位置とし、各参照ブロックの各画素とターゲットブロックの各画素のSAD値を計算し、その計算処理を、サーチ範囲内のすべての参照ベクトルの示す位置の参照ブロックについて行う。
ここで、サーチ範囲内において参照ブロックの位置を変えて、動き補償ブロックをサーチする場合に、サーチを画面(フレーム)の端から順番に行う、画面(フレーム)の中心から外側に向かって行う、などいろいろな方法が考えられるが、この実施の形態では、サーチ方向は、図14(A)で矢印120に示すように設定され、サーチ範囲の左上端から水平方向にサーチを開始し、1ライン分のサーチが終わった後、垂直方向に1ライン下のラインを、左端から水平方向にサーチする、という手順を繰り返すサーチ方法を採用する。
すなわち、図14(B)に示すように、サーチ範囲106において、当該サーチ範囲106の左上から水平方向に参照ブロック108を順次に設定してサーチして、各参照ブロック108についてのSAD値の計算を行う。すると、図14(C)に示すように、対応するSADテーブルも左上から水平方向に埋まっていく。このとき、実際にマッチング処理に使用される画素データの範囲は、参照ブロック108の大きさに応じたマッチング処理範囲110となるのは、前述した通りである。
図7に示したように、この例のサブピクセル精度の二次曲線近似補間処理を行うためには、SAD値の最小値Smin、およびその近傍のSAD値Sx1、Sx2、Sy1、Sy2が求まれば良い。
各参照ブロックについてのSAD値を算出した際に、その算出したSAD値と、その時点までのSAD値の最小値とを比較して、算出したSAD値がその時までのSAD値の最小値よりも小さければ、算出したSAD値を最小値として保持すると共に、そのSAD値とそのときの参照ベクトルを保持することにより、SAD値の最小値および当該最小値を取る参照ブロックの位置情報(参照ベクトルの情報)とを、SADテーブルを生成することなく、求めることができる。
そして、検出したSAD値の最小値を保持すると共に、その最小SAD値となる参照ブロック位置の近傍の参照ブロックのSAD値を、近傍SAD値として保持するようにすれば、近傍SAD値をも、SADテーブルを生成することなく、保持することができる。
このとき、この例では、図15(A)に示すように、上述の図14(A)に示したようなサーチ方法を採用しているので、従来のSADテーブルTBLにおいて水平方向の1ライン分のSAD値を記憶する容量のメモリ(以下、ラインメモリという)を設ければ、新たに参照ブロックのSAD値が算出されたときには、SADテーブルTBL上では、図15(B)で斜線を付して示すように、当該新たに算出されたSAD値121に対して、それより前に算出されたSADテーブルTBLの1ライン分の複数個の参照ブロックのSAD値が、格納データ122として前記ラインメモリに格納されていることになる。
そこで、新たに算出された参照ブロックのSAD値が、最小のSAD値として検出されたときには、SADテーブルTBL上において、前記最小SAD値121を呈する参照ブロックの位置の1ライン上の位置の参照ブロックのSAD値123(近傍SAD値(Sy1))と、前記最小SAD値121を呈する参照ブロックの位置の左横の位置の参照ブロックのSAD値124(近傍SAD値(Sx1))は、前記ラインメモリから取得することができる。
そして、SADテーブルTBL上において、最小SAD値の参照ブロックの位置の右横の位置の参照ブロックのSAD値である近傍SAD値(Sx2)(図15(C)の125参照)は、後で、その参照ブロック位置で算出されたSAD値を保持すればよい。同様に、SADテーブルTBL上において、新たに算出された最小SAD値の参照ブロックの位置の1ライン下の位置の参照ブロックのSAD値である近傍SAD値(Sy2)(図15(C)の126参照)も、後で、その参照ブロック位置で算出されたSAD値を保持すればよい。
以上のことを考慮して、この動きベクトル算出部164の第1の例は、図16に示すようなハードウエア構成とする。
すなわち、この動きベクトル算出部164の第1の例においては、図12の比較例のSADテーブルTBLは備えず、SAD値書き込み部1641と、SAD値比較部1642と、SAD値保持部1643と、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645と、二次曲線近似補間処理部1646と、SADテーブルTBLの1ライン分のメモリ(ラインメモリという)1647とを備えてなる。
そして、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645と、二次曲線近似補間処理部1646とは、前述した比較例と同様の動作を行うが、SAD値書き込み部1641、SAD値比較部1642、SAD値保持部1643およびラインメモリ1647の部分は、前述の比較例とは、異なる動作を行う。
SAD値保持部1643は、図12の比較例と同様に、最小SAD値Sminおよび近傍SAD値Sx1、Sx2、Sy1、Sy2の保持部(メモリ)を備える。そして、この第1の例においては、SAD値保持部1643は、その最小SAD値保持部からの最小SAD値SminをSAD値比較部1642に供給する共に、保持している近傍SAD値のうち、最小SAD値Sminの右側の近傍SAD値Sx2の参照ブロックの位置情報(参照ベクトル)と、最小SAD値Sminの下側の近傍SAD値Sy2の参照ブロックの位置情報(参照ベクトル)とを、SAD値書き込み部1641に供給する。
SAD値比較部1642は、この第1の例においては、マッチング処理部163からの参照ブロックの位置情報(参照ベクトル)と、当該参照ブロックのSAD値Sinとを受けると共に、SAD値保持部1643の最小SAD値保持部からの最小SAD値Sminとを受ける。
そして、SAD値比較部1642は、マッチング処理部163からの当該時点で算出されたSAD値Sinと、SAD値保持部1643の最小SAD値保持部からの最小SAD値Sminとの両者を比較し、マッチング処理部163からの当該時点で算出されたSAD値Sinの方が小さいときには、当該時点で、そのSAD値を最小SAD値であるとして検出し、また、SAD値Sinの方が小さいときには、当該時点では、SAD値保持部1643の最小SAD値保持部からの最小SAD値Sminが未だ最小値であると検出する。そして、SAD値比較部1642は、その検出結果の情報DETをSAD値書き込み部1641およびSAD値保持部1643に供給する。
SAD値書き込み部1641は、マッチング処理部163からの算出されたSAD値Sinおよびその位置情報(参照ベクトル)を一時保持するための1画素分のバッファメモリを備え、この第1の例においては、マッチング処理部163からの参照ブロックの位置情報(参照ベクトル)と、当該参照ブロックのSAD値Sinとを、ラインメモリ1647に書き込む。この場合、ラインメモリ1647は、シフトレジスタと同様の動作を行い、空きスペースが無いときには、新規の位置情報およびSAD値が記憶されると、ラインメモリ1647において最も古い前記位置情報およびSAD値が廃棄される。
また、SAD値書き込み部1641は、算出されたSAD値Sinおよびその位置情報をラインメモリ1647に書き込む前に、この第1の例においては、次のような処理を行う。
すなわち、SAD値書き込み部1641は、SAD値比較部1642からの比較検出結果の情報DETが、SAD値Sinが最小値であることを示しているときには、マッチング処理部163からの参照ブロックの位置情報(参照ベクトル)と、当該参照ブロックのSAD値Sinとを、SAD値保持部1643に送る。
SAD値保持部1643は、SAD値比較部1642からの比較検出結果の情報DETにより、SAD値Sinが最小値であることを検知し、SAD値書き込み部1641から送られてくる参照ブロックの位置情報(参照ベクトル)と、当該参照ブロックのSAD値Sinとを、最小SAD値保持部に格納する。
また、SAD値書き込み部1641は、この第1の例においては、マッチング処理部163からの参照ブロックの位置情報(参照ベクトル)が、SAD値保持部1643から受け取った近傍SAD値Sx2またはSy2の位置情報と一致したときにも、マッチング処理部163からの参照ブロックの位置情報(参照ベクトル)と、当該参照ブロックのSAD値Sinとを、SAD値保持部1643に送る。
SAD値保持部1643は、受け取った参照ブロックの位置情報(参照ベクトル)から、いずれの近傍SAD値に関する情報かを認識して、対応する近傍SAD値保持部に格納する。
以上の処理をサーチ範囲における全ての参照ブロックについて終了すると、SAD値保持部1643には、前述したように、最小SAD値およびその位置情報ならびに4個の近傍SAD値およびその位置情報が保持される。
そこで、比較例と同様にして、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小のSAD値Sminとその近傍SAD値Sx1、Sx2、Sy1、Sy2およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、サブピクセル精度の高精度の動きベクトルを算出する。
以上のようにして、第1の例においては、SADテーブルTBLの代わりに、SADテーブルTBLの1ライン分のラインメモリを用いることにより、サブピクセル精度の動きベクトルの検出ができる。
図17および図18に、上述の図16に示した第1の例の動きベクトル算出部164と、マッチング処理部163におけるブロックマッチング手法のフローチャートを示す。
はじめに、動きベクトル算出部164のSAD値保持部1643の最小SAD値Sminの初期値を設定する(図17のステップS41)。この最小SAD値Sminの初期値としては、例えば、画素の差分の最大値が設定される。
次に、マッチング処理部163では、参照ベクトル(Vx,Vy)を設定して、SAD値を計算する参照ブロック位置を設定し(ステップS42)、設定した参照ブロックの画素データを、参照ブロックバッファ部162から読み込む(ステップS43)と共に、ターゲットブロックバッファ部161のターゲットブロックの画素データを読み込んで、ターゲットブロックおよび参照ブロックの各画素データの差分の絶対値の総和、つまり、SAD値を求め(ステップS44)、求めたSAD値を動きベクトル算出部164に送出する。
動きベクトル算出部164では、SAD値比較部1642が、マッチング処理部163で算出されたSAD値Sinと、SAD値保持部1643に保持されている最小SAD値Sminとを比較して、算出されたSAD値Sinが、それまで保持されている最小SAD値Sminよりも小さいか否か判別する(ステップS45)。
このステップS45で、算出されたSAD値Sinが最小SAD値Sminより小さいと判別したときには、ステップS46に進み、SAD値保持部1643に保持される最小SAD値Sminの情報および当該最小SAD値Sminを呈する参照ブロック位置の1ピクセル上および1ピクセル左の位置の参照ブロックのSAD値およびその位置情報(参照ベクトル)の更新がなされる。
すなわち、SAD値比較部1642は、算出されたSAD値Sinが最小SAD値Sminより小さい旨の比較結果の情報DETをSAD値書き込み部1641に送る。すると、SAD値書き込み部1641は、当該算出されたSAD値Sinおよびその位置情報(参照ベクトル)を、新たな最小SAD値Sminの情報としてSAD値保持部1643に送ると共に、図15(B)から分かるように、ラインメモリ1647の最も古いSAD値およびその位置情報(参照ベクトル)と、最も新しいSAD値およびその位置情報(参照ベクトル)とを、最小SAD値の位置の1ピクセル上の位置の参照ブロックのSAD値Sy1の情報および1ピクセル左の位置の参照ブロックのSAD値Sx1の情報として、SAD値保持部1643に送る。SAD値保持部1643は、受け取った新たな最小SAD値Sminの情報および1ピクセル上の位置の参照ブロックのSAD値Sy1の情報および1ピクセル左の位置の参照ブロックのSAD値Sx1の情報により、それぞれ対応する保持情報を更新する。
ステップS46の後には、SAD値書き込み部1641は、ラインメモリ1647に、算出されたSAD値Sinを書き込む(ステップS47)。
また、ステップS45で、算出されたSAD値Sinが最小SAD値Sminより大きいと判別したときには、ステップS46の保持情報の更新処理は行わずにステップS47に進み、SAD値書き込み部1641は、ラインメモリ1647に、算出されたSAD値Sinを書き込む。
次に、SAD値書き込み部1641は、算出されたSAD値Sinについての位置情報(参照ベクトル)の指す位置が、最小SAD値Sminとして保持されている参照ブロックの位置の1ピクセル下の参照ブロックの位置であるか否か判別し(ステップS51)、1ピクセル下の参照ブロックの位置であると判別したときには、算出されたSAD値Sinおよびその位置情報(参照ベクトル)をSAD値保持部1643に送る。SAD値保持部1643は、受け取ったSAD値およびその位置情報により、前記1ピクセル下の位置の参照ブロックについての近傍SAD値Sy2の保持情報を更新する(ステップS52)。
ステップS51で、算出されたSAD値Sinについての位置情報(参照ベクトル)の指す位置が、最小SAD値Sminとして保持されている参照ブロックの位置の1ピクセル下の参照ブロックの位置でないと判別したときには、SAD値書き込み部1641は、算出されたSAD値Sinについての位置情報(参照ベクトル)の指す位置が、最小SAD値Sminとして保持されている参照ブロックの位置の1ピクセル下の参照ブロックの位置であるか否か判別する(ステップS53)。
このステップS53で、算出されたSAD値Sinについての位置情報(参照ベクトル)の指す位置が、最小SAD値Sminとして保持されている参照ブロックの位置の1ピクセル右の参照ブロックの位置であると判別したときには、SAD値書き込み部1641は、算出されたSAD値Sinおよびその位置情報(参照ベクトル)をSAD値保持部1643に送る。SAD値保持部1643は、受け取ったSAD値およびその位置情報により、前記1ピクセル右の位置の参照ブロックについての近傍SAD値Sx2の保持情報を更新する(ステップS54)。
ステップS53で、算出されたSAD値Sinについての位置情報(参照ベクトル)の指す位置が、最小SAD値Sminとして保持されている参照ブロックの位置の1ピクセル右の参照ブロックの位置でないと判別したときには、SAD値書き込み部1641は、算出されたSAD値Sinおよびその位置情報(参照ベクトル)は、ラインメモリ1647にのみ書き込み(前述のステップS47)、SAD値保持部1643に送らない。
そして、マッチング処理部163は、サーチ範囲の全ての参照ブロックの位置(参照ベクトル)でマッチング処理を終了したか否か判別し(ステップS55)、未だ、サーチ範囲においては、未処理の参照ブロックがあると判別したときには、図17のステップS42に戻り、前述したステップS42以降の処理を繰り返す。
また、マッチング処理部163は、ステップS55で、サーチ範囲の全ての参照ブロックの位置(参照ベクトル)でマッチング処理を終了したと判別したときには、その旨を動きベクトル算出部164に伝える。
動きベクトル算出部164では、これを受けて、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小のSAD値Sminとその近傍SAD値Sx1、Sx2、Sy1、Sy2およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、サブピクセル精度の高精度の動きベクトルを算出する(ステップS56)。以上で、1枚の参照フレームについての第1の例のブロックマッチング処理を終了する。
以上のように、この第1の例においては、SADテーブルを保持することなく、SADテーブルの1ライン分を設けると共に、SAD値書き込み部1641に1画素分のSAD値を保持しておくだけで、補間処理によるサブピクセル精度の動きベクトル検出を行うことができる。
この第1の例の方法は、SADテーブルを保持する手法と比べて、ブロックマッチング回数は同じであるため、処理時間は変わらず、ハードウエア規模を削減できるという効果を奏する。
なお、上述した第1の例の説明においては、SAD値比較部1642は、マッチング処理部163からの算出されたSAD値Sinと、SAD値保持部163に保持されている最小SAD値Sminとを比較するようにしたが、SAD値比較部1642が最小SAD値の保持部を備え、その保持した最小SAD値と、算出されたSAD値Sinとを比較し、算出されたSinの方が小さいときには、保持した最小SAD値を更新すると共に、その位置情報と共に、SAD値書き込み部1641を通じてSAD値保持部1643に送って、SAD値保持部1643の最小SAD値保持部に保持させるようにしても良い。
<実施形態の動きベクトル算出部164の第2の例>
この動きベクトル算出部164の第2の例においては、第1の例の場合のラインメモリ1647も省略して、より、ハードウエア規模の削減を図るようにした例である。
この第2の例においては、サーチ範囲における参照ブロックのSAD値の最小値Sminおよびその位置情報(参照ベクトル)の検出および保持は、上述した第1の例と全く同様に行う。しかし、近傍SAD値およびその位置情報の取得および保持に関しては、第1の例のように、SAD値Sminの検出時と同時には行わず、検出された最小SAD値Sminの位置情報を、マッチング処理部163に返して、マッチング処理部163で、最小SAD値Sminの近傍4点位置の参照ブロックについてのSAD値を再度、算出して、動きベクトル算出部164に供給するようにする。
動きベクトル算出部164では、当該マッチング処理部163からの再度のブロックマッチング処理により算出された前記近傍4点位置のSAD値およびその位置情報(参照ベクトル)を受け取って、SAD値保持部1643のそれぞれの保持部に格納するようにする。
この動きベクトル算出部164の第1の例のハードウエア構成例を、図19に示す。すなわち、この動きベクトル算出部164の第2の例においては、SADテーブルTBLやラインメモリ1647は備えずに、図19に示すように、SAD値書き込み部1641と、SAD値比較部1642と、SAD値保持部1643と、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645と、二次曲線近似補間処理部1646とを備えてなる。
この第2の例においても、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645と、二次曲線近似補間処理部1646とは、前述した第1の例と同様の動作を行うが、SAD値書き込み部1641、SAD値比較部1642、SAD値保持部1643およびラインメモリ1647の部分は、前述の第1の例とは、異なる動作を行う。
SAD値保持部1643は、第1の例と同様に、最小SAD値Sminおよび近傍SAD値Sx1、Sx2、Sy1、Sy2の保持部(メモリ)を備える。そして、この第2の例においても、SAD値保持部1643は、その最小SAD値保持部からの最小SAD値SminをSAD値比較部1642に供給する。しかし、この第2の例においては、SAD値保持部1643は、第1の例とは異なり、近傍SAD値の位置情報を、SAD値書き込み部1641に供給することしない。
SAD値比較部1642は、この第2の例においても、マッチング処理部163からの当該時点で算出されたSAD値Sinと、SAD値保持部1643の最小SAD値保持部からの最小SAD値Sminとの両者を比較し、マッチング処理部163からの当該時点で算出されたSAD値Sinの方が小さいときには、当該時点で、そのSAD値を最小SAD値であるとして検出し、また、SAD値Sinの方が小さいときには、当該時点では、SAD値保持部1643の最小SAD値保持部からの最小SAD値Sminが未だ最小値であると検出する。そして、SAD値比較部1642は、その検出結果の情報DETをSAD値書き込み部1641およびSAD値保持部1643に供給する。
SAD値書き込み部1641は、前述例と同様に、マッチング処理部163からの算出されたSAD値Sinおよびその位置情報(参照ベクトル)を一時保持するための1画素分のバッファメモリを備える。そして、この第2の例においては、SAD値書き込み部1641は、SAD値比較部1642からの比較検出結果の情報DETが、SAD値Sinが最小値であることを示しているときには、マッチング処理部163からの参照ブロックの位置情報(参照ベクトル)と、当該参照ブロックのSAD値Sinとを、SAD値保持部1643に送る。
SAD値保持部1643は、SAD値比較部1642からの比較検出結果の情報DETにより、SAD値Sinが最小値であることを知り、SAD値書き込み部1641から送られてくる参照ブロックの位置情報(参照ベクトル)と、当該参照ブロックのSAD値Sinとを、最小SAD値保持部に格納する。
以上の処理を、サーチ範囲内の全ての参照ブロックについてマッチング処理部163で算出されたSAD値について、行う。そして、この第2の例においては、サーチ範囲内の全ての参照ブロックについてのSAD値の算出が終了したときに、SAD値保持部1643は、保持している最小SAD値Sminの位置情報(参照ベクトル)Vminを、マッチング処理部163に供給して、当該位置情報の近傍の4点の参照ブロックについてのSAD値の再算出を依頼する。
マッチング処理部163では、SAD値保持部1643から最小SAD値Sminの位置情報(参照ベクトル)Vminを含む近傍参照ブロックについてのSAD値の再算出の依頼を受け取ると、前記最小SAD値Sminの位置情報(参照ベクトル)Vminから、その近傍4点の近傍参照ブロックの位置を検出し、検出した位置の参照ブロックについて、SAD値の算出を行う。そして、算出したSAD値を、その位置情報(参照ベクトル)と共に、SAD値書き込み部1641に順次に供給する。
この場合、マッチング処理部163は、サーチ方向の順にブロックマッチング処理を行うので、近傍SAD値は、SAD値Sy1、Sx1、Sx2、Sy2の順に算出される。SAD値書き込み部1641は、受け取った再算出されたSAD値およびその位置情報(参照ベクトル)を、順次にSAD値保持部1643に供給する。
SAD値保持部1643は、この再算出されたSAD値およびその位置情報(参照ベクトル)を、順次に、対応する格納部に書き込んで保持する。
こうして、近傍参照ブロックについてのSAD値の再算出が終了すると、前述例と同様にして、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小のSAD値Sminとその近傍SAD値Sx1、Sx2、Sy1、Sy2およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、サブピクセル精度の高精度の動きベクトルを算出する。
以上のようにして、第2の例においては、SADテーブルTBLやラインメモリを用いずに、サブピクセル精度の動きベクトルの検出ができる。
図20に、上述の図19に示した第2の例の動きベクトル算出部164と、マッチング処理部163におけるブロックマッチング手法のフローチャートを示す。
はじめに、動きベクトル算出部164のSAD値保持部1643の最小SAD値Sminの初期値を設定する(ステップS61)。この最小SAD値Sminの初期値としては、例えば、画素の差分の最大値が設定される。
次に、マッチング処理部163では、参照ベクトル(Vx,Vy)を設定して、SAD値を計算する参照ブロック位置を設定し(ステップS62)、設定した参照ブロックの画素データを、参照ブロックバッファ部162から読み込む(ステップS63)と共に、ターゲットブロックバッファ部161のターゲットブロックの画素データを読み込んで、ターゲットブロックおよび参照ブロックの各画素データの差分の絶対値の総和、つまり、SAD値を求め、求めたSAD値を動きベクトル算出部164に送出する(ステップS64)。
動きベクトル算出部164では、SAD値比較部1642が、マッチング処理部163で算出されたSAD値Sinと、SAD値保持部1643に保持されている最小SAD値Sminとを比較して、算出されたSAD値Sinが、それまで保持されている最小SAD値Sminよりも小さいか否か判別する(ステップS65)。
このステップS65で、算出されたSAD値Sinが最小SAD値Sminより小さいと判別したときには、ステップS66に進み、SAD値保持部1643に保持される最小SAD値Sminおよびその位置情報の更新がなされる。
すなわち、SAD値比較部1642は、算出されたSAD値Sinが最小SAD値Sminより小さい旨の比較結果の情報DETをSAD値書き込み部1641に送る。すると、SAD値書き込み部1641は、当該算出されたSAD値Sinおよびその位置情報(参照ベクトル)を、新たな最小SAD値Sminの情報としてSAD値保持部1643に送る。SAD値保持部1643は、保持すべき最小SAD値Sminおよびその位置情報を、受け取った新たなSAD値Sinおよびその位置情報に更新する。
ステップS66の後には、ステップS67に進む。また、ステップS65で、算出されたSAD値Sinが最小SAD値Sminより大きいと判別したときには、ステップS66の保持情報の更新処理は行わずにステップS67に進む。
ステップS67では、マッチング処理部163は、サーチ範囲の全ての参照ブロックの位置(参照ベクトル)でマッチング処理を終了したか否か判別し、未だ、サーチ範囲においては、未処理の参照ブロックがあると判別したときには、ステップS62に戻り、前述したステップS62以降の処理を繰り返す。
また、マッチング処理部163は、ステップS67で、サーチ範囲の全ての参照ブロックの位置(参照ベクトル)でマッチング処理を終了したと判別したときには、SAD値保持部1643からの最小SAD値Sminの位置情報を受け取り、その近傍4点の位置の参照ブロックについてのSAD値の再算出を行い、再算出した近傍SAD値をSAD値書き込み部1641を通じてSAD値保持部1643に供給し、保持させるようにする(ステップS68)。
次に、動きベクトル算出部164では、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小のSAD値Sminとその近傍SAD値Sx1、Sx2、Sy1、Sy2およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、サブピクセル精度の高精度の動きベクトルを算出する(ステップS69)。以上で、1枚の参照フレームについての第2の例のブロックマッチング処理を終了する。
この第2の例においては、上述した第1の例に比較して、SAD値を再算出する分だけ、処理時間が増加するが、ラインメモリをも必要としないので、回路規模を、第1の例よりも削減することができる。しかも、SAD値の再算出は、近傍SAD値のみであるので、上述の例では、高々4回であるので、処理時間の増加は少ない。
なお、上述した第2の例の説明では、最小SAD値は、検出しながらSAD値保持部1643に保持するようにしたが、SAD値比較部1642において、最小SAD値を呈する参照ブロックの位置情報(参照ベクトル)を検出して保持するように構成し、1回目のブロックマッチングが終了したら、SAD値比較部1642から、当該最小SAD値の位置情報をマッチング処理部163に供給するようにしてもよい。
その場合には、マッチング処理部163でのSAD値の再算出においては、近傍4点のSAD値に加えて、最小SAD値をも再算出するようにする。この場合には、SAD値の再算出回数が5回となり、1回増加するが、1回目のブロックマッチングでは、SAD値比較部1642のみが動作すればよく、SAD値書き込み部1641およびSAD値保持部1643は、再算出されたSAD値を保持するように動作すればよいので、処理動作が簡略化されるというメリットがある。
また、動き検出および動き補償部16での処理は、ターゲットフレームにおいて設定された複数個のターゲットブロックについて、並列および並行して、実行することができる。その場合には、以上説明した動き検出および動き補償部16のハードウエアの系を、当該並列・並行処理するターゲットブロック数に応じた数だけ、設ける必要がある。
比較例のように、SADテーブルを生成する方法の場合には、当該ターゲットブロック数分だけのSADテーブルを生成する必要があり、非常に大きなメモリが必要となってしまう。しかし、第1の例では、1ターゲットブロック当たりについて、SADテーブルの1ライン分でよく、メモリ容量を非常に少なくすることができる。さらに、第2の例の場合には、ラインメモリをも必要としないので、メモリ容量の大幅な削減をすることができる。
[第2の実施の形態]
以上説明した第1の実施の形態の動きベクトル検出処理は、ピクセル単位で参照ブロックを移動させて、SAD値を算出し、算出したSAD値に基づいてサブピクセル精度の動きを算出することで、マッチング処理時間と回路規模を削減するようにする有効な手法である。
しかしながら、上述の第1の実施の形態では、サーチ範囲内をピクセル単位で参照ブロックを移動させるようにするので、検索するサーチ範囲に比例して、マッチング処理時間が大きくなると共に、第1の例のようにラインメモリを用いる場合には、ラインメモリの容量も大きくなるという問題があった。
そこで、この第2の実施の形態では、ターゲット画像(ターゲットフレーム)に対して縮小画像を作成し、作成した縮小画像でブロックマッチングを行い、縮小画像での動き検出結果を基に、もとのターゲット画像でのブロックマッチングを行う。ここで、縮小画像のことを縮小面、縮小化をしていない元の画像のことを基底面と呼ぶことにする。したがって、この第2の実施の形態では、縮小面でのブロックマッチングを行ったあと、そのマッチング結果を用いて基底面でのブロックマッチングを行う。
図21および図22に、ターゲットフレーム(画像)および参照フレーム(画像)の画像縮小化のイメージを示す。すなわち、この第2の実施の形態においては、例えば図21に示すように、基底面ターゲットフレーム130は、水平方向および垂直方向のそれぞれを、1/n(nは正の数)に縮小して、縮小面ターゲットフレーム132とする。したがって、基底面ターゲットフレーム130を複数個に分割して生成した基底面ターゲットブロック131は、縮小面ターゲットフレームでは、水平方向および垂直方向のそれぞれが1/n×1/nに縮小された縮小面ターゲットブロック133となる。
そして、ターゲットフレームの画像縮小倍率nに合わせて、参照フレームを縮小する。すなわち、図22に示すように、基底面参照フレーム134は、水平方向および垂直方向のそれぞれを、1/nに縮小して、縮小面参照フレーム135とする。そして、基底面参照フレーム134上で検出された動き補償ブロック103についての動きベクトル104は、縮小面参照フレーム135では、1/n×1/nに縮小された縮小面動きベクトル136として検出される。
なお、上記の例では、ターゲットフレームと参照フレームとの画像縮小倍率は同じとしたが、演算量削減のため、ターゲットフレーム(画像)と参照フレーム(画像)とで異なる画像縮小倍率を用い、画素補間等の処理で、両フレームの画素数を合わせて、マッチングを行うようにしてもよい。
また、水平方向および垂直方向のそれぞれの縮小倍率を同一としたが、水平方向と垂直方向とで、縮小倍率を異ならせるようにしても良い。例えば水平方向は1/nに縮小し、垂直方向は、1/mに縮小する場合には、縮小画面は、元の画面の1/n×1/mの大きさになる。
図23に、縮小面参照ベクトルと基底面参照ベクトルの関係を示す。基底面参照フレーム134において、動き検出原点105と、サーチ範囲106が、図23(A)に示すように決定されたとすると、1/n×1/nに画像縮小された縮小面参照フレーム135上では、図23(B)に示すように、サーチ範囲は、1/n×1/nに縮小された縮小面サーチ範囲37とされる。
そして、この第2の実施の形態では、縮小面サーチ範囲137内において、縮小面参照フレーム135での動き検出原点105からの位置ズレ量を表す縮小面参照ベクトル138を設定し、それぞれの縮小面参照ベクトル138が指し示す位置にある縮小面参照ブロック139と、縮小面ターゲットブロック131との相関性を評価する。
この場合、縮小画像において、ブロックマッチングを行うので、縮小面参照フレームにおいてSAD値を算出すべき縮小面参照ブロック位置(縮小面参照ベクトル)の数を少なくすることができ、SAD値の算出回数が少なくなる分だけ、処理を高速化することができる。
縮小面参照ブロック139と縮小面ターゲットブロック131とのブロックマッチングによる相関性評価により、図22に示した、縮小面参照フレーム135における縮小面動きベクトル136が算出される。この縮小面動きベクトル136の精度は、画像が1/n×1/nに縮小されているので、1ピクセルのn倍の低精度となっている。そこで、この算出された縮小面動きベクトル136をn倍しても、基底面参照フレーム134において、1ピクセル精度の動きベクトル104は得られない。
しかし、基底面参照フレーム134においては、縮小面動きベクトル136をn倍した動きベクトルの近傍に、1ピクセル精度の基底面動きベクトル141が存在することは明らかである。
そこで、この第2の実施の形態では、図23(C)に示すように、基底面参照フレーム134において、縮小面動きベクトル136をn倍した動きベクトルが指し示す位置を中心として、基底面動きベクトル141が存在するであろうと考えられる狭い範囲に、基底面サーチ範囲140を設定する。
そして、図23(C)に示すように、この基底面サーチ範囲内の位置を示すものとして、基底面参照フレーム134における基底面参照ベクトル141を設定し、各基底面参照ベクトル141が指し示す位置に基底面参照ブロック139を設定して、基底面参照フレーム134におけるブロックマッチングを行うようにする。
ここで設定されるサーチ範囲140は、算出した縮小面動きベクトル136をn倍した動きベクトルが指し示す位置を中心とした狭い範囲でよいので、基底面参照フレーム134においてSAD値を算出すべき基底面参照ブロック位置(基底面参照ベクトル)の数を少なくすることができ、SAD値の算出回数が少なくなる分だけ、処理を高速化することができる。
こうして、基底面参照フレーム134において、ピクセル精度の基底面動きベクトル136が検出できたら、この第2の実施の形態においても、前述した第1の実施の形態と同様にして、基底面動きベクトル136が指し示す参照ブロックのSAD値、すなわち、最小SAD値と、その近傍の近傍SAD値とを用いて、この例においても二次曲線近似補間処理を行って、サブピクセル精度の動きベクトルを算出するようにする。
そして、この第2の実施の形態においても、ハードウエア構成は、図1に示したものと同様に構成することができる。ただし、この第2の実施の形態においては、動き検出・動き補償部16でのブロックマッチング処理において、上述したように、一旦、縮小画像にしてマッチング処理を行って縮小面動きベクトルを検出し、その縮小面動きベクトルに基づいた狭サーチ範囲において、元の大きさの基底面において動きベクトルを算出し、さらに、補間処理を行う構成が、第1の実施の形態とは異なる。
そして、ブロックマッチング処理において、上述したSADテーブルTBLを用いない第1の例または第2の例が用いられるのは、第1の実施の形態と同様である。
図24および図25に、この第2の実施の形態における動き検出・動き補償部16でのブロックマッチング処理の動作例のフローチャートを示す。この動作例は、動きベクトル算出方法として、前述した第2の例を用いた場合である。動きベクトル算出方法として、前述した第1の例をも用いることができることは言うまでもない。
はじめに、動き検出・動き補償部16において、ターゲットブロックバッファ部161から、ターゲットブロックの縮小画、つまり、縮小面ターゲットブロックを読み込む(図24のステップS71)。次に、動きベクトル算出部164のSAD値保持部1643の最小SAD値Sminの初期値として、縮小面最小SAD値の初期値を設定する(ステップS72)。この縮小面最小SAD値Sminの初期値としては、例えば、画素の差分の最大値が設定される。
次に、マッチング処理部163では、縮小面サーチ範囲を設定すると共に、設定した縮小サーチ範囲において、縮小面参照ベクトル(Vx/n,Vy/n)を設定して、SAD値を計算する縮小面参照ブロック位置を設定する(ステップS73)。そして、設定した縮小面参照ブロックの画素データを、参照ブロックバッファ部162から読み込み(ステップS74)、縮小面ターゲットブロックおよび縮小面参照ブロックの各画素データの差分の絶対値の総和、つまり、縮小面SAD値を求め、求めた縮小面SAD値を動きベクトル算出部164に送出する(ステップS75)。
動きベクトル算出部164では、SAD値比較部1642が、マッチング処理部163で算出された縮小面SAD値Sinと、SAD値保持部1643に保持されている縮小面最小SAD値Sminとを比較して、算出された縮小面SAD値Sinが、それまで保持されている縮小面最小SAD値Sminよりも小さいか否か判別する(ステップS76)。
このステップS76で、算出された縮小面SAD値Sinが縮小面最小SAD値Sminより小さいと判別したときには、ステップS77に進み、SAD値保持部1643に保持される縮小面最小SAD値Sminおよびその位置情報の更新がなされる。
すなわち、SAD値比較部1642は、算出された縮小面SAD値Sinが縮小面最小SAD値Sminより小さい旨の比較結果の情報DETをSAD値書き込み部1641に送る。すると、SAD値書き込み部1641は、当該算出された縮小面SAD値Sinおよびその位置情報(参照ベクトル)を、新たな縮小面最小SAD値Sminの情報としてSAD値保持部1643に送る。SAD値保持部1643は、保持すべき縮小面最小SAD値Sminおよびその位置情報を、受け取った新たな縮小面SAD値Sinおよびその位置情報に更新する。
ステップS77の後には、ステップS78に進む。また、ステップS76で、算出された縮小面SAD値Sinが縮小面最小SAD値Sminより大きいと判別したときには、ステップS77の保持情報の更新処理は行わずにステップS78に進む。
ステップS78では、マッチング処理部163は、縮小面サーチ範囲の全ての縮小面参照ブロックの位置(縮小面参照ベクトル)でマッチング処理を終了したか否か判別し、未だ、縮小面サーチ範囲においては、未処理の縮小面参照ブロックがあると判別したときには、ステップS73に戻り、前述したステップS73以降の処理を繰り返す。
また、マッチング処理部163は、ステップS78で、縮小面サーチ範囲の全ての縮小面参照ブロックの位置(縮小面参照ベクトル)でマッチング処理を終了したと判別したときには、SAD値保持部1643からの縮小面最小SAD値Sminの位置情報(縮小面動きベクトル)を受け取り、受け取った縮小面動きベクトルをn倍したベクトルが指し示す位置座標を中心とした比較的狭い範囲として、基底面サーチ範囲を、基底面ターゲットフレームに設定し(ステップS79)、ターゲットブロックバッファ部161から、基底面ターゲットブロックの画素データを読み込む(ステップS80)。
そして、次に、動きベクトル算出部164のSAD値保持部1643の最小SAD値Sminの初期値として、基底面最小SAD値の初期値を設定する(図25のステップS81)。この基底面最小SAD値Sminの初期値としては、例えば、画素の差分の最大値が設定される。
次に、マッチング処理部163では、ステップS79で設定した基底面縮小サーチ範囲において、基底面参照ベクトル(Vx,Vy)を設定して、SAD値を計算する基底面参照ブロック位置を設定する(ステップS82)。そして、設定した基底面参照ブロックの画素データを、参照ブロックバッファ部162から読み込み(ステップS83)、基底面ターゲットブロックおよび基底面参照ブロックの各画素データの差分の絶対値の総和、つまり、基底面SAD値を求め、求めた基底面SAD値を動きベクトル算出部164に送出する(ステップS84)。
動きベクトル算出部164では、SAD値比較部1642が、マッチング処理部163で算出された基底面SAD値Sinと、SAD値保持部1643に保持されている基底面最小SAD値Sminとを比較して、算出された基底面SAD値Sinが、それまで保持されている基底面最小SAD値Sminよりも小さいか否か判別する(ステップS85)。
このステップS85で、算出された基底面SAD値Sinが基底面最小SAD値Sminより小さいと判別したときには、ステップS86に進み、SAD値保持部1643に保持される基底面最小SAD値Sminおよびその位置情報の更新がなされる。
すなわち、SAD値比較部1642は、算出された基底面SAD値Sinが基底面最小SAD値Sminより小さい旨の比較結果の情報DETをSAD値書き込み部1641に送る。すると、SAD値書き込み部1641は、当該算出された基底面SAD値Sinおよびその位置情報(参照ベクトル)を、新たな基底面最小SAD値Sminの情報としてSAD値保持部1643に送る。SAD値保持部1643は、保持すべき基底面最小SAD値Sminおよびその位置情報を、受け取った新たな基底面SAD値Sinおよびその位置情報に更新する。
ステップS86の後には、ステップS87に進む。また、ステップS85で、算出された基底面SAD値Sinが基底面最小SAD値Sminより大きいと判別したときには、ステップS86の保持情報の更新処理は行わずにステップS87に進む。
ステップS87では、マッチング処理部163は、基底面サーチ範囲の全ての基底面参照ブロックの位置(基底面参照ベクトル)でマッチング処理を終了したか否か判別し、未だ、基底面サーチ範囲においては、未処理の基底面参照ブロックがあると判別したときには、ステップS82に戻り、前述したステップS82以降の処理を繰り返す。
また、マッチング処理部163は、ステップS87で、基底面サーチ範囲の全ての基底面参照ブロックの位置(基底面参照ベクトル)でマッチング処理を終了したと判別したときには、SAD値保持部1643からの基底面最小SAD値Sminの位置情報(基底面動きベクトル)を受け取り、その近傍4点の位置の基底面参照ブロックについての基底面SAD値の再算出を行い、再算出した近傍基底面SAD値をSAD値書き込み部1641を通じてSAD値保持部1643に供給し、保持させるようにする(ステップS88)。
次に、動きベクトル算出部164では、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小の基底面SAD値Sminとその近傍基底面SAD値Sx1、Sx2、Sy1、Sy2およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、サブピクセル精度の高精度の基底面動きベクトルを算出する(ステップS69)。以上で、1枚の参照フレームについてのこの例のブロックマッチング処理を終了する。
上述した図24および図25は、動き検出・動き補償部16の動きベクトル算出部164として、前述の第2の例を用いた場合であるが、第1の例も用いることができることは言うまでもない。
次に、この第2の実施の形態による画像処理方法の効果を、具体例を挙げて説明する。
図26に、上述の実施の形態の説明で用いた基底面、縮小面での、参照ブロック、サーチ範囲、マッチング処理範囲の具体例を示す。図26の例は、水平方向および垂直方向の縮小倍率nは、n=4に設定した場合である。
比較例として、図26(A)および(B)に示すように、例えば、縮小画像を用いない第1の実施の形態における参照ブロック108は、横(水平)×縦(垂直)=32×32ピクセルとし、また、サーチ範囲106は、横(水平)×縦(垂直)=144×64ピクセル、マッチング処理範囲110は、横(水平)×縦(垂直)=176×96ピクセルとする。
すると、上述した第2の実施の形態において、水平方向および垂直方向に、1/n=1/4に縮小された縮小面では、図26(C)および(D)に示すように、縮小面参照ブロック139は、横(水平)×縦(垂直)=8×8ピクセル、縮小面サーチ範囲137は、横(水平)×縦(垂直)=36×16ピクセル、縮小面マッチング処理範囲143は、横(水平)×縦(垂直)=44×24ピクセルとなる。
水平方向および垂直方向に、1/4に縮小された縮小面で、ブロックマッチングを行った場合、縮小面動きベクトルは、4ピクセル精度の動きベクトルであり、単純に4倍しただけでは、1ピクセル精度の動きベクトルに対して誤差が生じる。すなわち、基底面での画素が図27に示すようなものとした場合、基底面でのマッチング処理点148は、当該基底面の全ての画素が対象となるが、1/4に縮小された縮小面で、ブロックマッチングを行う場合のマッチング処理点は、図27において、黒丸で示す4ピクセル単位のものとなっているからである。
しかし、少なくとも、1ピクセル精度の動きベクトルは、縮小面動きベクトルが指し示す縮小面でのマッチング処理点の周囲、4ピクセル範囲以内に存在するであろうことは予測できる。
そこで、この第2の実施の形態では、算出された縮小面動きベクトルを元に基底面サーチ範囲を定める基底面マッチングでは、縮小面動きベクトルを4倍した参照ベクトルが指し示すピクセル位置を中心に、4ピクセル分のサーチ範囲(基底面サーチ範囲140)を決定して、基底面ブロックマッチングを行い、再度動きベクトルを算出する。
したがって、図26(E)および(F)に示すように、基底面参照ブロック142は、横(水平)×縦(垂直)=32×32ピクセル、基底面サーチ範囲140は、横(水平)×縦(垂直)=4×4ピクセル、基底面マッチング処理範囲144は、横(水平)×縦(垂直)=40×40ピクセルとなる。
図28に、この第2の実施の形態のように、縮小面マッチングと、基底面マッチングの2階層マッチングを行う場合において、SADテーブルを使用すると仮定した場合における、基底面、縮小面での、SADテーブルのサイズを示す。なお、図28の例は、図26に示した具体例に対応したものである。
縮小する前の144×64のサーチ範囲(図26(B)参照)の場合におけるSADテーブルTBLは、図28(A)に示すように、145×65点である。
これに対して、36×16の縮小面サーチ範囲(図26(D)参照)の場合における縮小面SADテーブルは、図28(B)に示すように、37点×17点となる。
また、4×4の基底面サーチ範囲(図26(F)参照)の場合における基底面SADテーブルは5点×5点となる。
したがって、階層マッチングを施さない場合のマッチング処理回数は145×65=9425回であるのに対し、階層マッチングを適用した場合のマッチング回数は37×17+5×5=654回となり、処理時間を大幅に短縮できることが分かる。
そして、前述した動きベクトル検出方法の第1の例の場合におけるラインメモリは、縮小面SADテーブルの1ライン分でよいので、37個のSAD値およびその位置情報を格納できるものでよく、SADテーブルTBLの場合の、9425個のSAD値およびその位置情報を格納するメモリに対して非常に小さいメモリでよくなる。
また、前述した動きベクトル検出方法の第2の例の場合には、37個のSAD値およびその位置情報を格納する縮小面SADテーブルさえも不要となるので、さらに回路規模を小さくすることができる。
以上のようにして、上記の第2の実施の形態によれば、階層化したマッチング処理を行った後、基底面において補間処理をすることにより、広いサーチ範囲で、サブピクセル精度の動きベクトル検出を行うことが可能になる。
[第3の実施の形態]
動画のNRシステムでは、精度とともにリアルタイム性、すなわちスピードが要求される。また、図1に示したような、システムバス2に各種処理部が接続されていて、様々な処理を並列に行うシステムでは、バス帯域も重要視される。ここで、バス帯域とは、システムバス上で、輻輳を回避して転送することができるデータレートである。
スピードおよびバス帯域と、動き検出の精度とは、トレードオフの関係にあり、動き検出の精度も求めながら、処理の高速化またはバス帯域の削減を図ろうとすれば、コスト対効果の問題も考えなくてはいけない。
上述の第2の実施の形態では、広いサーチ範囲で、サブピクセル以下の動きベクトル検出を行う例を示したが、この第3の実施の形態では、動き検出の精度を落として、処理の高速化およびバス帯域の削減を行う方法について説明する。
上述した第2の実施の形態では、基底面でのピクセル精度のブロックマッチングをした後、補間処理により、サブピクセル精度の動きベクトル検出をした。これに対して、この第3の実施の形態では、縮小面でブロックマッチングをした後、算出された縮小面動きベクトルで指し示される縮小面参照ブロック位置の近傍の縮小面参照ブロックのSAD値およびその位置情報を用いて、補間処理を行い、ピクセル精度の動きベクトル検出を行うようにする。
図27に示したように、縦および横、ともに1/4に縮小された縮小面でブロックマッチングを行った場合、縮小面動きベクトルは、4ピクセル精度の動きベクトルである。したがって、図29に示すように、縮小面での最小SAD値149が求まった場合、その近傍のSAD値150,151,152,153を用いて補間処理を行い、ピクセル精度の動きベクトルの検出をしようとする場合には、補間倍率は4倍必要ということになる。
例えば、補間処理として、図30に示すように、二次曲線120による近似補間処理を行う場合には、補間倍率の4倍は、前述した式(1)および式(2)において、割り算(減算)を2ビット分行うことと等価である。図30において、二次曲線120上の極小値(SAD値)154は、縮小面における補間処理により求められたピクセル精度の最小SAD値を示している。
なお、上述の説明では、ピクセル精度の動きベクトルを算出するために、縮小倍率と補間倍率は同じにしているが、両者が同じでなくても良い。補間倍率を縮小倍率よりも大きくすれば、ピクセル精度よりも高精度の動きベクトルを算出することができる。
図31に、この第3の実施の形態の場合における動き検出・動き補償部16でのブロックマッチングおよび動きベクトル検出処理の一例のフローチャートを示す。
はじめに、動き検出・動き補償部16において、ターゲットブロックバッファ部161から、ターゲットブロックの縮小画、つまり、縮小面ターゲットブロックを読み込む(図31のステップS91)。次に、動きベクトル算出部164のSAD値保持部1643の最小SAD値Sminの初期値として、縮小面最小SAD値の初期値を設定する(ステップS92)。この縮小面最小SAD値Sminの初期値としては、例えば、画素の差分の最大値が設定される。
次に、マッチング処理部163では、縮小面サーチ範囲を設定すると共に、設定した縮小サーチ範囲において、縮小面参照ベクトル(Vx/n,Vy/n)を設定して、SAD値を計算する縮小面参照ブロック位置を設定する(ステップS93)。そして、設定した縮小面参照ブロックの画素データを、参照ブロックバッファ部162から読み込み(ステップS94)、縮小面ターゲットブロックおよび縮小面参照ブロックの各画素データの差分の絶対値の総和、つまり、縮小面SAD値を求め、求めた縮小面SAD値を動きベクトル算出部164に送出する(ステップS95)。
動きベクトル算出部164では、SAD値比較部1642が、マッチング処理部163で算出された縮小面SAD値Sinと、SAD値保持部1643に保持されている縮小面最小SAD値Sminとを比較して、算出された縮小面SAD値Sinが、それまで保持されている縮小面最小SAD値Sminよりも小さいか否か判別する(ステップS96)。
このステップS96で、算出された縮小面SAD値Sinが縮小面最小SAD値Sminより小さいと判別したときには、ステップS97に進み、SAD値保持部1643に保持される縮小面最小SAD値Sminおよびその位置情報の更新がなされる。
すなわち、SAD値比較部1642は、算出された縮小面SAD値Sinが縮小面最小SAD値Sminより小さい旨の比較結果の情報DETをSAD値書き込み部1641に送る。すると、SAD値書き込み部1641は、当該算出された縮小面SAD値Sinおよびその位置情報(参照ベクトル)を、新たな縮小面最小SAD値Sminの情報としてSAD値保持部1643に送る。SAD値保持部1643は、保持すべき縮小面最小SAD値Sminおよびその位置情報を、受け取った新たな縮小面SAD値Sinおよびその位置情報に更新する。
ステップS97の後には、ステップS98に進む。また、ステップS96で、算出された縮小面SAD値Sinが縮小面最小SAD値Sminより大きいと判別したときには、ステップS97の保持情報の更新処理は行わずにステップS98に進む。
ステップS98では、マッチング処理部163は、縮小面サーチ範囲の全ての縮小面参照ブロックの位置(縮小面参照ベクトル)でマッチング処理を終了したか否か判別し、未だ、縮小面サーチ範囲においては、未処理の縮小面参照ブロックがあると判別したときには、ステップS93に戻り、前述したステップS93以降の処理を繰り返す。
また、マッチング処理部163は、ステップS98で、縮小面サーチ範囲の全ての縮小面参照ブロックの位置(縮小面参照ベクトル)でマッチング処理を終了したと判別したときには、SAD値保持部1643からの縮小面最小SAD値Sminの位置情報(縮小面動きベクトル)を受け取り、その近傍4点の位置の縮小面参照ブロックについての縮小面SAD値の再算出を行い、再算出した近傍縮小面SAD値をSAD値書き込み部1641を通じてSAD値保持部1643に供給し、保持させるようにする(ステップS99)。
次に、動きベクトル算出部164では、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小の縮小面SAD値Sminとその近傍縮小面SAD値Sx1、Sx2、Sy1、Sy2およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、縮小面において、X方向およびY方向の2回行い、前述したようにして、ピクセル精度の動きベクトルを算出する(ステップS100)。以上で、1枚の参照フレームについてのこの例のブロックマッチング処理を終了する。
前述の第2の実施の形態と、この第3の実施の形態で、処理速度とバス帯域の比較を行う。この第3の実施の形態の画像処理方法によれば、処理速度とバス帯域において、下記の3つの利点がある。
第1に、第3の実施の形態では、縮小面でのみ、SAD値の計算を行い、基底面でのSAD値の計算は行わないので、SAD値の計算回数が削減されるため、処理速度が速くなる。
すなわち、図28に示したように、第2の実施の形態のように、階層マッチングと、基底面での補間処理を用いた動きベクトル検出方法を適用した場合のSAD値計算回数は37×17+5×5=654回となるのに対して、第3の実施の形態のように、縮小面での補間処理を適用した場合のSAD値計算回数は629回となり、25回削減することができる。
第2に、この第3の実施の形態では、基底面でのブロックマッチングを行っていないため、基底面ターゲットブロックと、基底面マッチング処理範囲を、画像メモリから読み込まなくて済む。したがって、上記の25回のSAD値の計算だけではなく、基底面のターゲットブロックの読み込み時間と、基底面マッチング処理範囲の全画素分の転送時間が短縮されている。同時に、基底面25回分のバス帯域も削減されている。
第3に、基底面ブロックマッチングと縮小面ブロックマッチングは、SAD値の計算にかかる時間は同じだが、ターゲットブロックバッファ部161および参照ブロックバッファ部162から、マッチング処理部163へ転送する画素の数が異なる。
例えば、前述の例の比較では、図26に示したように、縮小面参照ブロック139は、8×8ピクセル、基底面参照ブロック142は、32×32ピクセルで、転送画素数は16倍になるため、基底面ブロックマッチングの有無は、処理時間に大きな影響を与えている。
また、縮小面ブロックマッチングで、複数ブロックについて並列にSAD値を計算することにより、処理の高速化を図ることができる。並列処理を行うと、参照ブロックバッファ部162に取り込むマッチング処理範囲が大きくなるが、図32(A)に示すように、隣り合う縮小面参照ブロック171,172を並列処理すれば、大半のマッチング処理範囲は共有することができる。このため、バス帯域も削減することができる。
図32(B),(C)は、図26(D)の場合と同じサイズの縮小面参照ブロック、縮小面サーチ範囲で、2個の縮小面参照ブロック171,172のブロックマッチングを並列に処理したときの縮小面サーチ範囲およびマッチング処理範囲の例である。
図26(D)に示したように、並列処理しない場合の縮小面サーチ範囲137は、36×16ピクセル、縮小面マッチング処理範囲143は、44×24ピクセルであったのに対して、図32(B),(C)に示すように、縮小面参照ブロック171の縮小面サーチ範囲173は、40×16ピクセル、縮小面参照ブロック172の縮小面サーチ範囲174は、40×16ピクセル、そして、縮小面参照ブロック171,172の両方に対応した縮小面マッチング処理範囲175は、52×24ピクセルとなっている。
前述したように、第2の実施の形態で行う基底面ブロックマッチングは、縮小面動きベクトルの値によって基底面マッチング処理範囲が決まるため、並列処理時にマッチング処理範囲を共有することができない。したがって、第2の実施の形態の場合において、SAD値の計算の並列化による高速化を図った場合、基底面マッチング処理にかかる処理時間、バス帯域が支配的になる。
これに対して、この第3の実施の形態によれば、上記のように、階層化したマッチング処理において、縮小面ブロックマッチングを行った後、基底面ブロックマッチングを行わずに、縮小面における補間処理をすることにより、処理の高速化およびバス帯域の削減を実現することができる。
[その他の実施の形態および変形例]
上述の実施の形態において、動きベクトル算出部の第1の例においては、サーチ範囲におけるサーチ方向を水平ライン方向に取り、例えばサーチ範囲の左上から順に参照ブロックを移動させるようにしてサーチを行うようにすると共に、SADテーブルの1ライン分のメモリを設けるようにしたが、サーチ範囲におけるサーチ方向を垂直方向に取り、例えばサーチ範囲の左上端から垂直方向にサーチを開始し、垂直方向の1列分のサーチが終わった後、水平方向に、参照ブロックの位置を1つ分、例えば1画素分右の垂直方向の列に移動し、その列の上端から垂直方向にサーチする、という手順を繰り返すサーチ方法を採用するようにしても良い。このようにサーチ範囲の左上端から順に、垂直方向に参照ブロックを移動させるようにしてサーチを行うようにする場合には、SADテーブルの垂直方向の一列分のメモリを設けるようにすれば良い。
ここで、水平方向にサーチ方向を取るか、垂直方向にサーチ方向を取るかは、マッチング処理部、動きベクトル算出部の回路規模を考慮して、より回路規模が小さくなる方を採用するのが好ましい。
なお、前述もしたように、参照ブロックの移動は、1画素毎、また、1ライン毎ではなく、複数画素毎、また、複数ライン毎でもよい。したがって、前者の場合の水平方向の1ライン分メモリは、水平方向における参照ブロックの移動位置分だけでよく、また、後者の場合の垂直方向の一列分のメモリは、垂直方向における参照ブロックの移動位置分だけでよい。つまり、参照ブロックの移動を1画素毎、また、1ライン毎に行う場合には、1ライン分メモリは、1ラインの画素数分の容量のメモリが必要であり、また、垂直方向の一列分メモリは、ライン数分の容量のメモリが必要である。しかし、複数画素毎、また、複数ライン毎に、参照ブロックを移動させる場合には、1画素毎、また、1ライン毎に参照ブロックを移動させる場合よりも、1ライン分メモリおよび1列分メモリの容量は少なくなる。
また、補間処理の方法は、上述した二次曲線近似補間処理に限られるものではなく、前述もしたように、3次曲線や、より高次の曲線を用いた補間処理を行っても良い。
また、上述の実施の形態は、この発明による画像処理装置を撮像装置に適用した場合であるが、この発明は、撮像装置に限られるわけではなく、画像フレーム間の動きを検出する場合に、ブロックマッチングを使用する場合の全てに適用可能である。
また、上述の実施の形態は、画像の重ね合わせによるノイズ低減処理のために、ブロック単位に動きベクトルを検出する場合に、この発明を適用した場合であるが、撮像時の手ぶれによる動きベクトルを検出するためにも用いることができることは言うまでもない。手ぶれによる動きベクトルは、例えば、複数のブロック動きベクトルの平均値として求めることができる。
16…動き検出・動き補償部、17…画像重ね合わせ部、100…ターゲット画像(ターゲットフレーム)、101…参照画像(参照フレーム)、102…ターゲットブロック、104…動きベクトル106…サーチ範囲、107…参照ベクトル、108…参照ブロック、163…マッチング処理部、164…動きベクトル算出部、1643…SAD値保持部、1646…二次曲線近似補間処理部