以下、この発明による画像処理方法を用いた画像処理装置の実施形態として、撮像装置の場合を例にとって、図を参照しながら説明する。また、検出した動きベクトルを用いて行う処理として、複数枚の画像を重ね合わせてノイズ低減を行う場合の例について説明する。
[この発明による画像処理装置の実施形態]
以下に説明する実施の形態の撮像装置では、図2に示すように、連続して撮影された複数枚の画像、例えばP1,P2,P3を、動き検出および動き補償を用いて位置合わせをした後、重ね合わせすることで、ノイズが低減された画像Pmixを得ることができるようにしている。すなわち、複数枚の画像のそれぞれにおけるノイズはランダムなものであるので、同一内容の画像を重ね合わせることで、画像に対してノイズが低減されるものである。
以下の説明において、動き検出および動き補償を用いて複数枚の画像を重ね合わせて、ノイズを低減することをNR(Noise Reduction)と呼び、NRによりノイズ低減された画像をNR画像と称することとする。
この明細書では、ノイズ低減を施したい画面(画像)をターゲット画面(ターゲットフレーム)、重ね合わせたい画面を参照画面(参照フレーム)と定義する。連続して撮影された画像は、撮影者の手ブレなどにより、画像の位置がずれており、両画像の重ね合わせを行うには、位置合わせが重要となる。ここで、考慮しなければならないのは、手ブレのような画面全体のブレと共に、画面内における被写体の動きも存在することである。
このため、被写体に対してもノイズ低減効果を高めるためには、図3に示すように、ターゲットフレーム100を分割して生成される複数個のターゲットブロック102のそれぞれ単位での位置合わせが必要になる。ここで、ターゲットブロック102は、水平方向の複数個の画素×垂直方向の複数ラインからなる。
この実施の形態では、複数個のターゲットブロック102の全てについて、ブロック単位の動きベクトル(以下、ブロック動きベクトルという)104Bを検出し、それぞれのターゲットブロック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のフレームレートのノイズ低減された撮像画像信号を得るようにすることもできる。
以上のように、この実施形態では、静止画および動画両方についての画像重ね合わせによるNRに対応している。一般に、静止画についての画像重ね合わせによるNRは精度が求められるのに対して、動画についての画像重ね合わせによるNRは、リアルタイム性、つまり、高速の処理速度が求められる。
このため、例えば、静止画のNRであれば、広いサーチ範囲とサブピクセル精度の動き検出が必要になる。一方、動画のNRであれば、高速でピクセル精度の動き検出ができ、バス帯域に対する負荷が小さい必要がある。ここで、バス帯域とは、データを転送するバス上で、輻輳を回避してデータ転送することができるデータレートである。
したがって、動き検出を行うブロックマッチング手法は、静止画撮影モード時の静止画NR用と、動画撮影モード時の動画NR用とで、少なくとも2種類の動作モードを用意することが望ましい。
そして、近年、カメラシステムの高機能化に伴い、撮像装置には、様々なアプリケーションが提案され、搭載されている。そのため、NRシステムとして動き検出を行うブロックマッチング手法は、静止画NR用と、動画NR用の2種類の動作モードだけでなく、処理速度、バス帯域、画素サイズ、サーチ範囲、フレームレート、動きベクトルの検出精度、などに応じて、さらに複数種の動作モードを用意することが望ましい。
この実施形態の撮像装置においては、上記の点にかんがみ、後述するように、2種類以上の動作モードを、動き検出を行うブロックマッチングの動作モードとして備え、例えば操作入力部3を通じた、静止画撮影モードまたは動画撮影モードの撮影モードの選択操作、および、処理速度、バス帯域、動きベクトルの検出精度の選択指定操作などに応じて、適切なブロックマッチングの動画モードが自動的に選択されるように構成している。
[撮像装置のハードウエア構成例]
図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の撮像装置の撮像信号処理系10は、記録再生装置部5の記録媒体に記録された撮像画像データの再生処理を行なう。なお、撮像信号処理系10の後述する各部は、制御レジスタ部7を通じたCPU3の制御コマンドを受けて、CPU3の制御を受けながら、それぞれの処理を実行するものである。
図1に示すように、撮像信号処理系10においては、撮像レンズ10Lを備えるカメラ光学系(図示は省略)を通じた被写体からの入射光は、撮像素子11に照射されて撮像される。この例では、撮像素子11は、CCD(Charge Coupled Device)イメージャで構成されている。なお、撮像素子11は、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で後述するような画像の重ね合わせ処理が行われ、その重ね合わせ結果、ノイズ低減されたNR画像の画像データが画像メモリ部4に格納される。
そして、この画像メモリ部4に格納された重ね合わせ結果のNR画像の画像データは、静止画コーデック部18においてコーデック変換され、システムバス2を通じて記録再生装置部5の例えばDVD(Digital Versatile Disc)やハードディスクなどの記録媒体に記録される。この実施形態では、静止画コーデック部18では、JPEG(Joint Photographic Experts Group)方式の静止画についての画像圧縮符号化処理が行われる。
また、この静止画撮影モード時、シャッターボタンが押下操作される前においては、画像補正・解像度変換部15からの画像データは、画像メモリ部4を通じてNTSC(National Television System Committee)エンコーダ20に供給され、このNTSCエンコーダ20によりNTSC方式の標準カラー映像信号に変換され、例えばLCD(Liquid Crystal Display;液晶ディスプレイ)からなるモニターディスプレイ6に供給され、静止画撮影モード時のモニター画像がその表示画面にモニター表示される。
また、ユーザ操作入力部3を通じた撮影指示が、動画記録ボタンの押下による動画撮影指示であったときには、解像度変換された画像データは、画像メモリ部4に書き込まれると共に、リアルタイムに動き検出・動き補償部16へ送られ、後述するようなこの実施形態におけるブロックマッチング処理がなされて、動きベクトルが検出され、当該検出された動きベクトルに基づいて、画像重ね合わせ部17で後述するような画像の重ね合わせ処理が行われ、その重ね合わせ結果、ノイズ低減されたNR画像の画像データが画像メモリ部4に格納される。
そして、この画像メモリ部4に格納された重ね合わせ結果のNR画像の画像データは、NTSCエンコーダ部20を通じてモニターディスプレイ6の表示画面に出力されながら、動画コーデック部19でコーデック変換され、システムバス2を通じて記録再生装置部5に供給され、DVDやハードディスクなどの記録媒体に記録される。この実施形態では、動画コーデック部18では、MPEG(Moving Picture Experts Group)方式の動画についての画像圧縮符号化処理が行われる。
この記録再生装置部5の記録媒体に記録された撮像画像データは、ユーザ操作入力部3を通じた再生開始操作に応じて読み出され、動画コーデック部19に供給されて、再生デコードされる。そして、再生デコードされた画像データはNTSCエンコーダ20を通じてモニターディスプレイ6に供給され、再生画像がその表示画面に表示される。なお、図1では、図示を省略したが、NTSCエンコーダ20からの出力映像信号は、映像出力端子を通じて外部に導出することが可能とされている。
上述した動き検出・動き補償部16は、ハードウエアにより構成することできるし、また、DSP(Digital Signal Processor)を用いて構成することもできる。さらには、CPU1によりソフトウエア処理とすることもできる。
同様に、画像重ね合わせ部17も、ハードウエアにより構成することできるし、また、DSPを用いて構成することもできる。さらには、CPU1によりソフトウエア処理とすることもできる。また、静止画コーデック部18、動画コーデック部19なども、同様である。
[動き検出・動き補償部16の説明]
動き検出・動き補償部16では、この実施の形態では、基本的には、図51〜図56を用いて説明した、SAD値を用いてブロックマッチング処理を行うことで、動きベクトル検出を行うようにする。ただし、この実施の形態では、動き検出・動き補償部16は、後述するようなハードウエアで構成され、共通のハードウエアで、前述した2種類以上のブロックマッチング処理の動作モードを実行することができるように構成している。この実施形態で用いるブロックマッチング処理の複数種の動作モードについて、先ず、説明する。
<縮小面マッチング処理モード>
一般的な従来のブロックマッチングにおける動きベクトル検出処理は、ピクセル単位(1ピクセル単位または複数ピクセル単位)で参照ブロックを移動させて、各移動位置における参照ブロックについてのSAD値を算出し、その算出したSAD値の中から最小値を示すSAD値を検出し、当該最小SAD値を呈する参照ブロック位置に基づいて動きベクトルを検出するようにする。
しかし、このような従来の動きベクトル検出処理では、サーチ範囲内をピクセル単位で参照ブロックを移動させるようにするので、検索するサーチ範囲に比例して、SAD値を算出するマッチング処理回数が多くなって、マッチング処理時間が大きくなると共に、SADテーブルの容量も大きくなるという問題があった。また、システムバス2を介して画像メモリをアクセスする回数も多くなり、バス帯域を大きくしなければならなくなる。
動画NR処理においては、動きベクトルの検出精度を犠牲にしても、処理速度およびバス帯域の削減に優れた手法が望まれる。なお、ここで問題となるバス帯域は、動き検出・動き補償部16が、システムバス2を通じて画像メモリ部4をアクセスする際におけるバス帯域である。
以上のことを考慮して、この実施の形態では、ターゲット画像(ターゲットフレーム)および参照画像(参照フレーム)に対して縮小画像を作成し、作成した縮小画像でブロックマッチングを行う縮小面マッチング処理モードを設ける。なお、この明細書における以下の説明では、縮小画像のことを縮小面、縮小化をしていない元の画像のことを基底面と呼ぶことにする。
図6および図7に、ターゲットフレーム(画面)および参照フレーム(画面)の画像縮小化のイメージを示す。すなわち、この実施の形態においては、例えば図6に示すように、基底面ターゲットフレーム130は、水平方向および垂直方向のそれぞれを、1/n(nは正の数)に縮小して、縮小面ターゲットフレーム132とする。したがって、基底面ターゲットフレーム130を複数個に分割して生成した基底面ターゲットブロック131は、縮小面ターゲットフレームでは、水平方向および垂直方向のそれぞれが1/n×1/nに縮小された縮小面ターゲットブロック133となる。
そして、ターゲットフレームの画像縮小倍率1/nに合わせて、参照フレームを縮小する。すなわち、図7に示すように、基底面参照フレーム134は、水平方向および垂直方向のそれぞれを、1/nに縮小して、縮小面参照フレーム135とする。そして、基底面参照フレーム134上で検出された動き補償ブロック103についての動きベクトル104は、縮小面参照フレーム135では、1/n×1/nに縮小された縮小面動きベクトル136として検出される。
なお、上記の例では、ターゲットフレームと参照フレームとの画像縮小倍率は同じとしたが、演算量削減のため、ターゲットフレーム(画像)と参照フレーム(画像)とで異なる画像縮小倍率を用い、画素補間等の処理で、両フレームの画素数を合わせて、マッチングを行うようにしてもよい。
また、水平方向および垂直方向のそれぞれの縮小倍率を同一としたが、水平方向と垂直方向とで、縮小倍率を異ならせるようにしても良い。例えば水平方向は1/nに縮小し、垂直方向は、1/m(mは正の数で、n≠m)に縮小する場合には、縮小画面は、元の画面の1/n×1/mの大きさになる。
図8に、縮小面参照ベクトルと基底面参照ベクトルの関係を示す。基底面参照フレーム134において、動き検出原点105と、サーチ範囲106が、図8(A)に示すように決定されたとすると、1/n×1/nに画像縮小された縮小面参照フレーム135上では、図8(B)に示すように、サーチ範囲は、1/n×1/nに縮小された縮小面サーチ範囲137とされる。
そして、この実施の形態では、縮小面サーチ範囲137内において、縮小面参照フレーム135での動き検出原点105からの位置ズレ量を表す縮小面参照ベクトル138を設定し、それぞれの縮小面参照ベクトル138が指し示す位置にある縮小面参照ブロック139と、縮小面ターゲットブロック131(図8では図示は省略)との相関性を評価する。
この場合、縮小画像において、ブロックマッチングを行うので、縮小面参照フレーム135においてSAD値を算出すべき縮小面参照ブロック位置(縮小面参照ベクトル)の数を少なくすることができ、SAD値の算出回数(マッチング処理回数)が少なくなる分だけ、処理を高速化することができると共に、SADテーブルを小規模とすることができる。
縮小面サーチ範囲137に応じて定まる縮小面マッチング処理範囲内に設定される複数個の縮小面参照ブロック139と縮小面ターゲットブロック131とのブロックマッチングによる相関性評価により、縮小面参照フレーム135における縮小面動きベクトル136(図8では図示は省略)が算出される。この縮小面動きベクトル136の精度は、画像が1/n×1/nに縮小されているので、1ピクセルのn倍の低精度となっている。
こうして求められた縮小面動きベクトル136を、図8(C)に示すように、画像縮小倍率の逆数倍することで、基底面における動きベクトル(以下、基底面動きベクトルという)104´を得ることができる。ただし、得られた基底面動きベクトル104´の精度は、画像縮小倍率に応じた精度となってしまう。例えば、縦および横、ともに1/4に縮小された縮小面でブロックマッチングを行った場合、基底面動きベクトル104´は、4ピクセル精度の動きベクトルである。
しかし、基底面参照フレーム134においては、縮小面動きベクトル136をn倍した動きベクトルの近傍に、1ピクセル精度の基底面動きベクトル104が存在することは明らかである。
動画のNRシステムでは、精度とともにリアルタイム性、すなわちスピードが要求される。また、図1に示したような、システムバス2に各種処理部が接続されていて、様々な処理を並列に行うシステムでは、バス帯域も重要視される。
スピードおよびバス帯域と、動き検出の精度とは、トレードオフの関係にあり、動き検出の精度も求めながら、処理の高速化またはバス帯域の削減を図ろうとすれば、コスト対効果の問題も考えなくてはいけない。この縮小面マッチング処理モードは、例えば、動画NR処理において、動き検出精度は度外視しても、処理の高速化またはバス帯域の削減を図る場合に好適な処理モードである。
<縮小面マッチング+補間処理モード>
上述の縮小面マッチング処理モードでは、動きベクトルの検出精度が、画像縮小倍率に応じた精度となってしまう。処理速度やバス帯域の削減を、できるだけ維持して、動きベクトルの精度を上げるようにしたモードが、この例の縮小面マッチング+補間処理モードである。
この縮小面マッチング+補間処理モードにおいては、縮小面でブロックマッチングをした後、算出された縮小面動きベクトルで指し示される縮小面参照ブロック位置の近傍の縮小面参照ブロックのSAD値およびその位置情報を用いて、補間処理を行い、ピクセル精度の縮小面動きベクトル検出を行うようにする。
例えば、図9に示すように、縦および横、ともに1/4に縮小された縮小面でブロックマッチングを行った場合、縮小面動きベクトルは、4ピクセル精度の動きベクトルである。しかし、基底面参照フレーム134においては、縮小面動きベクトル136をn倍した動きベクトルの近傍に、1ピクセル精度の基底面動きベクトル104が存在することは明らかである。
したがって、図10に示すように、縮小面での最小SAD値149が求まった場合、その近傍の複数個、例えば上下左右に隣接する4個のSAD値150,151,152,153を用いて補間処理を行い、ピクセル精度の動きベクトルの検出をすることを考えることができる。この場合、補間倍率は4倍必要ということになる。
例えば、二次曲線を用いて、SADテーブルを補間することで、例えばnピクセル単位でマッチング処理を行った縮小面SADテーブルから、ピクセル精度の動きベクトルを算出することを考える。この場合において、二次曲線近似補間ではなく、線形補間や、3次以上の高次の近似曲線補間を用いても良いが、精度とハードウエア化との兼ね合いから、この例では、二次曲線近似補間を用いている。
この二次曲線近似補間においては、図10に示すように、nピクセル精度の縮小面動きベクトル136が指し示す縮小面SADテーブルのSAD値の最小値Smin(図9の参照符号149参照)と、当該最小値Sminの位置の近傍位置の複数個のSAD値(近傍縮小面SAD値という)、この例では、縮小面において、最小値Sminの位置のX方向(水平方向)およびY方向(垂直方向)に隣接する4個の近傍SAD値Sx1、Sx2およびSy1、Sy2(図10の参照符号150,151,152,153参照)を使用する。
図11に示すように、縮小面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方向に、斜め方向を加えて近似曲線を当て嵌めてもかまわない。
以上のような手段、手順を用いることにより、nピクセル単位の精度のSADテーブルの値から、ピクセル精度のベクトル検出結果が得られることを図12に示す。図12の横軸は、補間倍率であり、1次元方向に分解能を何倍にするかを表している。SADテーブルは2次元のため、テーブル面積は、この2乗の割合で削減されるのに対し、補間による誤差は、線形程度にしか増加しないことから、上述の補間手法の有用性が分かる。
この縮小面マッチング+補間処理モードは、例えば、動画NR処理において、処理の高速化またはバス帯域の削減を図りつつ、動き検出精度をピクセル精度とする場合に好適な処理モードである。
<階層化マッチング処理モード1>
上述した縮小面マッチング+補間処理モードによれば、処理の高速化またはバス帯域の削減を図りつつ、動き検出精度をピクセル精度とすることができる。しかし、ピクセル精度と言っても、補間処理により求めるものであるので、補間倍率や補間のために用いる近似曲線により、依存する精度となってしまう。
そこで、動き検出精度を、より高精度のピクセル精度とする処理モードとして、この実施形態では、階層化マッチング処理モード1を備える。
この階層化マッチング処理モード1は、図13(A)および(B)に示すように、先ず、基底面ターゲット画像および基底面参照画像を所定の縮小倍率で縮小して、前述した縮小面マッチング処理を実行し、縮小面動きベクトル136の検出を行う。
図14に示すように、縮小面サーチ範囲137に応じて定まる縮小面マッチング処理範囲143内に設定される複数個の縮小面参照ブロック139と縮小面ターゲットブロック131とのブロックマッチングによる相関性評価により、縮小面参照フレーム135における縮小面動きベクトル136が算出される。
前述したように、この縮小面動きベクトル136の精度は、画像が1/n×1/nに縮小されているので、1ピクセルのn倍の低精度となっている。そこで、この算出された縮小面動きベクトル136をn倍しても、基底面参照フレーム134において、1ピクセル精度の動きベクトル104は得られない。しかし、基底面参照フレーム134においては、縮小面動きベクトル136をn倍した動きベクトルの近傍に、1ピクセル精度の基底面動きベクトル104が存在することは明らかである。
そこで、この実施の形態の階層化マッチング処理モード1においては、図13(C)および図14に示すように、基底面参照フレーム134において、縮小面動きベクトル136をn倍した動きベクトル(基底面参照ベクトル141)が指し示す位置を中心として、基底面動きベクトル104が存在するであろうと考えられる狭い範囲に、基底面サーチ範囲140を設定し、設定された基底面サーチ範囲140に応じて基底面マッチング処理範囲144を設定する。
そして、図13(C)および図14に示すように、この基底面サーチ範囲140内の位置を示すものとして、基底面参照フレーム134における基底面参照ベクトル141を設定し、各基底面参照ベクトル141が指し示す位置に基底面参照ブロック142を設定して、基底面参照フレーム134におけるブロックマッチングを行うようにする。ここで、検出される基底面動きベクトルの精度は、ピクセル精度であることは言うまでもない。
ここで設定された基底面サーチ範囲140および基底面マッチング処理範囲144は、図14に示すように、縮小面サーチ範囲137および縮小面マッチング処理範囲143を縮小率の逆数倍であるn倍したサーチ範囲137´およびマッチング処理範囲143´に比較して非常に狭い範囲でよい。
したがって、階層化マッチングを行わずに、基底面においてのみブロックマッチング処理をした場合には、基底面においては、サーチ範囲137´およびマッチング処理範囲143´において、複数個の参照ブロックを設定して、ターゲットブロックとの相関値を求める演算をする必要があるが、階層化マッチング処理においては、図13(C)および図14のように、非常に狭い範囲においてのみマッチング処理を行えばよい。
このため、当該狭い範囲である、基底面サーチ範囲140および基底面マッチング処理範囲144に設定される基底面参照ブロックの数は非常に少なくなり、マッチング処理回数(相関値演算回数)および保持するSAD値を非常に小さくすることができ、処理を高速化することができると共に、SADテーブルを小規模化することができるという効果を得ることができる。
この階層化マッチング処理モード1は、例えば、動画NR処理において、処理の高速化またはバス帯域の削減は、ある程度、犠牲にしても、動き検出精度をピクセル精度とする場合に好適な処理モードである。
<階層化マッチング処理モード2>
前述した階層化マッチング処理モード1では、基底面マッチング処理の際のサーチ範囲(基底面サーチ範囲)は、縮小倍率1/nの逆数のnピクセル精度の縮小面動きベクトルに基づいて定めるようにしている。しかし、縮小面動きベクトルのピクセル精度よりも低いため、基底面動きベクトルをピクセル精度で検出することができると言っても、次のような問題がある。
すなわち、例えば縮小倍率が1/4としたとき、縮小面マッチング処理モードで検出された4ピクセル精度の縮小面動きベクトル136に基づいて基底面サーチ範囲が決定される。したがって、基底面サーチ範囲の中心座標は、4ピクセル毎にしか求められない。これをイメージ化した図を図15に示す。この図15は、ターゲットブロックのサイズが、8画素×8ラインで、縮小倍率が1/4である。
縮小面動きベクトル136に基づいて決定される縮小面動き補償ブロック(縮小面参照ブロック)161は、図15(A)において、斜線を付して示すようなものとすることができる。すなわち、縮小面動き補償ブロックは、縮小面動きベクトル136で指し示される位置を中心として求められるもので、基底面サーチ範囲は、この縮小面動き補償ブロックを中心に含むように設定されることになる。ここで、図15(A)における一マスは、縮小面における1ピクセルであり、図15(B)の基底面における1ピクセルの4倍となっている。
基底面サーチ範囲から定められる基底面マッチング処理範囲を、縮小面動き補償ブロック161の範囲よりも、基底面における4ピクセル分大きな範囲としたときには、サーチ範囲基底面マッチング処理における基底面マッチング処理範囲144は、図15(B)において、太線枠で示すと共に、塗りを施して示すような範囲とすることができる。
しかしながら、実際の基底面動きベクトルが検出される可能性の高い箇所162が、図15(A)に示すように、縮小面における縮小面参照ブロックの中間に位置するような場合、図15(B)に示すように、この基底面動きベクトルが検出される可能性の高い箇所162が、設定された基底面マッチング処理範囲144の端のほうになってしまい、サーチ範囲の中に入らないことがある。
このようになると、設定された基底面マッチング処理範囲144において最も相関が強い参照ブロックに対応するものとして、基底面動きベクトルが検出されてしまい、精度の高い基底面動きベクトルが算出できないという問題がある。
この例の階層化マッチング処理モード2は、これを改善した処理モードで、基底面マッチング処理における基底面サーチ範囲を、縮小面マッチング+補間処理モードにより求めたピクセル精度の高精度縮小面動きベクトル136´を用いるものである。
この場合には、基底面サーチ範囲の中心座標は、1ピクセル毎に求まるので、基底面動きベクトルが検出される可能性の高い箇所162が、図16(A)に示すような位置であったときには、高精度縮小面動きベクトル136´は、図示のようになり、縮小面動き補償ブロックの位置は、基底面における1ピクセル分だけ、基底面動きベクトルが検出される可能性の高い箇所162よりもずれた状態となる。
そして、この処理モードの場合には、高精度縮小面動きベクトル136´から求められる基底面マッチング処理範囲144は、図16(B)で塗りを付して示すような範囲となり、基底面動きベクトルが検出される可能性の高い箇所162が、この基底面マッチング処理範囲144から逸脱するようなことが無くなる。
この階層化マッチング処理モード2は、例えば、動画NR処理において、処理の高速化またはバス帯域の削減は、ある程度、犠牲にしても、動き検出精度をピクセル精度とする場合で、階層化マッチング処理モード1よりも、より高精度に動き検出をしたい場合に好適な処理モードである。
<階層化マッチング+補間処理モード1および2>
以上のようにして、階層化マッチング処理モード1または階層化マッチング処理モード2によれば、ピクセル精度の基底面動きベクトルの検出ができる。しかしながら、前述したように、静止画NR処理においては、ピクセル精度よりも高精度のサブピクセル精度の動き検出を行うことが要請される。
そこで、この実施形態では、サブピクセル精度の処理モードとして、階層化マッチング+補間処理モードを用いる。ここで、階層化マッチングには、階層化マッチング処理モード1と、階層化マッチング処理モード2とが、この実施形態では提供しているので、この階層化マッチング+補間処理モードにおいても、階層化マッチング+補間処理モード1と、階層化マッチング+補間処理モード2とを用意する。
階層化マッチング+補間処理モード1においては、階層化マッチング処理モード1において、ピクセル精度の基底面動きベクトル104が検出できたら、この実施の形態においては、基底面動きベクトル104が指し示す参照ブロックのSAD値、すなわち、基底面最小SAD値と、その近傍の近傍SAD値とを用いて、この例においても二次曲線近似補間処理を行って、サブピクセル精度の高精度動きベクトルを算出するようにする。
サブピクセル精度の高精度動きベクトルについて説明する。前述したブロックマッチング手法では、ピクセル単位でブロックマッチングを行っているため、動きベクトルはピクセル精度でしか算出されない。図56に示したように、マッチング処理を行った点、つまり、参照ブロックの位置は、ピクセル精度で存在し、より精度の高い動きベクトルを算出するには、サブピクセル単位でのマッチング処理が必要になる。
N倍のピクセル精度(画素ピッチは、1/N)の動きベクトルを算出するために、N倍のピクセル単位でマッチング処理を行うと、SADテーブルは約N2倍の大きさになり、膨大なメモリが必要になる。また、ブロックマッチング処理のために、N倍にアッパーサンプルした画像を生成しなくてはならず、ハードウエアの規模は飛躍的に増大する。
そこで、二次曲線を用いて、SADテーブルを補間することで、ピクセル単位でマッチング処理を行ったSADテーブルから、サブピクセル精度の動きベクトルを算出することを考える。この例の場合においても、二次曲線近似補間ではなく、線形補間や、3次以上の高次の近似曲線補間を用いても良いが、精度とハードウエア化との兼ね合いから、この例では、二次曲線近似補間を用いている。
この例における二次曲線近似補間においては、図17に示すように、ピクセル精度の動きベクトル104が指し示す基底面SADテーブルのSAD値の最小値SSmin(基底面最小SAD値;図17の参照符号113参照)と、当該基底面最小SAD値SSminの位置の近傍位置の複数個のSAD値(基底面近傍SAD値という)、この例では、基底面最小SAD値SSminの位置のX方向(水平方向)およびY方向(垂直方向)に隣接する4個の基底面近傍SAD値SSx1、SSx2およびSSy1、SSy2(図17の参照符号114,115,116,117参照)を使用する。
図18に示すように、基底面最小SAD値SSminと、X方向の近傍2点の基底面近傍SAD値SSx1、SSx2を使って、二次の近似曲線118を当てはめ、この二次曲線118の極小を取る座標が、サブピクセル精度のSAD値の最小値SSXminとなる動きベクトル(高精度動きベクトル)のX座標Vxとなる。このときの二次曲線近似補間の式は、前述した計算式(1)と同様であり、次式(3)のようになる。
SSXmin=1/2×(SSx2−SSx1)/(SSx2−2SSmin+SSx1)…式(3)
この計算式(3)で求めたサブピクセル精度のSAD値の最小値SSXminがSADテーブル上で取るX座標が、サブピクセル精度のSAD値の最小値となるX座標Vxとなる。
この計算式(3)の割り算は、複数回の引き算で実現可能である。求めたいサブピクセル精度が、例えば元の画素ピッチの1/4の画素ピッチの精度であれば、僅か2回の引き算でも求められるため、回路規模、演算時間、共に小さく、二次の近似曲線補間よりもかなり複雑な三次曲線補間と殆ど変わらない性能が実現できる。
同様に、基底面最小SAD値SSminと、Y方向(垂直方向)の近傍2点の基底面近傍SAD値SSy1、SSy2を使って、二次の近似曲線を当て嵌め、この二次曲線の極小値SSYminを取るY座標が、サブピクセル精度のSAD値の最小値となるY座標Vyとなる。このときの二次曲線近似補間の式は、前述した計算式(2)と同様であり、次式(4)のようになる。
SSYmin=1/2×(SSy2−SSy1)/(SSy2−2SSmin+SSy1)…式(4)
以上のようにして、二次曲線の近似を、X方向およびY方向の2回、行うことで、サブピクセル精度の高精度の動きベクトル(Vx、Vy)が求まる。
以上の説明では、基底面最小SAD値と、そのX方向(水平方向)およびY方向(垂直方向)の近傍4点の基底面近傍SAD値を使用したが、各方向の近傍のSAD値は2点以上であってもよい。また、二次曲線をX方向、Y方向に代えて、例えば、斜め方向に近似曲線を当て嵌めてもかまわない。さらに、X方向、Y方向に、斜め方向を加えて近似曲線を当て嵌めてもかまわない。
以上のような手段、手順を用いることにより、ピクセル単位の精度のSADテーブルの値から、サブピクセル精度のベクトル検出結果が得られることは、前述した図12から明らかである。
この実施形態では、以上説明した複数種のブロックマッチング手法のそれぞれを、動き検出・動き補償部16と、画像重ね合わせ部17と、システムバス2を介してこれら動き検出・動き補償部16および画像重ね合わせ部17と接続される画像メモリ部4とからなるハードウエアを用いて、ソフトウエア処理により、実行するようにする。次に、動き検出・動き補償部16および画像重ね合わせ部17のハードウエア構成例について説明する。
<動き検出・動き補償部16のハードウエア構成例>
図19に、動き検出・動き補償部16のハードウエア構成例のブロック図を示す。この例では、動き検出・動き補償部16は、ターゲットブロック102の画素データを保持するターゲットブロックバッファ部161と、参照ブロック108の画素データを保持する参照ブロックバッファ部162と、ターゲットブロック102と参照ブロック108とで対応する画素についてのSAD値を計算するマッチング処理部163と、マッチング処理部163から出力されるSAD値情報から動きベクトルを算出する動きベクトル算出部164と、それぞれのブロックを制御するコントロール部165と、を備える。
そして、動き検出・動き補償部16と、画像メモリ部4とは、システムバス2を通じて接続されている。すなわち、この例では、システムバス2とターゲットブロックバッファ部161および参照ブロックバッファ部162との間には、それぞれバス・インターフェース部21およびバス・インターフェース部22が接続されている。ここで、システムバス2でのプロトコルは、この例では、AXIインターコネクトが用いられている。
静止画撮像時においては、ターゲットブロックバッファ部161には、画像メモリ部4に記憶されている縮小面ターゲット画像Prtまたは基底面ターゲット画像Pbtの画像フレームからの縮小面ターゲットブロックまたは基底面ターゲットブロックが書き込まれる。縮小面ターゲット画像Prtまたは基底面ターゲット画像Pbtは、1枚目は、シャッターボタン押下後の最初の撮像フレームの画像がターゲットフレーム102としてターゲットブロックバッファ部161に書き込まれる。参照画像とのブロックマッチングに基づき画像の重ね合わせがなされると、画像メモリ部4に当該画像の重ね合わせ後のNR画像が書き込まれ、ターゲットブロックバッファ部161のターゲットフレーム102が、当該NR画像に書き換えられてゆく。
参照ブロックバッファ部162には、画像メモリ部4に記憶されている縮小面参照画像Prrまたは基底面参照画像Pbrの画像フレームからの縮小面マッチング処理範囲または基底面マッチング処理範囲の画像データが、画像メモリ部4から読み出されて、書き込まれる。縮小面参照画像Prrまたは基底面参照画像Pbrは、前記最初の撮像フレームの後の撮像フレームが、参照フレーム108として画像メモリ部4に書き込まれる。
この場合、連続して撮影された複数枚の撮像画像を取り込みながら画像の重ね合わせ処理を行う場合(これを撮影中加算と呼ぶことにする)には、基底面参照画像および縮小面参照画像としては、前記最初の撮像フレームの後の撮像フレームが、1枚ずつ順次に画像メモリ部4に取り込まれる。したがって、画像メモリ部4は、基底面参照画像および縮小面参照画像としては、1枚ずつを保持すればよい。
しかし、連続して撮影された複数枚の撮像画像を画像メモリ部4に取り込んだ後、動き検出・動き補償部16および画像重ね合わせ部17で、動きベクトル検出を行い、画像の重ね合わせを実行するようにする場合(これを撮影後加算と呼ぶことにする)には、基底面参照画像および縮小面参照画像としては、前記最初の撮像フレームの後の複数枚の撮像フレームの全てを画像メモリ部4に格納保持しておく必要がある。
撮像装置としては、撮影中加算および撮影後加算のいずれも用いることができるが、この実施形態では、静止画NR処理は、多少処理時間がかかっても、ノイズが低減された綺麗な画像が要求されることを考慮して、撮影後加算の処理を採用している。この実施形態における静止画NR処理の詳細な動作説明は、後で詳述する。
一方、動画撮影モード時においては、動き検出・動き補償部16には、画像補正・解像度変換部15からの撮像フレームがターゲットフレーム102として入力される。ターゲットブロックバッファ部161には、この画像補正・解像度変換部15からの、ターゲットフレームから抽出されたターゲットブロックが書き込まれる。また、参照ブロックバッファ部162には、前記ターゲットフレームよりも1枚前の、画像メモリ部4に記憶されている撮像フレームが、参照フレーム108とされ、この参照フレーム(基底面参照画像Pbrまたは縮小面参照画像Prr)からの基底面マッチング処理範囲または縮小面マッチング処理範囲が書き込まれる。
この動画撮影モード時には、画像メモリ部4には、画像補正・解像度変換部15からのターゲットフレームとの間でブロックマッチングをすべき、1枚前の撮像画像フレームを基底面参照画像Pbrおよび縮小面参照画像Prrとして保持するだけでよく、画像メモリ部4に保持する画像情報は、1枚分(1フレーム分)でよいので、この例では、基底面参照画像Pbrおよび縮小面参照画像Prrとしては、画像データ圧縮していない。
マッチング処理部163では、縮小面マッチング処理および基底面マッチング処理を、ターゲットブロックバッファ部161に記憶されたターゲットブロックと、参照ブロックバッファ部162に記憶された参照ブロックとについて行う。
ここで、ターゲットブロックバッファ部161に記憶されたものが縮小面ターゲットブロックの画像データであり、参照ブロックバッファ162に記憶されたものが縮小面参照画面から抽出された縮小面マッチング処理範囲の画像データである場合には、マッチング処理部163では、縮小面マッチング処理が実行される。また、ターゲットブロックバッファ部161に記憶されたものが基底面ターゲットブロックの画像データであり、参照ブロックバッファ162に記憶されたものが基底面参照画面から抽出された基底面マッチング処理範囲の画像データである場合には、マッチング処理部163では、基底面マッチング処理が実行されることになる。
マッチング処理部163で、ブロックマッチングにおけるターゲットブロックと、参照ブロックとの相関の強さを検出するためには、この実施の形態においても、画像データの輝度情報を用いてSAD値算出を行い、その最小SAD値を検出して、当該最小SAD値を呈する参照ブロックを最強相関参照ブロックとして検出するようにする。
なお、SAD値の算出は、輝度情報ではなく、色差信号や、3原色信号R,G,Bの情報を使用しても良いことは言うまでもない。また、SAD値の算出に当たっては、通常は、ブロック内の全画素を用いるようにするが、演算量削減のため、間引き等により、飛び飛びの位置の限られた画素の画素値のみを使用するようにしてもよい。
動きベクトル算出部164は、マッチング処理部163のマッチング処理結果からターゲットブロックに対する参照ブロックの動きベクトルを検出する。この実施形態では、マッチング処理部163で縮小面マッチング処理がなされるときには、動きベクトル検出部164では、縮小面動きベクトルが検出され、また、マッチング処理部163で基底面マッチング処理がなされるときには、動きベクトル検出部164では、基底面動きベクトルが検出される。
そして、この実施形態では、動きベクトル算出部164は、SAD値の最小値を検出保持すると共に、この最小SAD値を呈する参照ベクトルの近傍の複数個の参照ベクトルのSAD値をも保持して、前述したような二次曲線近似補間処理を行って、縮小面マッチング処理時には、ピクセル精度の高精度縮小面動きベクトルを検出し、基底面マッチング処理時には、サブピクセル精度の高精度基底面動きベクトルを検出する機能も備える。
コントロール部165は、CPU1による制御を受けて、この動き検出・動き補償部16において、前記の複数種のブロックマッチング処理モードのいずれを実行するかを決定し、その決定したブロックマッチング処理モードの処理動作を制御するようにする。
<ターゲットブロックバッファ161の構成例>
ターゲットブロックバッファ161の構成例のブロック図を、図20に示す。この図20に示すように、ターゲットブロックバッファ161は、基底面バッファ部1611と、縮小面バッファ部1612と、縮小化処理部1613と、セレクタ1614,1615および1616とを備えている。セレクタ1614,1615および1616は、図20では、図示は省略したが、コントロール部165からの選択制御信号によりそれぞれ選択制御される。
基底面バッファ部1611は、基底面ターゲットブロックを一時格納するためのものである。この基底面バッファ部1611は、基底面ターゲットブロックを、画像重ね合わせ部17に送ると共に、セレクタ1616に供給する。
縮小面バッファ部1612は、縮小面ターゲットブロックを一時格納するためのものである。縮小面バッファ部1612は、縮小面ターゲットブロックを、セレクタ1616に供給する。
縮小化処理部1613は、動画撮影モード時には上述したように、ターゲットブロックは、画像補正・解像度変換部15から送られてくるので、この縮小化処理部1613で縮小面ターゲットブロックを生成するために設けられている。縮小化処理部1613からの縮小面ターゲットブロックは、セレクタ1615に供給される。
セレクタ1614は、動画撮影モード時には画像補正・解像度変換部15からのターゲットブロック(基底面ターゲットブロック)を、静止画撮影モード時には画像メモリ部4からの基底面ターゲットブロックまたは縮小面ターゲットブロックを、コントロール部165からの選択制御信号により選択して出力し、その出力を基底面バッファ部1611と、縮小化処理部1613と、セレクタ1615とに供給する。
セレクタ1615は、動画撮影モード時には縮小化処理部15からの縮小面ターゲットブロックを、静止画撮影モード時には画像メモリ部4からの縮小面ターゲットブロックを、コントロール部165からの選択制御信号により選択して出力し、その出力を縮小面バッファ部1612に供給する。
セレクタ1616は、コントロール部1615からの選択制御信号に応じて、縮小面でのブロックマッチング時には、縮小面バッファ部1612からの縮小面ターゲットブロックを、基底面でのブロックマッチング時には、基底面バッファ部1611からの基底面ターゲットブロックを、それぞれ選択出力し、出力した縮小面ターゲットブロックまたは基底面ターゲットブロックをマッチング処理部163に送る。
<参照ブロックバッファ162の構成例>
参照ブロックバッファ162の構成例のブロック図を、図21に示す。この図21に示すように、参照ブロックバッファ162は、基底面バッファ部1621と、縮小面バッファ部1622と、セレクタ1623とを備えている。セレクタ1623は、図21では、図示は省略したが、コントロール部165からの選択制御信号により選択制御される。
基底面バッファ部1621は、画像メモリ部4からの基底面参照ブロックを一時格納し、その基底面参照ブロックを、セレクタ1623に供給すると共に、画像重ね合わせ部17に、動き補償ブロックとして送る。
縮小面バッファ部1622は、画像メモリ部4からの縮小面参照ブロックを一時格納するためのものである。縮小面バッファ部1622は、縮小面参照ブロックを、セレクタ1623に供給する。
セレクタ1623は、コントロール部1615からの選択制御信号に応じて、縮小面でのブロックマッチング時には、縮小面バッファ部1612からの縮小面参照ブロックを、基底面でのブロックマッチング時には、基底面バッファ部1611からの基底面参照ブロックを、それぞれ選択出力し、出力した縮小面参照ブロックまたは基底面参照ブロックをマッチング処理部163に送る。
<画像重ね合わせ部17の構成例>
画像重ね合わせ部17の構成例のブロック図を、図22に示す。この図22に示すように、画像重ね合わせ部17は、加算率計算部171と、加算部172と、基底面出力バッファ部173と、縮小面生成部174と、縮小面出力バッファ部175とを備えて構成されている。
そして、画像重ね合わせ部17と、画像メモリ部4とは、システムバス2を通じて接続されている。すなわち、この例では、システムバス2と基底面出力バッファ部173および縮小面出力バッファ部162との間には、それぞれバス・インターフェース部23およびバス・インターフェース部24が接続されている。
加算率計算部171は、動き検出・動き補償部16からのターゲットブロックおよび動き補償ブロックを受けて、両者の加算率を、採用する加算方式が単純加算方式であるか、または平均加算方式であるかに応じて定め、定めた加算率を、ターゲットブロックおよび動き補償ブロックと共に加算部172に供給する。
複数枚の画像の重ね合わせを行う場合、輝度を1:1で画像を重ね合わせると、ダイナミックレンジは2倍になる。したがって、低照度の画像を重ね合わせて、NRをかけつつ画像を高感度化したい場合は、輝度を1:1で加算する方式が望ましい。この方式が単純加算方式である。
一方、照度が確保できる条件で撮影された画像に対してNRを施す場合は、ダイナミックレンジを増やさず、合計輝度が1になるように加算する方式が望ましい。この方式が平均加算方式である。
加算部172での加算結果の基底面NR画像は、基底面出力バッファ部173およびバス・インターフェース23を通じて画像メモリ部4に書き込まれる。また、加算部172での加算結果の基底面NR画像は、縮小面生成部174にて縮小面NR画像に変換され、当該縮小面生成部174からの縮小面NR画像が、縮小面出力バッファ部175およびバス・インターフェース24を通じて画像メモリ部4に書き込まれる。
[動きベクトル算出部164のハードウエア構成例について]
次に、動きベクトル算出部164の幾つかのハードウエア構成例およびその動作について説明する。まず、この発明の実施形態における動きベクトル算出部164のハードウエア構成例として、従来と同様に、SADテーブルを用いる第1の例について説明する。
<第1の例>
図23に、動きベクトル算出部164の第1の例の構成図を示す。この第1の例の動きベクトル算出部164は、SAD値書き込み部1641と、SADテーブルTBLと、SAD値比較部1642と、SAD値保持部1643と、X方向(水平方向)近傍値抽出部1644と、Y方向(垂直方向)近傍値抽出部1645と、二次曲線近似補間処理部1646とからなる。
この第1の例の動きベクトル算出部164においては、SAD値書き込み部1641は、マッチング処理部163から送られてくる、縮小面参照ブロックまたは基底面参照ブロックの位置情報(縮小面参照ベクトルまたは基底面参照ベクトル)と、当該縮小面参照ブロックまたは基底面参照ブロックのSAD値をSADテーブルTBLに格納する。マッチング処理部163でサーチ範囲の全てのマッチング処理が終わったら、SAD値比較部1642は、SADテーブルTBLのすべてのSAD値について比較処理を行って、最小のSAD値を探索し、検出した最小のSAD値およびそのSAD値を呈する縮小面参照ブロックまたは基底面参照ブロックの位置情報(縮小面参照ベクトルまたは基底面参照ベクトル)をSAD値保持部1643に保持する。
この場合、前述した縮小面マッチング処理モードの場合においては、縮小面マッチング処理後にSAD値保持部1643に保持された最小のSAD値Sminに対応する参照ベクトルの情報、すなわち、縮小面動きベクトルの情報は、動きベクトル算出部164からコントロール部165に供給され、動き補償ブロックを、参照ブロックバッファ部162から読み出すために用いられる。
また、前述した階層化マッチング処理モード1においては、縮小面マッチング処理後にSAD値保持部1643に保持された最小のSAD値Sminに対応する参照ベクトルの情報、すなわち、縮小面動きベクトルの情報は、動きベクトル算出部164からコントロール部165に供給され、基底面におけるブロックマッチングの際のサーチ範囲を設定するために用いられる。
また、前述した階層化マッチング処理モード2においては、基底面マッチング処理後にSAD値保持部1643に保持された最小のSAD値Sminに対応する参照ベクトルの情報、すなわち、基底面動きベクトルの情報は、動きベクトル算出部164からコントロール部165に供給され、動き補償ブロックを、参照ブロックバッファ部162から読み出すために用いられる。
ブロックマッチング処理において、縮小面動きベクトルまたは基底面動きベクトルを検出するだけでよい場合には、SAD値保持部1643には、最小のSAD値SminまたはSSminおよび、当該最小のSAD値SminまたはSSminを呈する縮小面参照ブロックまたは基底面参照ブロックの位置情報(縮小面参照ベクトルまたは基底面参照ベクトル)を保持するだけでよい。
しかしながら、この実施の形態では、縮小面マッチング処理モードのみではなく、縮小面マッチング+補間処理モードや、階層化マッチング+補間処理モード1,2を、実行することができるように構成する必要があり、動きベクトル算出部164では、ブロックマッチング処理結果としての動きベクトルを算出するだけでなく、前述したように、補間処理をも実行するように構成する必要がある。
すなわち、この実施の形態においては、動きベクトル算出部164は、縮小面または基底面におけるブロックマッチング処理の後において、最小のSAD値を呈する参照ブロックの位置の近傍の複数個のSAD値を用いて、高精度縮小面動きベクトルおよび高精度基底面動きベクトルを算出するための補間処理を行う必要がある。
そこで、この実施の形態では、動きベクトル算出部164は、補間処理を行うための構成も備える。すなわち、SAD値保持部1643と、X方向(水平方向)近傍値抽出部1644と、Y方向(垂直方向)近傍値抽出部1645と、二次曲線近似補間処理部1646とは、補間処理のための構成部分である。
この例の動きベクトル算出部164では、検出した最小のSAD値SminまたはSSminの近傍の複数個、この例では、近傍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回行い、縮小面においては、ピクセル精度の高精度縮小面動きベクトルを算出し、基底面においては、サブピクセル精度の高精度基底面動きベクトルを算出する。
二次曲線近似補間処理部1646は、コントロール部165の制御により、縮小面マッチング+補間処理モードと、階層化マッチングモード2と、階層化マッチング+補間処理モード1および階層化マッチング+補間処理モード2、のときに動作するようにされる。そして、二次曲線近似補間処理部1646は、算出した縮小面動きベクトルまたは基底面動きベクトルは、コントロール部165に供給する。
コントロール部165は、縮小面マッチング+補間処理モードにおいては、動きベクトル算出部164から受け取った高精度縮小面動きベクトルは、動き補償ブロックを、参照ブロックバッファ部162から読み出すために用いるようにする。
また、コントロール部165は、階層化マッチング処理モード2においては、動きベクトル算出部164から受け取った高精度縮小面動きベクトルは、基底面におけるブロックマッチングの際のサーチ範囲を設定するために用いるようにする。
また、コントロール部165は、階層化マッチング処理モード2においては、動きベクトル算出部164から受け取った高精度基底面動きベクトルは、動き補償ブロックを、参照ブロックバッファ部162から読み出すために用いるようにする。
また、コントロール部165は、階層化マッチング+補間処理モード1においては、動きベクトル算出部164から受け取った高精度基底面動きベクトルは、動き補償ブロックを、参照ブロックバッファ部162から読み出すために用いるようにする。
また、コントロール部165は、階層化マッチング+補間処理モード2においては、動きベクトル算出部164から受け取った高精度縮小面動きベクトルは、基底面におけるブロックマッチングの際のサーチ範囲を設定するために用いるようにする。
また、コントロール部165は、階層化マッチング+補間処理モード2においては、動きベクトル算出部164から受け取った高精度基底面動きベクトルは、動き補償ブロックを、参照ブロックバッファ部162から読み出すために用いるようにする。
この第1の例における縮小面または基底面でのブロックマッチング処理時の流れの例を図24のフローチャートに示す。この第1の例のフローチャートの各ステップは、コントロール部165の制御の基に、マッチング処理部163および動きベクトル算出部164においてなされるものである。
先ず、マッチング処理部163は、縮小面または基底面における参照ベクトル(Vx,Vy)を設定して、SAD値を計算する縮小面または基底面参照ブロック位置を設定し(ステップS1)、設定した縮小面または基底面参照ブロックの画素データを、参照ブロックバッファ部162から読み込む(ステップS2)。次に、ターゲットブロックバッファ部161の縮小面または基底面ターゲットブロックの画素データを読み込んで、縮小面または基底面ターゲットブロックおよび縮小面または基底面参照ブロックの各画素データの差分の絶対値の総和、つまり、SAD値を求め(ステップS3)、求めたSAD値を動きベクトル算出部164に送出する。動きベクトル算出部164では、SAD値書き込み部1641が、受け取ったSAD値を、対応する縮小面または基底面参照ブロックの位置、つまり、縮小面または基底面参照ベクトルに対応する位置に格納する(ステップS4)。
次に、マッチング処理部163は、サーチ範囲の全ての縮小面または基底面参照ブロックの位置(縮小面または基底面参照ベクトル)でマッチング処理を終了したか否か判別し(ステップS5)、未だ、サーチ範囲においては、未処理の縮小面または基底面参照ブロックがあると判別したときには、ステップS1に戻り、前述したステップS1以降の処理を繰り返す。
また、マッチング処理部163は、ステップS5で、サーチ範囲の全ての縮小面参照ブロックの位置(参照ベクトル)でマッチング処理を終了したと判別したときには、その旨を動きベクトル算出部164に伝える。
動きベクトル算出部164では、コントロール部165からの情報により、補間処理を行うモードか否か判別し(ステップS6)、補間を行わないモードであると判別したときには、SAD値比較部1642が、SADテーブルTBLの各SAD値を比較して、SADテーブルTBLにおいて最小となるSAD値SminまたはSSminを検出し、検出したSAD値の最小値SminまたはSSminに対応する縮小面または基底面参照ブロックの位置の情報(縮小面または基底面動きベクトルの情報)を、コントロール部165に送出する(ステップS7)。以上で、補間処理を行わないモードである場合の第1の例におけるブロックマッチング処理は終了となる。
また、ステップS6で、補間処理を行うモードであると判別したときには、これに応じて、SAD値比較部1642が、SADテーブルTBLの各SAD値を比較して、SADテーブルTBLにおいて最小となるSAD値SminまたはSSminを検出し、検出したSAD値の最小値SminまたはSSminを、これらに対応する縮小面または基底面参照ブロックの位置の情報と共にSAD値保持部1643の最小値格納部に保持する。そして、SAD値保持部1643は、検出された最小のSAD値SminまたはSSminの位置の近傍位置の縮小面近傍SAD値Sx1、Sx2、Sy1、Sy2または基底面近傍SAD値SSx1、SSx2、SSy1、SSy2を、SADテーブルTBLから取得して、それぞれの格納部に保持する(ステップS8)。
次に、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小のSAD値SminまたはSSminとその近傍SAD値Sx1、Sx2、Sy1、Sy2または基底面近傍SAD値SSx1、SSx2、SSy1、SSy2、およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、高精度の縮小面動きベクトルまたは基底面動きベクトルを算出する(ステップS9)。以上で、第1の例におけるブロックマッチング処理は終了となる。
以上説明した第1の例は、算出したSAD値を全て記憶するSADテーブルTBLを生成し、当該生成したSADテーブルTBLから二次曲線近似補間用の最小のSAD値と、その近傍の4個のSAD値を抽出するようにするので、SADテーブルTBLの分だけ、大規模なメモリを必要とする。
以下に説明する他の例では、算出したSAD値を全て記憶するSADテーブルTBLを生成しないことにより、より回路規模を削減するとともに、処理時間も削減することができるようにする。
<動きベクトル算出部164のハードウエア構成例の第2の例>
上述したように、ブロックマッチング処理は、参照ベクトルの示す位置を参照ブロックの位置とし、各参照ブロックの各画素とターゲットブロックの各画素のSAD値を計算し、その計算処理を、サーチ範囲内のすべての参照ベクトルの示す位置の参照ブロックについて行う。
ここで、サーチ範囲内において参照ブロックの位置を変えて、動き補償ブロックをサーチする場合に、サーチを画面(フレーム)の端から順番に行う、画面(フレーム)の中心から外側に向かって行う、などいろいろな方法が考えられるが、この実施の形態では、サーチ方向は、図25(A)で矢印120に示すように設定され、サーチ範囲の左上端から水平方向にサーチを開始し、1ライン分のサーチが終わった後、垂直方向に1ライン下のラインを、左端から水平方向にサーチする、という手順を繰り返すサーチ方法を採用する。
すなわち、図25(B)に示すように、サーチ範囲106において、当該サーチ範囲106の左上から水平方向に参照ブロック108を順次に設定してサーチして、各参照ブロック108についてのSAD値の計算を行う。すると、図25(C)に示すように、対応するSADテーブルも左上から水平方向に埋まっていく。このとき、実際にマッチング処理に使用される画素データの範囲は、参照ブロック108の大きさに応じたマッチング処理範囲110となるのは、前述した通りである。
図11および図18に示したように、この実施形態においてピクセル精度またはサブピクセル精度の二次曲線近似補間処理を行うためには、SAD値の最小値SminまたはSSmin、および縮小面近傍のSAD値Sx1、Sx2、Sy1、Sy2または基底面近傍SAD値SSx1、SSx2、SSy1、SSy2が求まれば良い。
各参照ブロックについてのSAD値を算出した際に、その算出したSAD値と、その時点までのSAD値の最小値とを比較して、算出したSAD値がその時までのSAD値の最小値よりも小さければ、算出したSAD値を最小値として保持すると共に、そのSAD値とそのときの参照ベクトルを保持することにより、SAD値の最小値および当該最小値を取る参照ブロックの位置情報(参照ベクトルの情報)とを、SADテーブルを生成することなく、求めることができる。
そして、検出したSAD値の最小値を保持すると共に、その最小SAD値となる参照ブロック位置の近傍の参照ブロックのSAD値を、近傍SAD値として保持するようにすれば、近傍SAD値をも、SADテーブルを生成することなく、保持することができる。
このとき、この例では、図26(A)に示すように、上述の図25(A)に示したようなサーチ方法を採用しているので、従来のSADテーブルTBLにおいて水平方向の1ライン分のSAD値を記憶する容量のメモリ(以下、ラインメモリという)を設ければ、新たに参照ブロックのSAD値が算出されたときには、SADテーブルTBL上では、図26(B)で斜線を付して示すように、当該新たに算出されたSAD値121に対して、それより前に算出されたSADテーブルTBLの1ライン分の複数個の参照ブロックのSAD値が、格納データ122として前記ラインメモリに格納されていることになる。
そこで、新たに算出された参照ブロックのSAD値が、最小のSAD値として検出されたときには、SADテーブルTBL上において、前記最小SAD値121を呈する参照ブロックの位置の1ライン上の位置の参照ブロックのSAD値123(近傍SAD値(Sy1またはSSy1))と、前記最小SAD値121を呈する参照ブロックの位置の左横の位置の参照ブロックのSAD値124(近傍SAD値(Sx1またはSSx1))は、前記ラインメモリから取得することができる。
そして、SADテーブルTBL上において、最小SAD値の参照ブロックの位置の右横の位置の参照ブロックのSAD値である近傍SAD値(Sx2またはSSx2)(図26(C)の符号125参照)は、後で、その参照ブロック位置で算出されたSAD値を保持すればよい。同様に、SADテーブルTBL上において、新たに算出された最小SAD値の参照ブロックの位置の1ライン下の位置の参照ブロックのSAD値である近傍SAD値(Sy2またはSSy2)(図20(C)の符号126参照)も、後で、その参照ブロック位置で算出されたSAD値を保持すればよい。
以上のことを考慮して、この動きベクトル算出部164の第2の例は、図27に示すようなハードウエア構成とする。
すなわち、この動きベクトル算出部164の第2の例においては、図23に示した第1の例の場合のように、算出された全てのSAD値を保持するSADテーブルTBLは備えず、SAD値書き込み部1641と、SAD値比較部1642と、SAD値保持部1643と、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645と、二次曲線近似補間処理部1646と、SADテーブルTBLの1ライン分のメモリ(ラインメモリという)1647とを備えてなる。
そして、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645と、二次曲線近似補間処理部1646とは、前述した第1の例と同様の動作を行うが、SAD値書き込み部1641、SAD値比較部1642、SAD値保持部1643およびラインメモリ1647の部分は、前述の第1の例とは、異なる動作を行う。
SAD値保持部1643は、図23の第1の例と同様に、最小SAD値SminまたはSSminおよび縮小面近傍SAD値Sx1、Sx2、Sy1、Sy2または基底面近傍SAD値SSx1、SSx2、SSy1、SSy2の保持部(メモリ)を備える。そして、この第2の例においては、SAD値保持部1643は、その最小SAD値保持部からの最小SAD値SminまたはSSminをSAD値比較部1642に供給する共に、保持している近傍SAD値のうち、最小SAD値SminまたはSSminの右側の近傍SAD値Sx2またはSSx2の参照ブロックの位置情報(参照ベクトル)と、最小SAD値SminまたはSSminの下側の近傍SAD値Sy2またはSSy2の参照ブロックの位置情報(参照ベクトル)とを、SAD値書き込み部1641に供給する。
SAD値比較部1642は、この第2の例においては、マッチング処理部163からの参照ブロックの位置情報(参照ベクトル)と、当該参照ブロックのSAD値Sinとを受けると共に、SAD値保持部1643の最小SAD値保持部からの最小SAD値SminまたはSSminとを受ける。
そして、SAD値比較部1642は、マッチング処理部163からの当該時点で算出されたSAD値Sinと、SAD値保持部1643の最小SAD値保持部からの最小SAD値SminまたはSSminとの両者を比較し、マッチング処理部163からの当該時点で算出されたSAD値Sinの方が小さいときには、当該時点で、そのSAD値を最小SAD値であるとして検出し、また、SAD値Sinの方が小さいときには、当該時点では、SAD値保持部1643の最小SAD値保持部からの最小SAD値SminまたはSSminが未だ最小値であると検出する。そして、SAD値比較部1642は、その検出結果の情報DETをSAD値書き込み部1641およびSAD値保持部1643に供給する。
SAD値書き込み部1641は、マッチング処理部163からの算出されたSAD値Sinおよびその位置情報(参照ベクトル)を一時保持するための1画素分のバッファメモリを備え、この第2の例においては、マッチング処理部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は、この第2の例においては、マッチング処理部163からの参照ブロックの位置情報(参照ベクトル)が、SAD値保持部1643から受け取った近傍SAD値Sx2(あるいはSSx2)または近傍SAD値Sy2(あるいはSSy2)の位置情報と一致したときにも、マッチング処理部163からの参照ブロックの位置情報(参照ベクトル)と、当該参照ブロックのSAD値Sinとを、SAD値保持部1643に送る。
SAD値保持部1643は、受け取った参照ブロックの位置情報(参照ベクトル)から、いずれの近傍SAD値に関する情報かを認識して、対応する近傍SAD値保持部に格納する。
以上の処理をサーチ範囲における全ての参照ブロックについて終了すると、SAD値保持部1643には、前述したように、最小SAD値およびその位置情報ならびに4個の近傍SAD値およびその位置情報が保持される。
そこで、前述した第1の例と同様にして、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小のSAD値Smin(あるいはSSmin)とその近傍SAD値Sx1、Sx2、Sy1、Sy2(あるいはSSx1、SSx2、SSy1、SSy2)およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、サブピクセル精度の高精度の動きベクトルを算出する。
以上のようにして、第2の例においては、SADテーブルTBLの代わりに、SADテーブルTBLの1ライン分のラインメモリを用いることにより、サブピクセル精度の動きベクトルの検出ができる。
この第2の例における縮小面でのブロックマッチング処理時の流れの例を図28およびその続きである図29のフローチャートに示す。これらの第2の例のフローチャートの各ステップも、コントロール部165の制御に従ってマッチング処理部163および動きベクトル算出部164においてなされるものである。
はじめに、動きベクトル算出部164のSAD値保持部1643の最小SAD値SminまたはSSminの初期値を設定する(ステップS11)。この最小SAD値SminまたはSSminの初期値としては、例えば、画素の差分の最大値が設定される。
次に、マッチング処理部163では、縮小面または基底面の参照ベクトル(Vx,Vy)を設定して、SAD値を計算する縮小面または基底面参照ブロック位置を設定し(ステップS12)、設定した縮小面または基底面参照ブロックの画素データを、参照ブロックバッファ部162から読み込む(ステップS13)。
そして、ターゲットブロックバッファ部161から縮小面または基底面ターゲットブロックの画素データを読み込んで、縮小面または基底面ターゲットブロックおよび縮小面または基底面参照ブロックの各画素データの差分の絶対値の総和、つまり、SAD値を求め、求めたSAD値を動きベクトル算出部164に送出する(ステップS14)。
動きベクトル算出部164では、SAD値書き込み部1641により、そのSAD値をラインメモリ1647に書き込む(ステップS15)。
次に、動きベクトル算出部164では、コントロール部165からの情報により、補間処理を行うモードか否か判別し(ステップS16)、補間を行わないモードであると判別したときには、SAD値比較部1642が、マッチング処理部163で算出されたSAD値Sinと、SAD値保持部1643に保持されている最小SAD値SminまたはSSminとを比較して、算出されたSAD値Sinが、それまで保持されている最小SAD値SminまたはSSminよりも小さいか否か判別する(ステップS17)。
このステップS17で、算出されたSAD値Sinが最小SAD値SminまたはSSminより小さいと判別したときには、ステップS18に進み、SAD値保持部1643に保持される最小SAD値SminまたはSSminの情報およびその位置情報(縮小面または基底面参照ベクトル)の更新がなされる。
また、ステップS17で、算出されたSAD値Sinが最小SAD値SminまたはSSminより大きいと判別したときには、ステップS18の保持情報の更新処理は行わずにステップS19に進み、マッチング処理部163は、サーチ範囲の全ての縮小面または基底面参照ブロックの位置(縮小面または基底面参照ベクトル)でマッチング処理を終了したか否か判別し、未だ、サーチ範囲においては、未処理の参照ブロックがあると判別したときには、ステップS12に戻り、前述したステップS12以降の処理を繰り返す。
また、マッチング処理部163は、ステップS19で、サーチ範囲の全ての縮小面または基底面参照ブロックの位置(縮小面または基底面参照ベクトル)でマッチング処理を終了したと判別したときには、その旨を動きベクトル算出部164に伝える。動きベクトル算出部164では、これを受けて、SAD値保持部1643に保持される最小SAD値SminまたはSSminの位置情報(縮小面または基底面動きベクトル)を、コントロール部165に出力する(ステップS20)。
以上で、この第2の例における補間処理を行わないモードにおけるブロックマッチング処理を終了する。
次に、ステップS16で、補間処理を行うモードであると判別したときには、動きベクトル算出部164では、SAD値比較部1642が、マッチング処理部163で算出されたSAD値Sinと、SAD値保持部1643に保持されている最小SAD値SminまたはSSminとを比較して、算出されたSAD値Sinが、それまで保持されている最小SAD値SminまたはSSminよりも小さいか否か判別する(ステップS21)。
このステップS21で、算出されたSAD値Sinが最小SAD値SminまたはSSminより小さいと判別したときには、ステップS22に進み、SAD値保持部1643に保持される最小SAD値SminまたはSSminの情報および当該最小SAD値SminまたはSSminを呈する参照ブロック位置の1ピクセル上および1ピクセル左の位置の参照ブロックのSAD値およびその位置情報(縮小面または基底面参照ベクトル)の更新がなされる。
すなわち、SAD値比較部1642は、算出されたSAD値Sinが最小SAD値SminまたはSSminより小さい旨の比較結果の情報DETをSAD値書き込み部1641に送る。すると、SAD値書き込み部1641は、当該算出されたSAD値Sinおよびその位置情報(基底面参照ベクトル)を、新たな最小SAD値SminまたはSSminの情報としてSAD値保持部1643に送ると共に、図26(B)から分かるように、ラインメモリ1647の最も古いSAD値およびその位置情報(縮小面または基底面参照ベクトル)と、最も新しいSAD値およびその位置情報(縮小面または基底面参照ベクトル)とを、最小SAD値の位置の1ピクセル上の位置の基底面参照ブロックのSAD値Sy1またはSSy1の情報および1ピクセル左の位置の基底面参照ブロックのSAD値Sx1またはSSx1の情報として、SAD値保持部1643に送る。SAD値保持部1643は、受け取った新たな最小SAD値SminまたはSSminの情報および1ピクセル上の位置の基底面参照ブロックのSAD値Sy1またはSSy1の情報および1ピクセル左の位置の基底面参照ブロックのSAD値Sx1またはSSx1の情報により、それぞれ対応する保持情報を更新する。
そして、ステップ22の次には、ステップS23に進む。また、ステップS21で、算出されたSAD値Sinが最小SAD値SminまたはSSminより大きいと判別したときには、ステップS22の保持情報の更新処理は行わずにステップS23に進む。
ステップS23では、SAD値書き込み部1641は、算出されたSAD値Sinについての位置情報(参照ベクトル)の指す位置が、最小SAD値SminまたはSSminとして保持されている縮小面または基底面参照ブロックの位置の1ピクセル下の縮小面または基底面参照ブロックの位置であるか否か判別し、1ピクセル下の縮小面または基底面参照ブロックの位置であると判別したときには、算出されたSAD値Sinおよびその位置情報(参照ベクトル)をSAD値保持部1643に送る。SAD値保持部1643は、受け取ったSAD値およびその位置情報により、前記1ピクセル下の位置の縮小面または基底面参照ブロックについての近傍SAD値Sy2またはSSy2の保持情報を更新する(ステップS24)。
ステップS23で、算出されたSAD値Sinについての位置情報(基底面参照ベクトル)の指す位置が、最小SAD値SminまたはSSminとして保持されている縮小面または基底面参照ブロックの位置の1ピクセル下の縮小面または基底面参照ブロックの位置でないと判別したときには、SAD値書き込み部1641は、算出されたSAD値Sinについての位置情報(縮小面または基底面参照ベクトル)の指す位置が、最小SAD値SminまたはSSminとして保持されている縮小面または基底面参照ブロックの位置の1ピクセル下の縮小面または基底面参照ブロックの位置であるか否か判別する(ステップS25)。
このステップS25で、算出されたSAD値Sinについての位置情報(縮小面または基底面参照ベクトル)の指す位置が、最小SAD値SminまたはSSminとして保持されている縮小面または基底面参照ブロックの位置の1ピクセル右の縮小面または基底面参照ブロックの位置であると判別したときには、SAD値書き込み部1641は、算出されたSAD値Sinおよびその位置情報(縮小面または基底面参照ベクトル)をSAD値保持部1643に送る。SAD値保持部1643は、受け取ったSAD値およびその位置情報により、前記1ピクセル右の位置の縮小面または基底面参照ブロックについての近傍SAD値Sx2またはSSx2の保持情報を更新する(ステップS26)。
ステップS25で、算出されたSAD値Sinについての位置情報(縮小面または基底面参照ベクトル)の指す位置が、最小SAD値SminまたはSSminとして保持されている縮小面または基底面参照ブロックの位置の1ピクセル右の縮小面または基底面参照ブロックの位置でないと判別したときには、SAD値書き込み部1641は、算出されたSAD値Sinおよびその位置情報(縮小面または基底面参照ベクトル)は、ラインメモリ1647にのみ書き込み(前述のステップS27)、SAD値保持部1643に送らない。
そして、マッチング処理部163は、サーチ範囲の全ての縮小面または基底面参照ブロックの位置(参照ベクトル)でマッチング処理を終了したか否か判別し(ステップS27)、未だ、サーチ範囲においては、未処理の基底面参照ブロックがあると判別したときには、図28のステップS12に戻り、前述したステップS12以降の処理を繰り返す。
また、マッチング処理部163は、ステップS27で、サーチ範囲の全ての縮小面または基底面参照ブロックの位置(縮小面または基底面参照ベクトル)でマッチング処理を終了したと判別したときには、その旨を動きベクトル算出部164に伝える。
動きベクトル算出部164では、これを受けて、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小のSAD値SminまたはSSminとその近傍SAD値Sx1、Sx2、Sy1、Sy2またはSSx1、SSx2、SSy1、SSy2およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、高精度の縮小面または基底面動きベクトルを算出する(ステップS28)。以上で、補間処理が行われるモードにおける第2の例のブロックマッチング処理を終了する。
以上のように、この第2の例においては、算出された全てのSAD値を保持するSADテーブルを保持することなく、SADテーブルの1ライン分を設けると共に、SAD値書き込み部1641に1画素分のSAD値を保持しておくだけで、補間処理による高精度の動きベクトル検出を行うことができる。
この第2の例の方法は、前述の第1の例のSADテーブルを保持する手法と比べて、ブロックマッチング回数は同じであるため、処理時間は変わらず、ハードウエア規模を削減できるという効果を奏する。
なお、上述した第2の例の説明においては、SAD値比較部1642は、マッチング処理部163からの算出されたSAD値Sinと、SAD値保持部163に保持されている最小SAD値SminまたはSSminとを比較するようにしたが、SAD値比較部1642が最小SAD値の保持部を備え、その保持した最小SAD値と、算出されたSAD値Sinとを比較し、算出されたSinの方が小さいときには、保持した最小SAD値を更新すると共に、その位置情報と共に、SAD値書き込み部1641を通じてSAD値保持部1643に送って、SAD値保持部1643の最小SAD値保持部に保持させるようにしても良い。
<動きベクトル算出部164のハードウエア構成例の第3の例>
この動きベクトル算出部164のハードウエア構成例の第3の例においては、前記第2の例の場合のラインメモリ1647も省略して、より、ハードウエア規模の削減を図るようにした例である。
この第3の例においては、サーチ範囲における参照ブロックのSAD値の最小値(SminまたはSSmin)およびその位置情報(参照ベクトル)の検出および保持は、上述した第2の例と全く同様に行う。しかし、近傍SAD値およびその位置情報の取得および保持に関しては、第2の例のように、SAD値SminまたはSSminの検出時と同時には行わず、検出された最小SAD値SminまたはSSminの位置情報を、マッチング処理部163に返して、マッチング処理部163で、最小SAD値SminまたはSSminの近傍4点位置の参照ブロックについてのSAD値を再度、算出して、動きベクトル算出部164に供給するようにする。
動きベクトル算出部164では、当該マッチング処理部163からの再度のブロックマッチング処理により算出された前記近傍4点位置のSAD値およびその位置情報(参照ベクトル)を受け取って、SAD値保持部1643のそれぞれの保持部に格納するようにする。
この動きベクトル算出部164の第3の例のハードウエア構成例を、図30に示す。すなわち、この動きベクトル算出部164の第3の例においては、第1の例のSADテーブルTBLや第2の例のラインメモリ1647は備えずに、図30に示すように、SAD値書き込み部1641と、SAD値比較部1642と、SAD値保持部1643と、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645と、二次曲線近似補間処理部1646とを備えてなる。
この第3の例においても、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645と、二次曲線近似補間処理部1646とは、前述した第1の例および第2の例と同様の動作を行うが、SAD値書き込み部1641、SAD値比較部1642、SAD値保持部1643の部分は、前述の第1の例および第2の例とは、異なる動作を行う。
SAD値保持部1643は、第2の例と同様に、最小SAD値SminまたはSSminおよび近傍SAD値Sx1、Sx2、Sy1、Sy2またはSSx1、SSx2、SSy1、SSy2の保持部(メモリ)を備える。そして、この第3の例においても、SAD値保持部1643は、その最小SAD値保持部からの最小SAD値SminまたはSSminをSAD値比較部1642に供給する。しかし、この第3の例においては、SAD値保持部1643は、第2の例とは異なり、近傍SAD値の位置情報を、SAD値書き込み部1641に供給することしない。
SAD値比較部1642は、この第3の例においても、マッチング処理部163からの当該時点で算出されたSAD値Sinと、SAD値保持部1643の最小SAD値保持部からの最小SAD値SminまたはSSminとの両者を比較し、マッチング処理部163からの当該時点で算出されたSAD値Sinの方が小さいときには、当該時点で、そのSAD値を最小SAD値であるとして検出し、また、SAD値Sinの方が小さいときには、当該時点では、SAD値保持部1643の最小SAD値保持部からの最小SAD値SminまたはSSminが未だ最小値であると検出する。そして、SAD値比較部1642は、その検出結果の情報DETをSAD値書き込み部1641およびSAD値保持部1643に供給する。
SAD値書き込み部1641は、前述例と同様に、マッチング処理部163からの算出されたSAD値Sinおよびその位置情報(参照ベクトル)を一時保持するための1画素分のバッファメモリを備える。そして、この第3の例においては、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値について、行う。そして、この第3の例においては、サーチ範囲内の全ての参照ブロックについてのSAD値の算出が終了したときに、SAD値保持部1643は、保持している最小SAD値SminまたはSSminの位置情報(参照ベクトル)Vminを、マッチング処理部163に供給して、当該位置情報の近傍の4点の参照ブロックについてのSAD値の再算出を依頼する。
マッチング処理部163では、SAD値保持部1643から最小SAD値SminまたはSSminの位置情報(参照ベクトル)Vminを含む近傍参照ブロックについてのSAD値の再算出の依頼を受け取ると、前記最小SAD値SminまたはSSminの位置情報(参照ベクトル)Vminから、その近傍4点の近傍参照ブロックの位置を検出し、検出した位置の参照ブロックについて、SAD値の算出を行う。そして、算出したSAD値を、その位置情報(参照ベクトル)と共に、SAD値書き込み部1641に順次に供給する。
この場合、マッチング処理部163は、サーチ方向の順にブロックマッチング処理を行うので、近傍SAD値は、SAD値Sy1、Sx1、Sx2、Sy2またはSSx1、SSx2、SSy1、SSy2の順に算出される。SAD値書き込み部1641は、受け取った再算出されたSAD値およびその位置情報(参照ベクトル)を、順次にSAD値保持部1643に供給する。
SAD値保持部1643は、この再算出されたSAD値およびその位置情報(参照ベクトル)を、順次に、対応する格納部に書き込んで保持する。
こうして、近傍参照ブロックについてのSAD値の再算出が終了すると、前述の第2の例と同様にして、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小のSAD値SminまたはSSminとその近傍SAD値Sx1、Sx2、Sy1、Sy2またはSSx1、SSx2、SSy1、SSy2およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、サブピクセル精度の高精度の動きベクトルを算出する。
以上のようにして、第3の例においては、SADテーブルTBLやラインメモリを用いずに、高精度の縮小面または基底面動きベクトルの検出ができる。
この第3の例におけるブロックマッチング処理時の流れの例を、図31およびその続きである図32のフローチャートを参照しながら説明する。
はじめに、動きベクトル算出部164のSAD値保持部1643の最小SAD値SminまたはSSminの初期値を設定する(ステップS31)。この最小SAD値SminまたはSSminの初期値としては、例えば、画素の差分の最大値が設定される。
次に、マッチング処理部163では、縮小面または基底面での参照ベクトル(Vx,Vy)を設定して、SAD値を計算する縮小面または基底面参照ブロック位置を設定し(ステップS32)、設定した縮小面または基底面参照ブロックの画素データを、参照ブロックバッファ部162から読み込む(ステップS33)と共に、ターゲットブロックバッファ部161から縮小面または基底面ターゲットブロックの画素データを読み込んで、縮小面または基底面において、ターゲットブロックおよび参照ブロックの各画素データの差分の絶対値の総和、つまり、SAD値を求め、求めたSAD値を動きベクトル算出部164に送出する(ステップS34)。
動きベクトル算出部164では、SAD値比較部1642が、マッチング処理部163で算出されたSAD値Sinと、SAD値保持部1643に保持されている最小SAD値SminまたはSSminとを比較して、算出されたSAD値Sinが、それまで保持されている最小SAD値SminまたはSSminよりも小さいか否か判別する(ステップS35)。
このステップS35で、算出されたSAD値Sinが最小SAD値SminまたはSSminより小さいと判別したときには、ステップS36に進み、SAD値保持部1643に保持される最小SAD値SminまたはSSmin、およびその位置情報の更新がなされる。
すなわち、SAD値比較部1642は、算出されたSAD値Sinが最小SAD値SminまたはSSminより小さい旨の比較結果の情報DETをSAD値書き込み部1641に送る。すると、SAD値書き込み部1641は、当該算出されたSAD値Sinおよびその位置情報(基底面参照ベクトル)を、新たな最小SAD値SminまたはSSminの情報としてSAD値保持部1643に送る。SAD値保持部1643は、保持すべき最小SAD値SminまたはSSmin、およびその位置情報を、受け取った新たなSAD値Sinおよびその位置情報に更新する。
ステップS36の後には、ステップS37に進む。また、ステップS35で、算出されたSAD値Sinが最小SAD値SminまたはSSminより大きいと判別したときには、ステップS36の保持情報の更新処理は行わずにステップS37に進む。
ステップS37では、マッチング処理部163は、サーチ範囲の全ての縮小面または基底面参照ブロックの位置(縮小面または基底面参照ベクトル)でマッチング処理を終了したか否か判別し、未だ、サーチ範囲においては、未処理の縮小面または基底面参照ブロックがあると判別したときには、ステップS32に戻り、前述したステップS32以降の処理を繰り返す。
また、マッチング処理部163は、ステップS37で、サーチ範囲の全ての縮小面または基底面参照ブロックの位置(参照ベクトル)でマッチング処理を終了したと判別したときには、動きベクトル算出部164では、コントロール部165からの情報により、補間処理を行うモードか否か判別する(図32のステップS41)。
ステップS41で、補間を行わないモードであると判別したときには、動きベクトル算出部164では、SAD値保持部1643に保持される最小SAD値SminまたはSSminの位置情報(縮小面または基底面動きベクトル)を、コントロール部165に出力する(ステップS42)。
以上で、この第3の例において補間処理を行わないモードにおけるブロックマッチング処理を終了する。
次に、ステップS41で、補間処理を行うモードであると判別したときには、動きベクトル算出部164では、SAD値保持部1643からの最小SAD値SminまたはSSminの位置情報を受け取り、その近傍4点の位置の縮小面または基底面参照ブロックについてのSAD値の再算出を行い、再算出した近傍SAD値をSAD値書き込み部1641を通じてSAD値保持部1643に供給し、保持させるようにする(ステップS43)。
次に、動きベクトル算出部164では、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小のSAD値SminまたはSSminとその近傍SAD値Sx1、Sx2、Sy1、Sy2またはSSx1、SSx2、SSy1、SSy2、およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、高精度の縮小面または基底面動きベクトルを算出し、コントロール部165入出力する(ステップS44)。以上で、第3の例において補間処理を行うモードにおけるブロックマッチング処理を終了する。
この第3の例においては、上述した第2の例に比較して、SAD値を再算出する分だけ、処理時間が増加するが、ラインメモリをも必要としないので、回路規模を、第2の例よりも削減することができる。しかも、SAD値の再算出は、近傍SAD値のみであるので、上述の例では、高々4回であるので、処理時間の増加は少ない。
なお、上述した第3の例の説明では、最小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のハードウエアの系を、当該並列・並行処理するターゲットブロック数に応じた数だけ、設ける必要がある。
第1の例のように、SADテーブルを生成する方法の場合には、当該ターゲットブロック数分だけのSADテーブルを生成する必要があり、非常に大きなメモリが必要となってしまう。しかし、第2の例では、1ターゲットブロック当たりについて、SADテーブルの1ライン分でよく、メモリ容量を非常に少なくすることができる。さらに、第3の例の場合には、ラインメモリをも必要としないので、メモリ容量の大幅な削減をすることができる。
[動き検出・動き補償部16での複数種の動作モードのための機能ブロック図]
上述したように、この実施形態では、上述したようなハードウエア構成を備える動き検出・動き補償部16において、上述したようなブロックマッチング処理の複数種の動作モードの全てを実行することができる。この実施形態における動き検出・動き補償部16での当該複数種の動作モードを現出する機能ブロック構成図を、図33に示す。
図33に示すように、動き検出・動き補償部16は、機能的には、縮小面マッチング処理手段201と、縮小面近傍SAD値取得手段202と、縮小面SAD値補間手段203と、基底面マッチング処理手段204と、基底面近傍SAD値取得手段205と、基底面SAD値補間手段206とを備える。
縮小面マッチング処理手段201は、縮小面ターゲットブロック133と、縮小面マッチング処理範囲143内の全ての縮小面参照ブロック139との間で縮小面SAD値を計算し、縮小面最小SAD値Sminを求め、求めた縮小面最小SAD値Sminから縮小面動きベクトルを検出し、コントロール部165に出力する。
コントロール部165により、縮小面マッチング処理モードにおいては、当該縮小面処理手段201のみが動作するように制御されることになる。
縮小面近傍SAD値取得手段202は、前述したように、縮小面マッチング処理手段21で求められた縮小面最小SAD値Sminの近傍の4点の縮小面近傍SAD値Sx1、Sx2、Sy1、Sy2を取得する。
縮小面SAD値補間手段203は、縮小面最小SAD値Sminと、縮小面近傍SAD値Sx1、Sx2、Sy1、Sy2とを用いて、前述したピクセル精度の二次曲線近似補間処理を行い、高精度縮小面最小SAD値を求める。そして、縮小面SAD値補間手段203は、求めた高精度縮小面最小SAD値から高精度縮小面動きベクトルを検出し、コントロール部165に出力する。
コントロール部165により、縮小面マッチング+補間処理モードにおいては、縮小面マッチング処理手段201と、縮小面近傍SAD値取得手段202と、縮小面SAD値補間手段203とが動作するように制御されることになる。
基底面マッチング処理手段204は、基底面ターゲットブロック131と、基底面マッチング処理範囲144内の全ての基底面参照ブロック142との間で基底面SAD値を計算し、基底面最小SAD値Sminを求め、求めた基底面最小SAD値Sminから基底面動きベクトルを検出し、コントロール部165に出力する。
コントロール部165により、階層化マッチング処理モード1においては、縮小面マッチング処理手段201と、基底面マッチング処理手段204とが動作するように制御される。このとき、基底面マッチング処理手段204は、縮小面マッチング処理手段201で求められた縮小面動きベクトルに基づいて、基底面サーチ範囲および基底面マッチング処理範囲を定める。
また、コントロール部165により、階層化マッチング処理モード2においては、縮小面マッチング処理手段201と、縮小面SAD値補間手段202と、縮小面SAD値補間手段203と、基底面マッチング処理手段204とが動作するように制御される。このとき、基底面マッチング処理手段204は、縮小面SAD値補間手段203で求められた高精度縮小面動きベクトルに基づいて、基底面サーチ範囲および基底面マッチング処理範囲を定める。
図33に示すように、階層化マッチング処理モード1と、階層化マッチング処理モード2とは、コントロール部165により、機能手段としての切り替え手段207が切り替えられることにより、選択切り替え制御される。
基底面近傍SAD値取得手段205は、前述したように、基底面マッチング処理手段21で求められた基底面最小SAD値SSminの近傍の4点の基底面近傍SAD値SSx1、SSx2、SSy1、SSy2を取得する。
基底面SAD値補間手段206は、基底面最小SAD値SSminと、基底面近傍SAD値SSx1、SSx2、SSy1、SSy2とを用いて、前述したサブピクセル精度の二次曲線近似補間処理を行い、高精度基底面最小SAD値を求める。そして、基底面SAD値補間手段206は、求めた高精度基底面最小SAD値から高精度基底面動きベクトルを検出し、コントロール部165に出力する。
コントロール部16により、階層化マッチング+補間処理モード1では、縮小面マッチング処理手段201と、基底面マッチング処理手段204と、基底面SAD値取得手段205と、基底面SAD値補間手段206とが動作するように制御される。このとき、基底面マッチング処理手段204は、縮小面マッチング処理手段201で求められた縮小面動きベクトルに基づいて、基底面サーチ範囲および基底面マッチング処理範囲を定める。
また、コントロール部165により、階層化マッチング+補間処理モード2では、縮小面マッチング処理手段201と、縮小面SAD値補間手段202と、縮小面SAD値補間手段203と、基底面マッチング処理手段204と、基底面SAD値取得手段205と、基底面SAD値補間手段206とが動作するように制御される。このとき、基底面マッチング処理手段204は、縮小面SAD値補間手段203で求められた高精度縮小面動きベクトルに基づいて、基底面サーチ範囲および基底面マッチング処理範囲を定める。
図33に示すように、階層化マッチング+補間処理モード1と、階層化マッチング+補間処理モード2とは、コントロール部165により、機能手段としての切り替え手段207が切り替えられることにより、選択切り替え制御される。
[ブロックマッチング処理の複数種の動作モードの選択例]
次に、この実施形態におけるブロックマッチング処理の複数種の動作モードの選択例について説明する。
<第1の選択例>
図34の例は、静止画撮影モードか動画撮影モードかの選択、および、動きベクトルの検出精度また処理速度の選択に応じたブロックマッチング処理の複数種の動作モードの選択例である。この図34の処理ステップのそれぞれは、CPU1が実行するものである。
先ず、CPU1は、ユーザ操作入力部3からのユーザ操作入力を監視して、静止画撮影モードが選択されたか、動画撮影モードが選択されたかを判別する(ステップS51)。ステップS51で、静止画撮影モードが選択されたと判別したときには、CPU1は、ユーザ入力操作部3を通じて、動き検出精度として最も高精度が選択入力されているか否か判別し(ステップS52)、最も高精度が選択入力されてはいないと判別したときには、階層化マッチング+補間処理モード1を実行するように、動き検出・動き補償部16のコントロール部165に指示する(ステップS53)。また、ステップS52で、最も高精度が選択入力されていると判別したときには、CPU1は、階層化マッチング+補間処理モード2を実行するように、動き検出・動き補償部16のコントロール部165に指示する(ステップS54)。
次に、ステップS51で、動画撮影モードが選択されたと判別したときには、CPU1は、ユーザ入力操作部3を通じて、動きベクトル検出精度として低精度が選択入力されているか否か判別し(ステップS55)、低精度が選択入力されていると判別したときには、縮小面マッチング処理モードを実行するように、動き検出・動き補償部16のコントロール部165に指示する(ステップS56)。
ステップS55で、低精度が選択入力されていないと判別したときには、CPU1は、ユーザ入力操作部3を通じて、処理速度が高速の高精度が選択されているか、処理速度が低速でもよい高精度が選択されているか否かを判別する(ステップS57)。
そして、高速の高精度が選択されていると判別したときには、CPU1は、縮小面マッチング+補間処理モードを実行するように、動き検出・動き補償部16のコントロール部165に指示する(ステップS58)。
また、低速でも良い高精度が選択されていると判別したときには、CPU1は、階層化マッチング処理モード1または階層化マッチング処理モード2のいずれかを実行するように、動き検出・動き補償部16のコントロール部165に指示する(ステップS59)。このステップS59での、階層化マッチング処理モード1または階層化マッチング処理モード2の選択も、同様に、ユーザの動きベクトルの検出精度の選択入力に応じて、高精度が選択されている場合には、階層化マッチング処理モード2を選択し、そうでない場合には、階層化マッチング処理モード1を選択するようにすることができる。
なお、上述の例では、動画撮影モードにおいて、ユーザ入力操作部3を通じてユーザが、高精度の動きベクトルを検出するように選択しているとき、ステップS57では、ユーザの処理速度の選択設定入力に応じて、縮小面マッチング+補間処理モードと、階層化マッチング処理モード1または階層化マッチング処理モード2とのいずれを選択するかを決定するようにしたが、CPU1は、入力される撮像画像データのフレームレートを検出し、フレームレートが低い場合には、縮小面マッチング+補間処理モードを選択し、フレームレートが高い場合には、階層化マッチング処理モード1または階層化マッチング処理モード2を選択するように決定してもよい。
なお、フレームレートがユーザにより設定入力される場合は、その設定入力は、ユーザの処理速度の選択設定入力に含まれるものである。
<第2の選択例>
この実施形態の撮像装置においては、撮像記録実行モード時と、撮像記録実行前のカメラEE(Electro Eye)画モード時とにおいては、動作モードが、省電力モードと、省電力ではない通常モードとの2種類を選択することができるようになっている。
カメラEE画モードは、撮像記録状態(録画状態)になる前に、実行され続けられることが多く、撮像装置全体の消費電力に直結する。一方、カメラEEモード画モードにおける画質は、画像が液晶ディスプレイや電子ビューファインダに表示されているだけで、録画されていないことから、優先度が低いものである。したがって、カメラEE画モードでは、消費電力をできるだけ抑えて、撮像記録実行モード時になったら、画質をアップすることが望ましい。
そして、上述したブロックマッチングの複数種の動作モードにおいては、動きベクトルの検出精度が低い動作モードほど、システムバス2に対するバスアクセスが少なく、消費電力が少ない。
また、この実施形態における補間処理は、消費電力や処理速度に与える影響は小さいという特徴を備えている。
以上のことから、撮像記録実行モード時と、撮像記録実行前のカメラEE(Electro Eye)画モード時とにおいて、図35に示すように、省電力モードか、省電力ではない通常モードか、の2種の動作モードに応じて、求められる処理速度と消費電力が決まり、処理速度と消費電力とに応じて、CPU1は、最適な動きベクトルの検出精度を決定し、その決定に基づいて、ブロックマッチングの動作モードを切り替えるようにしている。
すなわち、図35に示すように、カメラEE画モードにおいて、省電力モード時においては、動きベクトルは、nピクセル精度の縮小面動きベクトルでよいため、ブロックマッチングの動作モードとしては、縮小面マッチング処理モードが選択される。
また、カメラEE画モードにおける通常モード時においては、ピクセル精度の高精度縮小面動きベクトルを検出するように設定することができ、ブロックマッチングの動作モードとしては、縮小面マッチング+補間処理モードが選択される。
また、撮像記録実行時における省電力モード時においては、動きベクトルは、1ピクセル精度の基底面動きベクトルでよいため、ブロックマッチングの動作モードとしては、階層化マッチング処理モード1または2が選択される。
また、撮像記録実行における通常モード時においては、サブピクセル精度の高精度基底面動きベクトルを検出することが望ましく、ブロックマッチングの動作モードとしては、階層化マッチング+補間処理モード1または2が選択される。
なお、上述の省電力モードと、通常モードの動作モードは、ユーザにより、設定されることになるが、カメラEE画モードと、撮像記録実行時とは、撮像記録スタートボタンのオンオフにより、切り替えられ、CPU1は、当該撮像記録スタートボタンのオンオフと、省電力モードまたは通常モードの動作モードとを参照して、動きベクトルの検出精度を決定し、ブロックマッチングの処理動作モードを決定するものである。
なお、ユーザにより設定入力される省電力モードと、通常モードとの動作モードにより、消費電力と処理速度を検出するのではなく、システムバス2に対するバスアクセスが予め定めたレベルよりも多くて過多であるか、あるいは、予め定めたレベルよりも低いかにより、CPU1が、消費電力と処理速度を検出し、動きベクトルの検出精度を決定し、ブロックマッチングの処理動作モードを決定するようにしてもよい。
<その他の選択例>
ブロックマッチングの複数種の動作モードを選択するためのパラメータとしては、上述の静止画/動画、動きベクトルの検出精度、処理速度だけではなく、システムバスにおける使用バス帯域、画素サイズ、サーチ範囲の大きさ、フレームレートなどを用いてもよいし、上記のパラメータの組み合わせを用いても良い。
[撮像画像のノイズ低減処理(NR処理)の概要の流れ]
<静止画撮影モード時>
上述の構成の実施の形態の撮像装置において、静止画撮影モード時における画像の重ね合わせによるノイズ低減処理のフローチャートを、図36および図37に示す。この図36および図37のフローチャートの各ステップは、CPU1およびこのCPU1により制御される動き検出・動き補償部16のコントロール部165の制御の下に実行されると共に、画像重ね合わせ部17により実行されるものである。
まず、シャッターボタンが押下されると、この例の撮像装置においては、CPU1による制御によって、高速で複数枚の画像の高速撮影が行われる。この例では、静止画撮影モード時に重ね合わすべきM枚(Mフレーム;Mは2以上の整数)の撮像画像データを高速で取り込み、画像メモリ部4に貼っておく(ステップS61)。
次に、参照フレームは、画像メモリ部4に蓄積されているM枚の画像フレームのうちの時間的にN番目(Nは2以上の整数で、最大値はM)とするのであるが、コントロール部165は、その何番目とする値Nの初期値を、N=2とする(ステップS62)。そして、次に、コントロール部165は、1枚目の画像フレームをターゲット画像(ターゲットフレーム)とし、N=2枚目の画像を参照画像(参照フレーム)に設定する(ステップS63)。
次に、コントロール部165は、ターゲットフレームにターゲットブロックを設定し(ステップS64)、動き検出・動き補償部16において、画像メモリ部4から、ターゲットブロックバッファ部161へターゲットブロックを読み込み(ステップS65)、参照ブロックバッファ部162へマッチング処理範囲の画素データを読み込む(ステップS66)。
次に、コントロール部165は、参照ブロックバッファ部162から、サーチ範囲内において参照ブロックを読み出し、マッチング処理部163で、上述したようにして、複数種のブロックマッチング処理モードの中から選択された動作モードのブロックマッチング処理を行う(ステップS67)。
次に、コントロール部165は、ブロックマッチング処理により検出された動きベクトルにしたがって、参照ブロックバッファ部162から動き補償ブロックを読み出し(ステップS68)、ターゲットブロックと同期して、後段の画像重ね合わせ部17へ送る(ステップS69)。
次に、CPU1の制御に従って、画像重ね合わせ部17は、ターゲットブロックと動き補償ブロックの重ね合わせを行い、重ね合わせたブロックのNR画像データを画像メモリ部4に貼る。すなわち、画像重ね合わせ部17は、重ね合わせたブロックのNR画像データを画像メモリ部4に書き込む(ステップS70)。
次に、コントロール部165は、ターゲットフレーム内のすべてのターゲットブロックについてのブロックマッチングを終了したか否か判別し(ステップS71)、すべてのターゲットブロックについては未だブロックマッチングの処理が終了していないと判別したときには、ステップS64に戻って、ターゲットフレーム内の次のターゲットブロックを設定して、ステップS64〜ステップS71までの処理を繰り返す。
また、コントロール部165は、ステップS71で、ターゲットフレーム内のすべてのターゲットブロックについてのブロックマッチングを終了したと判別したときには、重ね合わすべきすべての参照フレームについての処理が終了したか否か、つまり、M=Nであるか否か判別する(ステップS72)。
ステップS72で、M=Nではないと判別したときには、N=N+1とし(ステップS73)、次に、ステップS70での重ね合わせにより生成されたNR画像をターゲット画像(ターゲットフレーム)とし、また、N=N+1枚目の画像を参照画像(参照フレーム)とする(ステップS74)。その後、ステップS64に戻って、このステップS64以降の処理を繰り返す。つまり、Mが3以上の場合は、全てのターゲットブロックにおいて重ね合わせを行った画像を次のターゲット画像とし、3枚目以降の画像を参照フレームとして、上記の処理を繰り返して行く。これをM枚目の重ね合わせが終わるまで繰り返す。そして、ステップS72で、M=Nであると判別したときには、この処理ルーチンを終了する。
なお、M枚の撮影画像が重ね合わされた結果のNR画像の画像データは、静止画コーデック部18により圧縮符号化エンコードされて、記録再生装置部5に供給されて、その記録媒体に記録されるものである。
なお、以上の静止画のノイズ低減処理方法は、M枚の画像データを画像メモリ部4に貼っておく手法であるが、1枚撮影するたびに重ね合わせを行っても良い。その場合には、画像メモリ部4に記憶する画像フレームは、1枚でよいので、図36および図37の処理ルーチンのノイズ低減処理方法に比べて、撮影間隔は長くなるが、メモリコストを最小にすることが可能である。
<動画撮影モード時>
次に、この実施の形態の撮像装置において、動画撮影モード時における画像の重ね合わせによるノイズ低減処理のフローチャートを、図38に示す。この図38のフローチャートの各ステップも、CPU1およびこのCPU1により制御される動き検出・動き補償部16のコントロール部165の制御の下に実行されるものである。動画記録ボタンがユーザにより操作されると、CPU1は、図38の処理をスタートから開始するように指示する。
この実施の形態では、動き検出・動き補償部16は、ターゲットブロック単位でマッチング処理をするのに適した構成とされている。そこで、画像補正・解像度変換部15は、CPU1の制御に従って、フレーム画像を保持し、ターゲットブロック単位で、動き検出・動き補償部16へ画像データを送る(ステップS81)。
動き検出・動き補償部16に送られたターゲットブロックの画像データは、ターゲットブロックバッファ部161に格納される。次に、コントロール部165は、ターゲットブロックに対応した参照ベクトルを設定し(ステップS82)、画像メモリ部4から、マッチング処理範囲の画像データを参照ブロックバッファ部162へ読み込む(ステップS83)。
次に、マッチング処理部163および動きベクトル算出部164は、上述したようにして、複数種のブロックマッチング処理モードの中から選択された動作モードのブロックマッチング処理を行う(ステップS84)。
次に、コントロール部165は、ステップS84で算出された動きベクトルにしたがって、参照ブロックバッファ部162から動き補償ブロックの画像データを読み出し(ステップS85)、ターゲットブロックと同期して、後段の画像重ね合わせ部17へ送る(ステップS86)。
画像重ね合わせ部17においては、ターゲットブロックと動き補償ブロックの重ね合わせを行う。そして、画像重ね合わせ部17は、その重ね合わせた結果のNR画像の画像データを、NTSCエンコーダ20を通じてモニターディスプレイ6に出力することで、動画記録モニターをすると共に、動画コーデック部19を通じて記録再生装置部6に送り、記録媒体に記録するようにする(ステップS87)。
画像重ね合わせ部17で重ね合わせされた画像は、また、画像メモリ部4に格納し、次のフレーム(ターゲットフレーム)での参照フレームとなるようにする(ステップS88)。
そして、CPU1は、動画記録停止操作がユーザによりなされたか否か判別し(ステップS89)、当該動画記録停止操作がユーザによりなされていないと判別したときには、ステップS81に戻って、このステップS21以降の処理を繰り返すように指示する。また、ステップS89で、動画記録停止操作がユーザによりなされたと判別したときには、CPU1は、この処理ルーチンを終了するようにする。
以上の動画のノイズ低減処理の処理ルーチンにおいては、1フレーム前の画像フレームを参照フレームとするようにしたが、1フレームよりもさらに過去のフレームの画像を参照フレームとして用いるようにしても良い。また、1フレーム前と2フレーム前の画像を、画像メモリ部4に格納しておき、それらの2枚の画像情報の内容から、どちらの画像フレームを参照フレームにするかを選択しても良い。
上記のような手段、手順、システム構成を用いることで、一つの共通したブロックマッチング処理のハードウエアで、静止画ノイズ低減処理および動画ノイズ低減処理を行うことが可能になる。
上述したように、静止画NR処理の場合は、高速で複数枚の画像の撮影を行い、これら複数枚の画像データが画像メモリ部4に格納され、動き検出・動き補償部16は、この画像メモリ部4に格納された画像を使って、ブロックマッチング処理を行う。図39〜図42に、静止画NR処理時であって、撮影中加算の場合における画像データの流れを点線で示す。
すなわち、先ず、図39に示すように、撮像素子11からの撮影画像は、前処理部13でセンサー補正などの前処理をなされた後、RAW信号形式(カメラ信号処理を行う前のデータ形式)で、一旦、画像メモリ部4に格納される。
その後、撮影画像は、画像メモリ部4から読み出されてデータ変換部14でRAW信号からYC画素データ(YC画像フォーマット)に変化され、画像補正・解像度変換部15で画像補正、解像度変換などが行われた後、YC画像フォーマットで画像メモリ部4に書き込まれる。高速連写時は、以上の手順が複数枚分、繰り返して行われて、画像メモリ部4には、当該複数枚の撮像画像データがYC画像フォーマットで格納保持される。
画像メモリ部4に書き込まれたYC画像フォーマットの画像データは、動き検出・動き補償部16を通じて画像重ね合わせ部17に供給され、図22に示した画像重ね合わせ部17の縮小面生成部174で縮小化される。
その後、図40に示すように、撮像素子11からの3枚目の画像の取り込み処理と並行して、1枚目の画像をターゲット画像とし、2枚目の画像の参照画像として、動き検出・動き補償部16で階層化ブロックマッチングによる動きベクトル検出および動き補償ブロックの生成が行なわれる。そして、画像重ね合わせ部17で、生成された動き補償ブロックが用いられて画像重ね合わせ処理が行なわれる。
次に、1枚目と2枚目の撮像画像の重ね合わせが終わったら、図41に示すように、重ね合わせされた画像(NR画像)を次のターゲット画像とし、3枚目の画像を参照画像として、次の動きベクトル検出および画像重ね合わせが行なわれる。以上の処理が、連続撮影される複数の撮像画像が終わるまで、繰り返されて1枚の静止画NR画像が得られる。得られた静止画NR画像の画像データは、図42に示すように、静止画コーデック部18において、この例では、JPEG形式で圧縮されて、記録再生装置部5の記録媒体に保存される。
次に、動画NR処理時における画像データの流れを、図43および図44を参照しながら説明する。
動画NR処理の場合は、画像補正・解像度変換部15から動き検出・動き補償部16へ、リアルタイムにターゲットブロックが送られてくる。動き検出・動き補償部16は、図43に示すように、画像補正・解像度変換部15から送られてきたターゲットブロックをターゲットブロックバッファ部161に格納すると共に、このターゲットブロックに応じて、ブロックマッチング処理範囲を画像メモリ部4から読み出して、参照ブロックバッファ部162に格納する。
そして、動き検出・動き補償部16は、ターゲットブロックバッファ部161からのターゲットブロックと、当該ブロックマッチング処理範囲から参照ブロックとを読み出して、前述したブロックマッチング処理をして、動きベクトル検出および動き補償ブロックの生成を行い、動き補償ブロックおよびターゲットブロックは、画像重ね合わせ部17に供給する。
画像重ね合わせ部17は、受け取ったターゲットブロックと動き補償ブロックとを重ね合わせてゆく。そして、画像重ね合わせ部17は、図43に示すように、画像重ね合わせをしたNR済みの画像を画像メモリ部4に貼る。
図44に示すように、画像メモリ部4に貼られたNR画像は、次のフレーム(1フレーム前のNR画像となっている)で、動画コーデック部19に読み込まれ、圧縮された後、記録再生装置部5の記録媒体に保存される。また、画像メモリ部4に貼られたNR画像(1フレーム前のNR画像)は、同時に、NTSCエンコーダ20からも読み込まれ、モニターディスプレイ6に対するモニター出力も行われる。
動画NR処理時においては、以上の処理が、撮影画像毎に繰り返される。
なお、ここでは、参照画像は1フレーム分としたが、図44に示すように、参照画像を複数フレーム保持しておき、より相関性の高い画像を使用しても良い。
また、動画NR処理では、リアルタイム性が重視されるため、静止画NR処理のように、縮小面ターゲット画像を作って画像メモリ部4に格納することはせずに、図20に示したターゲットブロックバッファ部161内の縮小化処理部1613で、縮小面ターゲットブロックを生成して、そのまま縮小面バッファ1612に格納している。
[ブロックマッチング処理の流れの例]
次に、以上説明したブロックマッチングの複数種の動作モードにおける処理の流れを説明する。縮小面マッチング処理モードおよび縮小面マッチング+補間処理モードについては、前述した動きベクトル算出部164の3つの例の説明において示した処理の流れにより、既に説明したので、ここでは、階層化マッチング+補間処理モード1および階層化マッチング+補間処理モード2の場合の動作例を説明することにする。なお、階層化マッチング処理モード1および階層化マッチング処理モード2は、階層化マッチング+補間処理モード1および階層化マッチング+補間処理モード2の処理動作のうちの、補間処理を行わない処理動作になる。
図45および図46に、この実施の形態における動き検出・動き補償部16での階層化ブロックマッチング+補間処理モード1の動作例のフローチャートを示す。
なお、この図45および図46に示す処理の流れは、前述したマッチング処理部163、動き算出部164の処理例の流れとしての説明と、一部重複するものとなるが、この実施の形態の動作を、より理解し易くするために、説明するものである。また、この例は、動き検出・動き補償部16のハードウエア構成例として、第3の例を用いた場合である。
はじめに、動き検出・動き補償部16において、ターゲットブロックバッファ部161から、ターゲットブロックの縮小画、つまり、縮小面ターゲットブロックを読み込む(図45のステップS91)。次に、動きベクトル算出部164のSAD値保持部1643の最小SAD値Sminの初期値として、縮小面最小SAD値の初期値を設定する(ステップS92)。この縮小面最小SAD値Sminの初期値としては、例えば、画素の差分の最大値が設定される。
次に、マッチング処理部163では、縮小面サーチ範囲を設定すると共に、設定した縮小サーチ範囲において、縮小面参照ベクトル(Vx/n,Vy/n:1/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より大きいと判別したときには、ステップS77の保持情報の更新処理は行わずにステップS98に進む。
ステップS98では、マッチング処理部163は、縮小面サーチ範囲の全ての縮小面参照ブロックの位置(縮小面参照ベクトル)でマッチング処理を終了したか否か判別し、未だ、縮小面サーチ範囲においては、未処理の縮小面参照ブロックがあると判別したときには、ステップS93に戻り、前述したステップS93以降の処理を繰り返す。
また、マッチング処理部163は、ステップS78で、縮小面サーチ範囲の全ての縮小面参照ブロックの位置(縮小面参照ベクトル)でマッチング処理を終了したと判別したときには、SAD値保持部1643からの縮小面最小SAD値Sminの位置情報(縮小面動きベクトル)を受け取り、受け取った縮小面動きベクトルを、縮小倍率の逆数倍、すなわち、n倍したベクトルが、基底面ターゲットフレームにおいて指し示す位置座標を中心とした位置に基底面ターゲットブロックを設定するとともに、前記n倍したベクトルが指し示す位置座標を中心とした比較的狭い範囲として、基底面サーチ範囲を、基底面ターゲットフレームに設定し(ステップS99)、ターゲットブロックバッファ部161から、基底面ターゲットブロックの画素データを読み込む(ステップS100)。
そして、次に、動きベクトル算出部164のSAD値保持部1643の最小SAD値の初期値として、基底面最小SAD値SSminの初期値を設定する(図46のステップS101)。この基底面最小SAD値SSminの初期値としては、例えば、画素の差分の最大値が設定される。
次に、マッチング処理部163では、ステップS99で設定した基底面縮小サーチ範囲において、基底面参照ベクトル(Vx,Vy)を設定して、SAD値を計算する基底面参照ブロック位置を設定する(ステップS102)。そして、設定した基底面参照ブロックの画素データを、参照ブロックバッファ部162から読み込み(ステップS103)、基底面ターゲットブロックおよび基底面参照ブロックの各画素データの差分の絶対値の総和、つまり、基底面SAD値を求め、求めた基底面SAD値を動きベクトル算出部164に送出する(ステップS104)。
動きベクトル算出部164では、SAD値比較部1642が、マッチング処理部163で算出された基底面SAD値Sinと、SAD値保持部1643に保持されている基底面最小SAD値SSminとを比較して、算出された基底面SAD値Sinが、それまで保持されている基底面最小SADS値Sminよりも小さいか否か判別する(ステップS105)。
このステップS105で、算出された基底面SAD値Sinが基底面最小SAD値SSminより小さいと判別したときには、ステップS106に進み、SAD値保持部1643に保持される基底面最小SAD値SSminおよびその位置情報の更新がなされる。
すなわち、SAD値比較部1642は、算出された基底面SAD値Sinが基底面最小SAD値SSminより小さい旨の比較結果の情報DETをSAD値書き込み部1641に送る。すると、SAD値書き込み部1641は、当該算出された基底面SAD値Sinおよびその位置情報(参照ベクトル)を、新たな基底面最小SAD値SSminの情報としてSAD値保持部1643に送る。SAD値保持部1643は、保持すべき基底面最小SAD値SSminおよびその位置情報を、受け取った新たな基底面SAD値Sinおよびその位置情報に更新する。
ステップS106の後には、ステップS107に進む。また、ステップS105で、算出された基底面SAD値Sinが基底面最小SAD値SSminより大きいと判別したときには、ステップS106の保持情報の更新処理は行わずにステップS107に進む。
ステップS107では、マッチング処理部163は、基底面サーチ範囲の全ての基底面参照ブロックの位置(基底面参照ベクトル)でマッチング処理を終了したか否か判別し、未だ、基底面サーチ範囲においては、未処理の基底面参照ブロックがあると判別したときには、ステップS102に戻り、前述したステップS102以降の処理を繰り返す。
また、マッチング処理部163は、ステップS107で、基底面サーチ範囲の全ての基底面参照ブロックの位置(基底面参照ベクトル)でマッチング処理を終了したと判別したときには、SAD値保持部1643からの基底面最小SAD値SSminの位置情報(基底面動きベクトル)を受け取り、その近傍4点の位置の基底面参照ブロックについての基底面SAD値の再算出を行い、再算出した近傍基底面SAD値SSx1、SSx2、SSy1、SSy2をSAD値書き込み部1641を通じてSAD値保持部1643に供給し、保持させるようにする(ステップS108)。
次に、動きベクトル算出部164では、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持されている、前記検出した最小の基底面SAD値Sminとその近傍基底面SAD値SSx1、SSx2、SSy1、SSy2およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、サブピクセル精度の高精度の基底面動きベクトルを算出する(ステップS109)。以上で、1枚の参照フレームについてのこの階層化マッチング+補間処理モード1の例のブロックマッチング処理を終了する。
なお、階層化マッチング処理モード1の場合には、ステップS107で、基底面サーチ範囲の全ての基底面参照ブロックの位置(基底面参照ベクトル)でマッチング処理を終了したと判別したときには、ステップS108およびステップS109は行わず、その代わりに、SAD値保持部1643からの基底面最小SAD値SSminの位置情報から基底面動きベクトルを検出し、それをコントロール部165に出力するようにする。
次に、階層化マッチング+補間処理モード2の動作例のフローチャートを、図47および図48に示す。この例も、動き検出・動き補償部16のハードウエア構成例として、第3の例を用いた場合である。
図47のステップS111〜ステップS117までの処理動作は、前述した図45のステップS91〜ステップS97までの処理動作と全く同じである。そして、この図47の例においては、ステップS118で、縮小面サーチ範囲内の全ての縮小面参照ベクトルでマッチングを行っていないと判別したときには、ステップS113に戻って、このステップS113以降の処理を繰り返す。
また、ステップS118で、縮小面サーチ範囲内の全ての縮小面参照ベクトルでマッチングを行ったと判別したときには、SAD値保持部1643からの縮小面最小SAD値Sminの位置情報(縮小面動きベクトル)を受け取り、その近傍4点の位置の縮小面参照ブロックについての縮小面SAD値の再算出を行い、再算出した近傍縮小面SAD値Sx1、Sx2、Sy1、Sy2をSAD値書き込み部1641を通じてSAD値保持部1643に供給し、保持させるようにする(ステップS119)。
次に、動きベクトル算出部164では、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持されている、前記検出した最小の縮小面SAD値Sminとその近傍縮小面SAD値Sx1、Sx2、Sy1、Sy2およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、ピクセル精度の高精度の縮小面動きベクトルを算出する(ステップS120)。
次に、ステップS120で算出した高精度縮小面動きベクトル、縮小倍率の逆数倍、すなわち、n倍したベクトルが、基底面ターゲットフレームにおいて指し示す位置座標を中心とした位置に基底面ターゲットブロックを設定するとともに、前記n倍したベクトルが指し示す位置座標を中心とした比較的狭い範囲として、基底面サーチ範囲および基底面マッチング処理範囲を、基底面ターゲットフレームに設定し(図48のステップS121)、ターゲットブロックバッファ部161から、基底面ターゲットブロックの画素データを読み込む(ステップS122)。
そして、次に、動きベクトル算出部164のSAD値保持部1643の最小SAD値の初期値として、基底面最小SAD値SSminの初期値を設定する(ステップS123)。このステップS123からステップS131までの処理は、前述した図46のステップS101からステップS109までの処理と全く同様とされる。
なお、階層化マッチング処理モード2の場合には、ステップS129で、基底面サーチ範囲の全ての基底面参照ブロックの位置(基底面参照ベクトル)でマッチング処理を終了したと判別したときには、ステップS130およびステップS131は行わず、その代わりに、SAD値保持部1643からの基底面最小SAD値SSminの位置情報から基底面動きベクトルを検出し、それをコントロール部165に出力するようにする。
次に、この実施の形態における階層化ブロックマッチング手法を用いた画像処理方法の効果を、具体例を挙げて説明する。
図49に、上述の実施の形態の説明で用いた基底面、縮小面での、参照ブロック、サーチ範囲、マッチング処理範囲の具体例を示す。図49の例は、水平方向および垂直方向の縮小倍率1/nは、n=4に設定した場合である。
比較例として、図49(A)および(B)に示すように、例えば、縮小画像を用いない参照ブロック108は、横(水平)×縦(垂直)=32×32ピクセルとし、また、サーチ範囲106は、横(水平)×縦(垂直)=144×64ピクセル、マッチング処理範囲110は、横(水平)×縦(垂直)=176×96ピクセルとする。
すると、上述した実施の形態において、水平方向および垂直方向に、1/n=1/4に縮小された縮小面では、図49(C)および(D)に示すように、縮小面参照ブロック139は、横(水平)×縦(垂直)=8×8ピクセル、縮小面サーチ範囲137は、横(水平)×縦(垂直)=36×16ピクセル、縮小面マッチング処理範囲143は、横(水平)×縦(垂直)=44×24ピクセルとなる。
水平方向および垂直方向に、1/4に縮小された縮小面で、ブロックマッチングを行った場合、縮小面動きベクトルは、4ピクセル精度の動きベクトルであり、単純に4倍しただけでは、1ピクセル精度の動きベクトルに対して誤差が生じる。すなわち、図9に示したように、基底面での画素を丸印で示すようなものとした場合、基底面でのマッチング処理点148は、当該基底面の全ての画素が対象となるが、1/4に縮小された縮小面で、ブロックマッチングを行う場合のマッチング処理点は、図9において、黒丸で示す4ピクセル単位のマッチング処理点147となっているからである。
しかし、少なくとも、1ピクセル精度の動きベクトルは、縮小面動きベクトルが指し示す縮小面でのマッチング処理点の周囲、4ピクセル範囲以内に存在するであろうことは予測できる。
そこで、この実施の形態では、算出された縮小面動きベクトルを元に基底面サーチ範囲を定める基底面マッチングでは、縮小面動きベクトルを縮小倍率の逆数である4倍した参照ベクトルが指し示すピクセル位置を中心に、基底面ターゲットブロックを設定するとともに、4ピクセル分のサーチ範囲(基底面サーチ範囲140)を決定して、基底面ブロックマッチングを行い、再度動きベクトルを算出するようにしている。
したがって、図49(E)および(F)に示すように、基底面参照ブロック142は、横(水平)×縦(垂直)=32×32ピクセル、基底面サーチ範囲140は、横(水平)×縦(垂直)=4×4ピクセル、基底面マッチング処理範囲144は、横(水平)×縦(垂直)=40×40ピクセルとなる。
図50に、この実施の形態のように、縮小面マッチングと、基底面マッチングの2階層マッチングを行う場合において、SADテーブルを使用すると仮定した場合における、基底面、縮小面での、SADテーブルのサイズを示す。なお、図50の例は、図49に示した具体例に対応したものである。
縮小する前の144×64のサーチ範囲(図49(B)参照)の場合におけるSADテーブルTBLは、図50(A)に示すように、145×65点である。
これに対して、36×16の縮小面サーチ範囲(図49(D)参照)の場合における縮小面SADテーブルは、図50(B)に示すように、37点×17点となる。
また、4×4の基底面サーチ範囲(図49(F)参照)の場合における基底面SADテーブルは5点×5点となる。
したがって、階層マッチングを施さない場合のマッチング処理回数は145×65=9425回であるのに対し、階層マッチングを適用した場合のマッチング回数は37×17+5×5=654回となり、処理時間を大幅に短縮できることが分かる。
そして、前述した動きベクトル検出方法の第2の例の場合におけるラインメモリは、縮小面SADテーブルの1ライン分でよいので、37個のSAD値およびその位置情報を格納できるものでよく、SADテーブルTBLの場合の、9425個のSAD値およびその位置情報を格納するメモリに対して非常に小さいメモリでよくなる。
また、前述した動きベクトル算出部164の構成例の第3の例の場合には、37個のSAD値およびその位置情報を格納する縮小面SADテーブルさえも不要となるので、さらに回路規模を小さくすることができる。
以上のようにして、上記の実施の形態によれば、階層化したマッチング処理を行った後、基底面において補間処理をすることにより、広いサーチ範囲で、サブピクセル精度の動きベクトル検出を行うことが可能になる。
[他の実施形態または変形例]
なお、上述の実施形態では、ブロックマッチングの動作モードとしては、上述の例のような6種類の動作モードを用いる場合を説明したが、このほかに、縮小面でのブロックマッチング処理を伴わない、基底面マッチング処理モードおよび基底面マッチング+補間処理モードを設けるようにしても良い。
また、上述の実施の形態において、動き検出・動き補償部16の動きベクトル算出部164の第2の例においては、サーチ範囲におけるサーチ方向を水平ライン方向に取り、例えばサーチ範囲の左上から順に参照ブロックを移動させるようにしてサーチを行うようにすると共に、SADテーブルの1ライン分のメモリを設けるようにしたが、サーチ範囲におけるサーチ方向を垂直方向に取り、例えばサーチ範囲の左上端から垂直方向にサーチを開始し、垂直方向の1列分のサーチが終わった後、水平方向に、参照ブロックの位置を1つ分、例えば1画素分右の垂直方向の列に移動し、その列の上端から垂直方向にサーチする、という手順を繰り返すサーチ方法を採用するようにしても良い。このようにサーチ範囲の左上端から順に、垂直方向に参照ブロックを移動させるようにしてサーチを行うようにする場合には、SADテーブルの垂直方向の一列分のメモリを設けるようにすれば良い。
ここで、水平方向にサーチ方向を取るか、垂直方向にサーチ方向を取るかは、マッチング処理部、動きベクトル算出部の回路規模を考慮して、より回路規模が小さくなる方を採用するのが好ましい。
なお、前述もしたように、参照ブロックの移動は、1画素毎、また、1ライン毎ではなく、複数画素毎、また、複数ライン毎でもよい。したがって、前者の場合の水平方向の1ライン分メモリは、水平方向における参照ブロックの移動位置分だけでよく、また、後者の場合の垂直方向の一列分のメモリは、垂直方向における参照ブロックの移動位置分だけでよい。つまり、参照ブロックの移動を1画素毎、また、1ライン毎に行う場合には、1ライン分メモリは、1ラインの画素数分の容量のメモリが必要であり、また、垂直方向の一列分メモリは、ライン数分の容量のメモリが必要である。しかし、複数画素毎、また、複数ライン毎に、参照ブロックを移動させる場合には、1画素毎、また、1ライン毎に参照ブロックを移動させる場合よりも、1ライン分メモリおよび1列分メモリの容量は少なくなる。
また、補間処理の方法は、上述した二次曲線近似補間処理に限られるものではなく、前述もしたように、3次曲線や、より高次の曲線を用いた補間処理を行っても良い。
また、上述の実施の形態は、この発明による画像処理装置を撮像装置に適用した場合であるが、この発明は、撮像装置に限られるわけではなく、画像フレーム間の動きを検出する場合の全てに適用可能である。
また、上述の実施の形態は、画像の重ね合わせによるノイズ低減処理のために、ブロック単位に動きベクトルを検出する場合に、この発明を適用した場合であるが、これに限られるものではなく、例えば撮像時の手ぶれによる動きベクトルを検出するためにも用いることができることは言うまでもない。手ぶれによる動きベクトルは、例えば、複数のブロック動きベクトルの平均値として求めることができる。
4…画像メモリ部、16…動き検出・動き補償部、17…画像重ね合わせ部、18…静止画コーデック部、100…ターゲット画像(ターゲットフレーム)、101…参照画像(参照フレーム)、102…ターゲットブロック、104…動きベクトル106…サーチ範囲、107…参照ベクトル、108…参照ブロック、163…マッチング処理部、164…動きベクトル算出部、165…コントロール部