以下、この発明による画像処理方法を用いた画像処理装置の実施形態として、撮像装置の場合を例にとって、図を参照しながら説明する。また、検出した動きベクトルを用いて行う処理として、複数枚の画像を重ね合わせてノイズ低減を行う場合の例について説明する。
[この発明による画像処理装置の実施形態]
以下に説明する実施の形態の撮像装置では、図2に示すように、連続して撮影された複数枚の画像、例えばP1,P2,P3を、動き検出および動き補償を用いて位置合わせをした後、重ね合わせすることで、ノイズが低減された画像Pmixを得ることができるようにしている。すなわち、複数枚の画像のそれぞれにおけるノイズはランダムなものであるので、同一内容の画像を重ね合わせることで、画像に対してノイズが低減されるものである。
以下の説明において、動き検出および動き補償を用いて複数枚の画像を重ね合わせて、ノイズを低減することをNR(Noise Reduction)と呼び、NRによりノイズ低減された画像をNR画像と称することとする。
この明細書では、ノイズ低減を施したい画面(画像)をターゲット画面(ターゲットフレーム)、重ね合わせたい画面を参照画面(参照フレーム)と定義する。連続して撮影された画像は、撮影者の手ブレなどにより、画像の位置がずれており、両画像の重ね合わせを行うには、位置合わせが重要となる。ここで、考慮しなければならないのは、手ブレのような画面全体のブレと共に、画面内における被写体の動きも存在することである。
このため、被写体に対してもノイズ低減効果を高めるためには、図3に示すように、ターゲットフレーム100を分割して生成される複数個のターゲットブロック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のフレームレートのノイズ低減された撮像画像信号を得るようにすることもできる。
なお、この実施の形態においては、さらに、より高精度で画像の重ね合わせができるように、処理対象画像の画素ピッチの精度(ピクセル精度という)よりも高精度、つまり、元の画面(ターゲットフレーム)の画素ピッチよりも小さいピッチの高精度(この高精度をサブピクセル精度と呼ぶことにする)で、ブロック動きベクトルを検出するようにする。このサブピクセル精度での動きベクトル算出のために、後述するように、この実施の形態においては、ピクセル精度で求めた動きベクトルと、その近傍の参照ベクトルとを用いて補間処理をするようにする。
図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)イメージャで構成されている。なお、撮像素子12は、CMOS(Complementary Metal Oxide Semiconductor)イメージャで構成してもよい。
この例の撮像装置においては、撮像記録開始操作がなされると、レンズ10Lを通じて入力された映像が、撮像素子11により撮像画像信号に変換され、タイミング信号発生部12からのタイミング信号に同期した信号として、赤(R)、緑(G)、青(B)の3原色から構成されるベイヤー配列のRAW信号(生の信号)であるアナログ撮像信号が出力される。出力されたアナログ撮像信号は、前処理部13に供給され、欠陥補正やγ補正等の前処理が施され、データ変換部14に供給される。
データ変換部14は、これに入力されたRAW信号であるアナログ撮像信号を、輝度信号成分Yと、赤/青の色差信号成分Cr/Cbとにより構成されるデジタル撮像信号(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によりソフトウエア処理とすることもできる。
[動き検出・動き補償部16の説明]
動き検出・動き補償部16では、この実施の形態では、基本的には、図55〜図60を用いて説明した、SAD値を用いてブロックマッチング処理を行うことで、動きベクトル検出を行うようにする。ただし、この実施の形態では、動き検出・動き補償部16は、後述するようなハードウエアで構成され、共通のハードウエアで階層化したブロックマッチング処理を行うようにする。また、後述するように、共通のハードウエアで、静止画についてのノイズ低減処理と、動画についてのノイズ低減処理とが実現できるように構成している。
<実施の形態の階層化ブロックマッチング処理の概要>
一般的な従来のブロックマッチングにおける動きベクトル検出処理は、ピクセル単位(1ピクセル単位または複数ピクセル単位)で参照ブロックを移動させて、各移動位置における参照ブロックについてのSAD値を算出し、その算出したSAD値の中から最小値を示すSAD値を検出し、当該最小SAD値を呈する参照ブロック位置に基づいて動きベクトルを検出するようにする。
しかし、このような従来の動きベクトル検出処理では、サーチ範囲内をピクセル単位で参照ブロックを移動させるようにするので、検索するサーチ範囲に比例して、SAD値を算出するマッチング処理回数が多くなって、マッチング処理時間が大きくなると共に、SADテーブルの容量も大きくなるという問題があった。
そこで、この実施の形態では、ターゲット画像(ターゲットフレーム)に対して縮小画像を作成し、作成した縮小画像でブロックマッチングを行い、縮小画像での動き検出結果を基に、もとのターゲット画像でのブロックマッチングを行う。ここで、縮小画像のことを縮小面、縮小化をしていない元の画像のことを基底面と呼ぶことにする。したがって、この第2の実施の形態では、縮小面でのブロックマッチングを行ったあと、そのマッチング結果を用いて基底面でのブロックマッチングを行う。
図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テーブルを小規模とすることができる。
図9に示すように、縮小面サーチ範囲137に応じて定まる縮小面マッチング処理範囲143内に設定される複数個の縮小面参照ブロック139と縮小面ターゲットブロック131とのブロックマッチングによる相関性評価により、縮小面参照フレーム135における縮小面動きベクトル136が算出される。この縮小面動きベクトル136の精度は、画像が1/n×1/nに縮小されているので、1ピクセルのn倍の低精度となっている。そこで、この算出された縮小面動きベクトル136をn倍しても、基底面参照フレーム134において、1ピクセル精度の動きベクトル104は得られない。
しかし、基底面参照フレーム134においては、縮小面動きベクトル136をn倍した動きベクトルの近傍に、1ピクセル精度の基底面動きベクトル104が存在することは明らかである。
そこで、この実施の形態では、図8(C)および図9に示すように、基底面参照フレーム134において、縮小面動きベクトル136をn倍した動きベクトル(基底面参照ベクトル141)が指し示す位置を中心として、基底面動きベクトル104が存在するであろうと考えられる狭い範囲に、基底面サーチ範囲140を設定し、設定された基底面サーチ範囲140に応じて基底面マッチング処理範囲144を設定する。
そして、図8(C)に示すように、この基底面サーチ範囲140内の位置を示すものとして、基底面参照フレーム134における基底面参照ベクトル141を設定し、各基底面参照ベクトル141が指し示す位置に基底面参照ブロック142を設定して、基底面参照フレーム134におけるブロックマッチングを行うようにする。
ここで設定された基底面サーチ範囲140および基底面マッチング処理範囲144は、図9に示すように、縮小面サーチ範囲137および縮小面マッチング処理範囲143を縮小率の逆数倍であるn倍したサーチ範囲137´およびマッチング処理範囲143´に比較して非常に狭い範囲でよい。
したがって、階層化マッチングを行わずに、基底面においてのみブロックマッチング処理をした場合には、基底面においては、サーチ範囲137´およびマッチング処理範囲143´において、複数個の参照ブロックを設定して、ターゲットブロックとの相関値を求める演算をする必要があるが、階層化マッチング処理においては、図9のように、非常に狭い範囲においてのみマッチング処理を行えばよい。
このため、当該狭い範囲である、基底面サーチ範囲140および基底面マッチング処理範囲144に設定される基底面参照ブロックの数は非常に少なくなり、マッチング処理回数(相関値演算回数)および保持するSAD値を非常に小さくすることができ、処理を高速化することができると共に、SADテーブルを小規模化することができるという効果を得ることができる。
こうして、基底面参照フレーム134において、ピクセル精度の基底面動きベクトル136が検出できたら、この実施の形態においては、基底面動きベクトル136が指し示す参照ブロックのSAD値、すなわち、最小SAD値と、その近傍の近傍SAD値とを用いて、この例においても二次曲線近似補間処理を行って、サブピクセル精度の高精度動きベクトルを算出するようにする。
サブピクセル精度の高精度動きベクトルについて説明する。前述したブロックマッチング手法では、ピクセル単位でブロックマッチングを行っているため、動きベクトルはピクセル精度でしか算出されない。図60に示したように、マッチング処理を行った点、つまり、参照ブロックの位置は、ピクセル精度で存在し、より精度の高い動きベクトルを算出するには、サブピクセル単位でのマッチング処理が必要になる。
N倍のピクセル精度(画素ピッチは、1/N)の動きベクトルを算出するために、N倍のピクセル単位でマッチング処理を行うと、SADテーブルは約N2倍の大きさになり、膨大なメモリが必要になる。また、ブロックマッチング処理のために、N倍にアッパーサンプルした画像を生成しなくてはならず、ハードウエアの規模は飛躍的に増大する。
そこで、二次曲線を用いて、SADテーブルを補間することで、ピクセル単位でマッチング処理を行ったSADテーブルから、サブピクセル精度の動きベクトルを算出することを考える。この場合において、二次曲線近似補間ではなく、線形補間や、3次以上の高次の近似曲線補間を用いても良いが、精度とハードウエア化との兼ね合いから、この例では、二次曲線近似補間を用いている。
この二次曲線近似補間においては、図10に示すように、ピクセル精度の動きベクトル104が指し示すSADテーブルのSAD値の最小値Smin(図10の参照符号113参照)と、当該最小値Sminの位置の近傍位置の複数個のSAD値(近傍SAD値という)、この例では、最小値Sminの位置のX方向およびY方向に隣接する4個の近傍SAD値Sx1、Sx2およびSy1、Sy2(図10の参照符号114,115,116,117参照)を使用する。
図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方向に、斜め方向を加えて近似曲線を当て嵌めてもかまわない。
以上のような手段、手順を用いることにより、ピクセル単位の精度のSADテーブルの値から、サブピクセル精度のベクトル検出結果が得られることを図12に示す。図12の横軸は、補間倍率であり、1次元方向に分解能を何倍にするかを表している。SADテーブルは2次元のため、テーブル面積は、この2乗の割合で削減されるのに対し、補間による誤差は、線形程度にしか増加しないことから、上述の補間手法の有用性が分かる。
<動き検出・動き補償部16の構成例>
図13に、動き検出・動き補償部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として書き込まれ、参照画像とのブロックマッチングに基づき画像の重ね合わせがなされると、当該画像の重ね合わせ後のNR画像に書き換えられてゆく。
参照ブロックバッファ部162には、画像メモリ部4に記憶されている縮小面参照画像Prrまたは基底面参照画像Pbrの画像フレームからの縮小面参照ブロックまたは基底面参照ブロックが書き込まれる。縮小面参照画像Prrまたは基底面参照画像Pbrは、前記最初の撮像フレームの後の撮像フレームが、参照フレーム108として書き込まれる。
この場合、連続して撮影された複数枚の撮像画像を取り込みながら画像の重ね合わせ処理を行う場合(これを撮影中加算と呼ぶことにする)には、基底面参照画像および縮小面参照画像としては、前記最初の撮像フレームの後の撮像フレームが、1枚ずつ順次に取り込まれる。したがって、基底面参照画像および縮小面参照画像としては、1枚ずつを保持すればよい。
しかし、連続して撮影された複数枚の撮像画像を取り込んだ後、動き検出・動き補償部16および画像重ね合わせ部17で、動きベクトル検出を行い、画像の重ね合わせを実行するようにする場合(これを撮影後加算と呼ぶことにする)には、基底面参照画像および縮小面参照画像としては、前記最初の撮像フレームの後の複数枚の撮像フレームの全てを格納保持しておく必要がある。
撮像装置としては、撮影中加算および撮影後加算のいずれも用いることができるが、この実施形態では、静止画NR処理は、多少処理時間がかかっても、ノイズが低減された綺麗な画像が要求されることを考慮して、撮影後加算の処理を採用している。この実施形態における静止画NR処理の詳細な動作説明は、後で詳述する。
一方、動画撮影時においては、動き検出・動き補償部16には、画像補正・解像度変換部15からの撮像フレームがターゲットフレーム102として入力される。ターゲットブロックバッファ部161には、この画像補正・解像度変換部15からの、ターゲットフレームから抽出されたターゲットブロックが書き込まれる。また、参照ブロックバッファ部162には、前記ターゲットフレームよりも1枚前の、画像メモリ部4に記憶されている撮像フレームが、参照フレーム108とされ、この参照フレーム(基底面参照画像Pbrまたは縮小面参照画像Prr)からの参照ブロックが書き込まれる。
この動画撮影時には、画像メモリ部4には、画像補正・解像度変換部15からのターゲットフレームとの間でブロックマッチングをすべき、1枚前の撮像画像フレームを基底面参照画像Pbrおよび縮小面参照画像Prrとして保持するだけでよく、画像メモリ部4に保持する画像情報は、1枚分(1フレーム分)でよいので、この例では、基底面参照画像Pbrおよび縮小面参照画像Prrとしては、画像データ圧縮していない。
マッチング処理部163では、前述の図55〜図60を用いて説明したブロックマッチング処理を、ターゲットブロックバッファ部161に記憶されたターゲットブロックと、参照ブロックバッファ部162に記憶された参照ブロックとについて行う。
ここで、ブロックマッチングにおけるターゲットブロックと、参照ブロックとの相関の強さを検出するためには、この実施の形態においても、画像データの輝度情報を用いてSAD値算出を行い、その最小SAD値を検出して、当該最小SAD値を呈する参照ブロックを最強相関参照ブロックとして検出するようにする。
なお、SAD値の算出は、輝度情報ではなく、色差信号や、3原色信号R,G,Bの情報を使用しても良いことは言うまでもない。また、SAD値の算出に当たっては、通常は、ブロック内の全画素を用いるようにするが、演算量削減のため、間引き等により、飛び飛びの位置の限られた画素の画素値のみを使用するようにしてもよい。
動きベクトル算出部164は、マッチング処理部163のマッチング処理結果からターゲットブロックに対する参照ブロックの動きベクトルを検出する。この実施形態では、動きベクトル算出部164は、SAD値の最小値を検出保持すると共に、この最小SAD値を呈する参照ベクトルの近傍の複数個の参照ベクトルのSAD値をも保持して、例えば二次曲線近似補間処理を行って、サブピクセル精度の高精度動きベクトルを検出する機能も備える。
コントロール部165は、CPU1による制御を受けながら、この動き検出・動き補償部16における階層化ブロックマッチング処理の、後述するようなパイプライン化した効率の良い処理動作を行うための制御するようにする。
また、コントロール部165は、この例では、動きベクトル算出部164からの基底面において算出された最終的な動きベクトルを用いて、参照ブロックバッファ162から、その画像データの読み出しを制御することにより、動き補償ブロックを読み出す制御も併せて行うようにしている。
<ターゲットブロックバッファ161の構成例>
ターゲットブロックバッファ161の構成例のブロック図を、図14に示す。この図14に示すように、ターゲットブロックバッファ161は、基底面バッファ部1611と、縮小面バッファ部1612と、縮小化処理部1613と、セレクタ1614,1615および1616とを備えている。セレクタ1614,1615および1616は、図14では、図示は省略したが、コントロール部165からの選択制御信号によりそれぞれ選択制御される。
基底面バッファ部1611は、基底面ターゲットブロックを一時格納するためのもので、後述するようなパイプライン化処理を行うために、この例では、4バンクのバッファBKTO−A、BKTO−B、BKTO−C、BKTO−Dを備える。この基底面バッファ部1611の4バンクのバッファBKTO−A、BKTO−B、BKTO−C、BKTO−Dのそれぞれは、基底面ターゲットブロックを格納することができる容量を有する。この基底面バッファ部1611は、基底面ターゲットブロックを、画像重ね合わせ部17に送ると共に、セレクタ1616に供給する。
縮小面バッファ部1612は、縮小面ターゲットブロックを一時格納するためのもので、この例では、2バンクのバッファBKRO−A、BKRO−Bを備える。この縮小面バッファ部1612の2バンクのバッファBKRO−A、BKRO−Bのそれぞれは、縮小面ターゲットブロックを格納することができる容量を有する。縮小面バッファ部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の構成例のブロック図を、図15に示す。この図15に示すように、参照ブロックバッファ162は、基底面バッファ部1621と、縮小面バッファ部1622と、セレクタ1623とを備えている。セレクタ1623は、図15では、図示は省略したが、コントロール部165からの選択制御信号により選択制御される。
基底面バッファ部1621は、画像メモリ部4からの基底面参照ブロックを一時格納し、その基底面参照ブロックを、セレクタ1623に供給すると共に、画像重ね合わせ部17に、動き補償ブロックとして送る。基底面バッファ部1621は、この例では、2バンクのバッファBKTC−A、BKTC−Bを備える。この基底面バッファ部1621の2バンクのバッファBKTC−A、BKTC−Bのそれぞれは、基底面参照ブロックを格納することができる容量を有する。
縮小面バッファ部1622は、画像メモリ部4からの縮小面参照ブロックを一時格納するためのもので、この例では、2バンクのバッファBKRC−A、BKRC−Bを備える。この縮小面バッファ部1612の2バンクのバッファBKRC−A、BKRC−Bのそれぞれは、縮小面参照ブロックを格納することができる容量を有する。縮小面バッファ部1622は、縮小面参照ブロックを、セレクタ1623に供給する。
セレクタ1623は、コントロール部1615からの選択制御信号に応じて、縮小面でのブロックマッチング時には、縮小面バッファ部1612からの縮小面参照ブロックを、基底面でのブロックマッチング時には、基底面バッファ部1611からの基底面参照ブロックを、それぞれ選択出力し、出力した縮小面参照ブロックまたは基底面参照ブロックをマッチング処理部163に送る。
<画像重ね合わせ部17の構成例>
画像重ね合わせ部17の構成例のブロック図を、図16に示す。この図16に示すように、画像重ね合わせ部17は、加算率計算部171と、加算部172と、基底面出力バッファ部173と、縮小面生成部174と、縮小面出力バッファ部175とを備えて構成されている。
そして、画像重ね合わせ部17と、画像メモリ部4とは、システムバス2を通じて接続されている。すなわち、この例では、システムバス2と基底面出力バッファ部173および縮小面出力バッファ部162との間には、それぞれバス・インターフェース部23およびバス・インターフェース部24が接続されている。
加算率計算部171は、動き検出・動き補償部16からのターゲットブロックおよび動き補償ブロックを受けて、両者の加算率を、採用する加算方式が単純加算方式であるか、または平均加算方式であるかに応じて定め、定めた加算率を、ターゲットブロックおよび動き補償ブロックと共に加算部172に供給する。
加算部172での加算結果の基底面NR画像は、基底面出力バッファ部173およびバス・インターフェース23を通じて画像メモリ部4に書き込まれる。また、加算部172での加算結果の基底面NR画像は、縮小面生成部174にて縮小面NR画像に変換され、当該縮小面生成部174からの縮小面NR画像が、縮小面出力バッファ部175およびバス・インターフェース24を通じて画像メモリ部4に書き込まれる。
[撮像画像のノイズ低減処理の概要の流れ]
<静止画撮影時>
上述の構成の実施の形態の撮像装置において、静止画撮影時における画像の重ね合わせによるノイズ低減処理のフローチャートの例を、図17および図18に示す。この例は、撮影後加算の場合の例である。この図17および図18のフローチャートの各ステップは、CPU1およびこのCPU1により制御される動き検出・動き補償部16のコントロール部165の制御の下に実行されると共に、画像重ね合わせ部17により実行されるものである。
まず、シャッターボタンが押下されると、この例の撮像装置においては、CPU1による制御によって、高速で複数枚の画像の高速撮影が行われる。この例では、静止画撮影時に重ね合わすべきM枚(Mフレーム;Mは2以上の整数)の撮像画像データを高速で取り込み、画像メモリ部4に貼っておく(ステップS1)。
次に、参照フレームは、画像メモリ部4に蓄積されているM枚の画像フレームのうちの時間的にN番目(Nは2以上の整数で、最大値はM)とするのであるが、コントロール部165は、その何番目とする値Nの初期値を、N=2とする(ステップS2)。そして、次に、コントロール部165は、1枚目の画像フレームをターゲット画像(ターゲットフレーム)とし、N=2枚目の画像を参照画像(参照フレーム)に設定する(ステップS3)。
次に、コントロール部165は、ターゲットフレームにターゲットブロックを設定し(ステップS4)、動き検出・動き補償部16において、画像メモリ部4から、ターゲットブロックバッファ部161へターゲットブロックを読み込み(ステップS5)、参照ブロックバッファ部162へマッチング処理範囲の画素データを読み込む(ステップS6)。
次に、コントロール部165は、参照ブロックバッファ部162から、サーチ範囲内において参照ブロックを読み出し、マッチング処理部163で、この実施形態における階層化マッチング処理を行う。なお、この例では、後述するように、マッチング処理部163で算出されたSAD値のうち、後述するSAD値は、SAD値の最小値およびその近傍のSAD値を保持して、二次曲線近似補間処理を行うために、動きベクトル算出部164へ送られる。これをサーチ範囲内のすべての参照ベクトルで繰り返した後、二次曲線近似補間処理部で、前述した補間処理を行い、高精度の動きベクトルを出力する(ステップS7)。
次に、コントロール部165は、以上のようにして検出された高精度の動きベクトルにしたがって、参照ブロックバッファ部162から動き補償ブロックを読み出し(ステップS8)、ターゲットブロックと同期して、後段の画像重ね合わせ部17へ送る(ステップS9)。
次に、CPU1の制御に従って、画像重ね合わせ部17は、ターゲットブロックと動き補償ブロックの重ね合わせを行い、重ね合わせたブロックのNR画像データを画像メモリ部4に貼る。すなわち、画像重ね合わせ部17は、重ね合わせたブロックのNR画像データを画像メモリ部4に書き込む(ステップS10)。
次に、コントロール部165は、ターゲットフレーム内のすべてのターゲットブロックについてのブロックマッチングを終了したか否か判別し(ステップS11)、すべてのターゲットブロックについては未だブロックマッチングの処理が終了していないと判別したときには、ステップS4に戻って、ターゲットフレーム内の次のターゲットブロックを設定して、ステップS4〜ステップS11までの処理を繰り返す。
また、コントロール部165は、ステップS11で、ターゲットフレーム内のすべてのターゲットブロックについてのブロックマッチングを終了したと判別したときには、重ね合わすべきすべての参照フレームについての処理が終了したか否か、つまり、M=Nであるか否か判別する(ステップS12)。
ステップS12で、M=Nではないと判別したときには、N=N+1とし(ステップS13)、次に、ステップS10での重ね合わせにより生成されたNR画像をターゲット画像(ターゲットフレーム)とし、また、N=N+1枚目の画像を参照画像(参照フレーム)とする(ステップS14)。その後、ステップS4に戻って、このステップS4以降の処理を繰り返す。つまり、Mが3以上の場合は、全てのターゲットブロックにおいて重ね合わせを行った画像を次のターゲット画像とし、3枚目以降の画像を参照フレームとして、上記の処理を繰り返して行く。これをM枚目の重ね合わせが終わるまで繰り返す。そして、ステップS12で、M=Nであると判別したときには、この処理ルーチンを終了する。
なお、M枚の撮影画像が重ね合わされた結果のNR画像の画像データは、静止画コーデック部18により圧縮符号化エンコードされて、記録再生装置部5に供給されて、その記録媒体に記録されるものである。
なお、以上の静止画のノイズ低減処理方法は、M枚の画像データを画像メモリ部4に貼っておく手法であるが、1枚撮影するたびに重ね合わせを行っても良い。その場合には、画像メモリ部4に記憶する画像フレームは、1枚でよいので、図21および図22の処理ルーチンのノイズ低減処理方法に比べて、撮影間隔は長くなるが、メモリコストを最小にすることが可能である。
<動画撮影時>
次に、この実施の形態の撮像装置において、動画撮影時における画像の重ね合わせによるノイズ低減処理のフローチャートを、図19に示す。この図19のフローチャートの各ステップも、CPU1およびこのCPU1により制御される動き検出・動き補償部16のコントロール部165の制御の下に実行されるものである。動画記録ボタンがユーザにより操作されると、CPU1は、図19の処理をスタートから開始するように指示する。
この実施の形態では、動き検出・動き補償部16は、ターゲットブロック単位でマッチング処理をするのに適した構成とされている。そこで、画像補正・解像度変換部15は、CPU1の制御に従って、フレーム画像を保持し、ターゲットブロック単位で、動き検出・動き補償部16へ画像データを送る(ステップS21)。
動き検出・動き補償部16に送られたターゲットブロックの画像データは、ターゲットブロックバッファ部161に格納される。次に、コントロール部165は、ターゲットブロックに対応した参照ベクトルを設定し(ステップS22)、画像メモリ部4から、マッチング処理範囲の画像データを参照ブロックバッファ部162へ読み込む(ステップS23)。
次に、マッチング処理部163および動きベクトル算出部164は、この実施形態における階層化ブロックマッチングによる動き検出処理を行う(ステップS24)。すなわち、マッチング処理部163は、先ず、縮小面において、縮小面ターゲットブロックの画素値と縮小面参照ブロックの画素値との間のSAD値を算出し、算出したSAD値を動きベクトル算出部164へ送る。マッチング処理部163は、この処理をサーチ範囲内のすべての縮小面参照ブロックで繰り返す。サーチ範囲内のすべての縮小面参照ブロックについてのSAD値の算出が終了した後、動きベクトル算出部164は、最小のSAD値を特定して、縮小面動きベクトルを検出する。
コントロール部165は、動きベクトル算出部164で検出された縮小面動きベクトルを縮小率の逆数倍して、基底面上における動きベクトルに変換し、その変換したベクトルが、基底面において指し示す位置を中心した領域を、基底面におけるサーチ範囲とする。そして、コントロール部165は、マッチング処理部163に、当該サーチ範囲において、基底面におけるブロックマッチング処理を行わせるように制御する。マッチング処理部163は、基底面ターゲットブロックの画素値と基底面参照ブロックの画素値との間のSAD値を算出し、算出したSAD値を動きベクトル算出部164へ送る。
サーチ範囲内のすべての縮小面参照ブロックについてのSAD値の算出が終了した後、動きベクトル算出部164は、最小のSAD値を特定して、縮小面動きベクトルを検出すると共に、その近傍のSAD値を特定し、それらのSAD値を用いて、前述した二次曲線近似補間処理を行い、サブピクセル精度の高精度の動きベクトルを出力する。
次に、コントロール部165は、ステップS24で算出された高精度の動きベクトルにしたがって、参照ブロックバッファ部162から動き補償ブロックの画像データを読み出し(ステップS25)、ターゲットブロックと同期して、後段の画像重ね合わせ部17へ送る(ステップS26)。
画像重ね合わせ部17においては、ターゲットブロックと動き補償ブロックの重ね合わせを行う。そして、画像重ね合わせ部17は、その重ね合わせた結果のNR画像の画像データを、NTSCエンコーダ20を通じてモニターディスプレイ6に出力することで、動画記録モニターをすると共に、動画コーデック部19を通じて記録再生装置部6に送り、記録媒体に記録するようにする(ステップS27)。
画像重ね合わせ部17で重ね合わせされた画像は、また、画像メモリ部4に格納し、次のフレーム(ターゲットフレーム)での参照フレームとなるようにする(ステップS28)。
そして、CPU1は、動画記録停止操作がユーザによりなされたか否か判別し(ステップS29)、当該動画記録停止操作がユーザによりなされていないと判別したときには、ステップS21に戻って、このステップS21以降の処理を繰り返すように指示する。また、ステップS29で、動画記録停止操作がユーザによりなされたと判別したときには、CPU1は、この処理ルーチンを終了するようにする。
以上の動画のノイズ低減処理の処理ルーチンにおいては、1フレーム前の画像フレームを参照フレームとするようにしたが、1フレームよりもさらに過去のフレームの画像を参照フレームとして用いるようにしても良い。また、1フレーム前と2フレーム前の画像を、画像メモリ部4に格納しておき、それらの2枚の画像情報の内容から、どちらの画像フレームを参照フレームにするかを選択しても良い。
上記のような手段、手順、システム構成を用いることで、一つの共通したブロックマッチング処理のハードウエアで、静止画ノイズ低減処理および動画ノイズ低減処理を行うことが可能になる。
[動きベクトル算出部164について]
次に、動きベクトル算出部164の構成例およびその動作について説明する。
従来から知られている動きベクトル算出部の例においては、サーチ範囲において算出したSAD値を全て記憶するSADテーブルTBLを生成し、そのSADテーブルTBLから最小SAD値を検出し、当該最小SAD値を呈する参照ブロックの位置に対応する参照ベクトルを動きベクトルとして算出する。そして、二次曲線近似補間をする場合には、生成したSADテーブルTBLから、前記最小SAD値の近傍の複数個、この例では、4個のSAD値を抽出し、これらのSAD値を用いて補間処理をする。したがって、この方法は、SADテーブルTBLの分だけ、大規模なメモリを必要とする。
以下に説明する例は、サーチ範囲で算出したSAD値を全て記憶するSADテーブルTBLを生成しないことにより、より回路規模を削減することができるとともに、処理時間も削減することができるようにするものである。
<実施形態の動きベクトル算出部164の第1の例>
上述したように、ブロックマッチング処理は、参照ベクトルの示す位置を参照ブロックの位置とし、各参照ブロックの各画素とターゲットブロックの各画素のSAD値を計算し、その計算処理を、サーチ範囲内のすべての参照ベクトルの示す位置の参照ブロックについて行う。
ここで、サーチ範囲内において参照ブロックの位置を変えて、動き補償ブロックをサーチする場合に、サーチを画面(フレーム)の端から順番に行う、画面(フレーム)の中心から外側に向かって行う、などいろいろな方法が考えられるが、この実施の形態では、サーチ方向は、図20(A)で矢印120に示すように設定され、サーチ範囲の左上端から水平方向にサーチを開始し、1ライン分のサーチが終わった後、垂直方向に1ライン下のラインを、左端から水平方向にサーチする、という手順を繰り返すサーチ方法を採用する。
すなわち、図20(B)に示すように、サーチ範囲106において、当該サーチ範囲106の左上から水平方向に参照ブロック108を順次に設定してサーチして、各参照ブロック108についてのSAD値の計算を行う。すると、図20(C)に示すように、対応するSADテーブルも左上から水平方向に埋まっていく。このとき、実際にマッチング処理に使用される画素データの範囲は、参照ブロック108の大きさに応じたマッチング処理範囲110となるのは、前述した通りである。
図10および図11に示したように、この例のサブピクセル精度の二次曲線近似補間処理を行うためには、SAD値の最小値Smin、およびその近傍のSAD値Sx1、Sx2、Sy1、Sy2が求まれば良い。
各参照ブロックについてのSAD値を算出した際に、その算出したSAD値と、その時点までのSAD値の最小値とを比較して、算出したSAD値がその時までのSAD値の最小値よりも小さければ、算出したSAD値を最小値として保持すると共に、そのSAD値とそのときの参照ベクトルを保持することにより、SAD値の最小値および当該最小値を取る参照ブロックの位置情報(参照ベクトルの情報)とを、SADテーブルを生成することなく、求めることができる。
そして、検出したSAD値の最小値を保持すると共に、その最小SAD値となる参照ブロック位置の近傍の参照ブロックのSAD値を、近傍SAD値として保持するようにすれば、近傍SAD値をも、SADテーブルを生成することなく、保持することができる。
このとき、この例では、図21(A)に示すように、上述の図20(A)に示したようなサーチ方法を採用しているので、従来のSADテーブルTBLにおいて水平方向の1ライン分のSAD値を記憶する容量のメモリ(以下、ラインメモリという)を設ければ、新たに参照ブロックのSAD値が算出されたときには、SADテーブルTBL上では、図21(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)(図21(C)の符号125参照)は、後で、その参照ブロック位置で算出されたSAD値を保持すればよい。同様に、SADテーブルTBL上において、新たに算出された最小SAD値の参照ブロックの位置の1ライン下の位置の参照ブロックのSAD値である近傍SAD値(Sy2)(図21(C)の符号126参照)も、後で、その参照ブロック位置で算出されたSAD値を保持すればよい。
以上のことを考慮して、この動きベクトル算出部164の第1の例は、図22に示すようなハードウエア構成とする。
すなわち、この動きベクトル算出部164の第1の例においては、算出された全てのSAD値を保持するSADテーブルTBLは備えず、SAD値書き込み部1641と、SAD値比較部1642と、SAD値保持部1643と、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645と、二次曲線近似補間処理部1646と、SADテーブルTBLの1ライン分のメモリ(ラインメモリという)1647とを備えてなる。
SAD値保持部1643は、最小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ライン分のラインメモリを用いることにより、サブピクセル精度の動きベクトルの検出ができる。
この第1の例における縮小面でのブロックマッチング処理時の流れの例を図23のフローチャートに、基底面でのブロックマッチング処理時の流れの例を図24および図25のフローチャートに、それぞれ示す。これらの第2の例のフローチャートの各ステップも、マッチング処理部163および動きベクトル算出部164においてなされるものである。
先ず、縮小面におけるブロックマッチング処理時の流れの例である図23のフローチャートについて説明する。
はじめに、動きベクトル算出部164のSAD値保持部1643の最小SAD値Sminの初期値を設定する(ステップS31)。この最小SAD値Sminの初期値としては、例えば、画素の差分の最大値が設定される。
次に、マッチング処理部163では、縮小面の参照ベクトル(Vx,Vy)を設定して、SAD値を計算する縮小面参照ブロック位置を設定し(ステップS32)、設定した縮小面参照ブロックの画素データを、参照ブロックバッファ部162から読み込む(ステップS33)と共に、ターゲットブロックバッファ部161から縮小面ターゲットブロックの画素データを読み込んで、縮小面ターゲットブロックおよび縮小面参照ブロックの各画素データの差分の絶対値の総和、つまり、SAD値を求め、求めたSAD値を動きベクトル算出部164に送出する(ステップS34)。
動きベクトル算出部164では、SAD値書き込み部1641により、そのSAD値をラインメモリ1647に書き込む(ステップS35)。
そして、動きベクトル算出部164では、SAD値比較部1642が、マッチング処理部163で算出されたSAD値Sinと、SAD値保持部1643に保持されている最小SAD値Sminとを比較して、算出されたSAD値Sinが、それまで保持されている最小SAD値Sminよりも小さいか否か判別する(ステップS36)。
このステップS36で、算出されたSAD値Sinが最小SAD値Sminより小さいと判別したときには、ステップS37に進み、SAD値保持部1643に保持される最小SAD値Sminの情報およびその位置情報(縮小面参照ベクトル)の更新がなされる。
また、ステップS36で、算出されたSAD値Sinが最小SAD値Sminより大きいと判別したときには、ステップS37の保持情報の更新処理は行わずにステップS38に進み、マッチング処理部163は、サーチ範囲の全ての縮小面参照ブロックの位置(縮小面参照ベクトル)でマッチング処理を終了したか否か判別し、未だ、サーチ範囲においては、未処理の参照ブロックがあると判別したときには、ステップS32に戻り、前述したステップS32以降の処理を繰り返す。
また、マッチング処理部163は、ステップS38で、サーチ範囲の全ての縮小面参照ブロックの位置(縮小面参照ベクトル)でマッチング処理を終了したと判別したときには、その旨を動きベクトル算出部164に伝える。
動きベクトル算出部164では、これを受けて、SAD値保持部1643に保持される最小SAD値Sminの位置情報(縮小面参照ベクトル)を、コントロール部165に出力する(ステップS39)。
以上で、この例における縮小面におけるブロックマッチング処理を終了する。
次に、基底面におけるブロックマッチング処理時の流れの例である図24および図25のフローチャートについて説明する。
はじめに、動きベクトル算出部164のSAD値保持部1643の最小SAD値Sminの初期値を設定する(ステップS41)。この最小SAD値Sminの初期値としては、例えば、画素の差分の最大値が設定される。
次に、マッチング処理部163では、基底面における参照ベクトル(Vx,Vy)を設定して、SAD値を計算する基底面参照ブロック位置を設定し(ステップS42)、設定した基底面参照ブロックの画素データを、参照ブロックバッファ部162から読み込む(ステップS43)。
そして、ターゲットブロックバッファ部161から基底面ターゲットブロックの画素データを読み込んで、基底面ターゲットブロックおよび基底面参照ブロックの各画素データの差分の絶対値の総和、つまり、SAD値を求め、求めたSAD値を動きベクトル算出部164に送出する(ステップS44)。
動きベクトル算出部164では、SAD値書き込み部1641により、そのSAD値をラインメモリ1647に書き込む(ステップS45)。そして、動きベクトル算出部164では、SAD値比較部1642が、マッチング処理部163で算出されたSAD値Sinと、SAD値保持部1643に保持されている最小SAD値Sminとを比較して、算出されたSAD値Sinが、それまで保持されている最小SAD値Sminよりも小さいか否か判別する(ステップS46)。
このステップS46で、算出されたSAD値Sinが最小SAD値Sminより小さいと判別したときには、ステップS47に進み、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に送ると共に、図21(B)から分かるように、ラインメモリ1647の最も古いSAD値およびその位置情報(基底面参照ベクトル)と、最も新しいSAD値およびその位置情報(基底面参照ベクトル)とを、最小SAD値の位置の1ピクセル上の位置の基底面参照ブロックのSAD値Sy1の情報および1ピクセル左の位置の基底面参照ブロックのSAD値Sx1の情報として、SAD値保持部1643に送る。SAD値保持部1643は、受け取った新たな最小SAD値Sminの情報および1ピクセル上の位置の基底面参照ブロックのSAD値Sy1の情報および1ピクセル左の位置の基底面参照ブロックのSAD値Sx1の情報により、それぞれ対応する保持情報を更新する。
そして、ステップ47の次には、図25のステップS51に進む。また、ステップS46で、算出されたSAD値Sinが最小SAD値Sminより大きいと判別したときには、ステップS47の保持情報の更新処理は行わずにステップS51に進む。
ステップS51では、SAD値書き込み部1641は、算出されたSAD値Sinについての位置情報(参照ベクトル)の指す位置が、最小SAD値Sminとして保持されている基底面参照ブロックの位置の1ピクセル下の基底面参照ブロックの位置であるか否か判別し、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にのみ書き込み(前述のステップS45)、SAD値保持部1643に送らない。
そして、マッチング処理部163は、サーチ範囲の全ての基底面参照ブロックの位置(参照ベクトル)でマッチング処理を終了したか否か判別し(ステップS55)、未だ、サーチ範囲においては、未処理の基底面参照ブロックがあると判別したときには、図24のステップS42に戻り、前述したステップS42以降の処理を繰り返す。
また、マッチング処理部163は、ステップS45で、サーチ範囲の全ての基底面参照ブロックの位置(基底面参照ベクトル)でマッチング処理を終了したと判別したときには、その旨を動きベクトル算出部164に伝える。
動きベクトル算出部164では、これを受けて、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小のSAD値Sminとその近傍SAD値Sx1、Sx2、Sy1、Sy2およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、サブピクセル精度の高精度の動きベクトルを算出する(ステップS56)。以上で、1枚の基底面参照フレームについての第2の例のブロックマッチング処理を終了する。
以上のように、この第1の例においては、算出された全てのSAD値を保持するSADテーブルを保持することなく、SADテーブルの1ライン分を設けると共に、SAD値書き込み部1641に1画素分のSAD値を保持しておくだけで、補間処理によるサブピクセル精度の動きベクトル検出を行うことができる。
この第1の例の方法は、従来のSADテーブルTBLのすべてを保持する手法と比べて、ブロックマッチング回数は同じであるため、処理時間は変わらず、ハードウエア規模を削減できるという効果を奏する。
なお、上述した第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の第2の例のハードウエア構成例を、図26に示す。すなわち、この動きベクトル算出部164の第3の例においては、第1の例のラインメモリ1647は備えずに、図26に示すように、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値の再算出が終了すると、前述の第1の例と同様にして、X方向(水平方向)近傍値抽出部1644およびY方向(垂直方向)近傍値抽出部1645が、SAD値保持部1643に保持された、前記検出した最小のSAD値Sminとその近傍SAD値Sx1、Sx2、Sy1、Sy2およびそれらの位置情報を読み出し、二次曲線近似補間処理部1646に送る。これを受けた二次曲線近似補間処理部1646は、二次曲線による補間を、X方向およびY方向の2回行い、前述したようにして、サブピクセル精度の高精度の動きベクトルを算出する。
以上のようにして、第2の例においては、SADテーブルTBLやラインメモリを用いずに、サブピクセル精度の動きベクトルの検出ができる。
この第2の例における縮小面でのブロックマッチング処理時の流れの例は、ラインメモリ1647への書き込みを行わない点を除いて、図23に示した第1の例の場合と同様であるので、ここでは、説明を省略する。そして、この第2の例における基底面でのブロックマッチング処理時の流れの例を、図27のフローチャートを参照しながら説明する。
はじめに、動きベクトル算出部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枚の参照フレームについての第3の例の基底面でのブロックマッチング処理を終了する。
この第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テーブルTBLを生成する方法の場合には、当該ターゲットブロック数分だけのSADテーブルを生成する必要があり、非常に大きなメモリが必要となってしまう。しかし、第1の例では、1ターゲットブロック当たりについて、SADテーブルの1ライン分でよく、メモリ容量を非常に少なくすることができる。さらに、第2の例の場合には、ラインメモリをも必要としないので、メモリ容量の大幅な削減をすることができる。
[階層化ブロックマッチング処理の流れの例]
次に、図28および図29に、この実施の形態における動き検出・動き補償部16での階層化ブロックマッチング処理の動作例のフローチャートを示す。
なお、この図28および図29に示す処理の流れは、前述したマッチング処理部163、動き算出部164の処理例の流れとしての説明と、一部重複するものとなるが、この実施の形態の動作を、より理解し易くするために、説明するものである。
はじめに、動き検出・動き補償部16において、ターゲットブロックバッファ部161から、ターゲットブロックの縮小画、つまり、縮小面ターゲットブロックを読み込む(図28のステップS71)。次に、動きベクトル算出部164のSAD値保持部1643の最小SAD値Sminの初期値として、縮小面最小SAD値の初期値を設定する(ステップS72)。この縮小面最小SAD値Sminの初期値としては、例えば、画素の差分の最大値が設定される。
次に、マッチング処理部163では、縮小面サーチ範囲を設定すると共に、設定した縮小サーチ範囲において、縮小面参照ベクトル(Vx/n,Vy/n:1/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倍したベクトルが、基底面ターゲットフレームにおいて指し示す位置座標を中心とした位置に基底面ターゲットブロックを設定するとともに、前記n倍したベクトルが指し示す位置座標を中心とした比較的狭い範囲として、基底面サーチ範囲を、基底面ターゲットフレームに設定し(ステップS79)、ターゲットブロックバッファ部161から、基底面ターゲットブロックの画素データを読み込む(ステップS80)。
そして、次に、動きベクトル算出部164のSAD値保持部1643の最小SAD値Sminの初期値として、基底面最小SAD値の初期値を設定する(図29のステップ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回行い、前述したようにして、サブピクセル精度の高精度の基底面動きベクトルを算出する(ステップS89)。以上で、1枚の参照フレームについてのこの例のブロックマッチング処理を終了する。
次に、この実施の形態による階層化ブロックマッチング手法を用いた画像処理方法の効果を、具体例を挙げて説明する。
図30に、上述の実施の形態の説明で用いた基底面、縮小面での、参照ブロック、サーチ範囲、マッチング処理範囲の具体例を示す。図30の例は、水平方向および垂直方向の縮小倍率1/nは、n=4に設定した場合である。
比較例として、図30(A)および(B)に示すように、例えば、縮小画像を用いない参照ブロック108は、横(水平)×縦(垂直)=32×32ピクセルとし、また、サーチ範囲106は、横(水平)×縦(垂直)=144×64ピクセル、マッチング処理範囲110は、横(水平)×縦(垂直)=176×96ピクセルとする。
すると、上述した実施の形態において、水平方向および垂直方向に、1/n=1/4に縮小された縮小面では、図30(C)および(D)に示すように、縮小面参照ブロック139は、横(水平)×縦(垂直)=8×8ピクセル、縮小面サーチ範囲137は、横(水平)×縦(垂直)=36×16ピクセル、縮小面マッチング処理範囲143は、横(水平)×縦(垂直)=44×24ピクセルとなる。
水平方向および垂直方向に、1/4に縮小された縮小面で、ブロックマッチングを行った場合、縮小面動きベクトルは、4ピクセル精度の動きベクトルであり、単純に4倍しただけでは、1ピクセル精度の動きベクトルに対して誤差が生じる。すなわち、基底面での画素が図31に示すようなものとした場合、基底面でのマッチング処理点148は、当該基底面の全ての画素が対象となるが、1/4に縮小された縮小面で、ブロックマッチングを行う場合のマッチング処理点は、図31において、黒丸で示す4ピクセル単位のマッチング処理点147となっているからである。
しかし、少なくとも、1ピクセル精度の動きベクトルは、縮小面動きベクトルが指し示す縮小面でのマッチング処理点の周囲、4ピクセル範囲以内に存在するであろうことは予測できる。
そこで、この実施の形態では、算出された縮小面動きベクトルを元に基底面サーチ範囲を定める基底面マッチングでは、縮小面動きベクトルを縮小倍率の逆数である4倍した参照ベクトルが指し示すピクセル位置を中心に、基底面ターゲットブロックを設定するとともに、4ピクセル分のサーチ範囲(基底面サーチ範囲140)を決定して、基底面ブロックマッチングを行い、再度動きベクトルを算出する。
したがって、図30(E)および(F)に示すように、基底面参照ブロック142は、横(水平)×縦(垂直)=32×32ピクセル、基底面サーチ範囲140は、横(水平)×縦(垂直)=4×4ピクセル、基底面マッチング処理範囲144は、横(水平)×縦(垂直)=40×40ピクセルとなる。
図32に、この実施の形態のように、縮小面マッチングと、基底面マッチングの2階層マッチングを行う場合において、SADテーブルを使用すると仮定した場合における、基底面、縮小面での、SADテーブルのサイズを示す。なお、図32の例は、図30に示した具体例に対応したものである。
縮小する前の144×64のサーチ範囲(図30(B)参照)の場合におけるSADテーブルTBLは、図32(A)に示すように、145×65点である。
これに対して、36×16の縮小面サーチ範囲(図30(D)参照)の場合における縮小面SADテーブルは、図32(B)に示すように、37点×17点となる。
また、4×4の基底面サーチ範囲(図30(F)参照)の場合における基底面SADテーブルは5点×5点となる。
したがって、階層マッチングを施さない場合のマッチング処理回数は145×65=9425回であるのに対し、階層マッチングを適用した場合のマッチング回数は37×17+5×5=654回となり、処理時間を大幅に短縮できることが分かる。
そして、前述した動きベクトル検出方法の第1の例の場合におけるラインメモリは、縮小面SADテーブルの1ライン分でよいので、37個のSAD値およびその位置情報を格納できるものでよく、SADテーブルTBLの場合の、9425個のSAD値およびその位置情報を格納するメモリに対して非常に小さいメモリでよくなる。
また、前述した動きベクトル算出部164の構成例の第2の例の場合には、37個のSAD値およびその位置情報を格納する縮小面SADテーブルさえも不要となるので、さらに回路規模を小さくすることができる。
以上のようにして、上記の実施の形態によれば、階層化したマッチング処理を行った後、基底面において補間処理をすることにより、広いサーチ範囲で、サブピクセル精度の動きベクトル検出を行うことが可能になる。
なお、図33に、この実施形態の階層化ブロックマッチング方式における、縮小面および基底面におけるターゲットブロックサイズおよびマッチング処理範囲の例を示す。この図33の例は、縮小面ターゲットブロック133のサイズを、図33(A)に示すように、横×縦=8×8画素で固定値としている。このため、縮小面マッチング処理範囲143は、図33(B)に示すように、横×縦=44×24画素分となる。
そして、基底面ターゲットブロック131のサイズ、基底面マッチング処理範囲144のサイズおよび基底面参照ベクトル数は、図33(C)に示すようなものとなる。この図33(C)は、基底面に対する縮小面の縮小倍率が1/2、1/4、1/8の場合の例のそれぞれにおける基底面ターゲットブロック131のサイズ、基底面マッチング処理範囲144のサイズおよび基底面参照ベクトル数を示している。
[静止画NR処理時におけるメモリ容量削減および効率的なメモリアクセス]
上述したように、この実施形態では、静止画NR処理、および動画NR処理に対応している。動画NR処理では、精度よりもリアルタイム性、すなわちスピードが要求されるのに対して、静止画NR処理は多少処理時間がかかっても、ノイズの取れた綺麗な画像が求められる。
前述したように、画像の重ね合わせ方法をシステムアーキテクトの観点から大きく分類すると、静止画撮影時の高速連写中に、リアルタイムに画像の重ね合わせを行う手法である撮影中加算法と、前記高速連写後に、すべての参照画像が揃ってから画像の重ね合わせを行う手法である撮影後加算法の、2種類がある。十分な処理時間をかけてNR処理を行うには、撮影中加算法ではなく、撮影後加算法の方が望ましく、この実施形態では、撮影後加算法を採っている。
しかしながら、撮影後加算法は、参照画像を画像メモリに保持しておかなくてはならず、重ね合わせ枚数が増えるほど、画像メモリとして大容量が必要になるという問題がある。
この実施形態では、この問題点にかんがみ、静止画NR処理時に、撮影後加算法を用いるに当たって、画像メモリ部4の容量をできるだけ削減すると共に、効率的にメモリアクセスを行うことができるように工夫している。以下、この点について説明する。
<メモリアクセス時のデータフォーマット>
先ず、この実施形態における画像メモリ部4に対するメモリアクセス時のデータフォーマットについて説明する。
図13および図16のブロック図に示したように、動き検出・動き補償部16および画像重ね合わせ部17とは、それぞれバス・インターフェース部21,22,23,24を介してシステムバス2に接続されている。
この実施形態におけるシステムバス2は、バス幅は、例えば64ビットであり、バースト長(所定の複数画素データ単位でバースト転送を連続して行える回数)は、例えば最大16バーストとされている。
動き検出・動き補償部16のターゲットブロックバッファ部161および参照ブロックバッファ部162からの読み込み要求に応じて、バス・インターフェース部21,22にて、画像メモリ部4の所定のメモリに対して、スタートアドレス、バースト長、その他のバスプロトコルを生成して、システムバス2(AXIインターコネクト)にアクセスしている。
この実施形態の撮像装置で使用している画像データは、1画素が、輝度YとクロマC(Cr,Cb)とからなる。そして、Y:Cr:Cb=4:2:2のフォーマットであり、輝度Y、クロマC(Cr,Cb)は、共に符号なしの8ビット(Cr=4ビット、Cb=4ビット)であって、4ビットのメモリアクセス幅に、YC4画素分が並んでいるものである。システムバス2のデータ処理単位は、64ビットであり、1画素分のYC画素データが16ビットであるので、4画素分になる。
図1に示したようなグローバルなシステムバス2に、撮像装置の各処理部がつながっている場合、バス帯域と、各処理部で共有している画像メモリ部のメモリコントローラの処理単位とは、密接な関係がある。
ところで、上述したように、この実施形態では、メモリコントローラ(図示は省略)が処理できる最大バースト長は16バーストである。例えば、同じデータサイズの画像データを、画像メモリ部4のメモリに書き込む場合でも、16バーストの転送をたくさん使える方が、バスのアービトレーション回数も減り、メモリコントローラの処理の効率が良く、バス帯域を削減できる。
したがって、この実施形態では、YC画素データの4画素分のデータ(64ビット)を16バーストでバスアクセスすると、効率が良い。これを画素数に換算すると、4×16=64画素分のデータになる。
そこで、この実施形態では、図34に示すように、1画面分の画像の水平方向を、1バースト転送(64画素)単位で分割して、1画面分の画像を、縦長の分割ブロックの画像単位(以下、短冊と称する)の複数個からなるものとする。そして、画像データを、この短冊単位で、画像メモリ部4に書き込み、また、画像メモリ部4から読み出しするメモリアクセス方式(以下、短冊アクセス方式と称する)を採る。
なお、水平方向の画像データが64画素で割り切れない場合は、図34で、影線を付して示すように、水平方向の右端にダミー領域を設けて、このダミー領域151に、例えば黒や白の画素データをダミーデータとして付加し、水平方向の画素数が、64の倍数になるようにしている。
従来のラスタースキャン方式は、画像メモリへのアクセスに対して、水平方向にアドレスが連続しているため、1ラインずつデータを読むのに適しているのに対して、短冊アクセス方式は、1バースト転送(64画素)単位で垂直方向にアドレスがインクリメントするため、水平方向が64画素以内であるブロック状のデータを読むのに適している。
例えば、64画素×64ラインの短冊形式のブロックを読み込む際には、画像メモリ部4のメモリコントローラ(図示せず)は、YC画素データの4画素分のデータ(64ビット)を16バーストでバスアクセスすると、当該16バーストで、4×16=64画素分のデータになるので、水平方向の64画素からなる1ライン目のアドレスの設定以降は、垂直方向にアドレスをインクリメントしていくだけで、残り63ライン分の画素データのアドレス設定をすることが可能である。
この実施形態の画像メモリ部4には、このような短冊アクセス方式を実行するためのアドレス生成部(図示は省略)を備えるメモリコントローラ(図示は省略)が設けられている。
この実施形態では、動き検出・動き補償部16が、上記の短冊アクセス方式で画像メモリ部4にアクセスできるように、その前段にある、画像補正・解像度変換部15においても、短冊アクセス方式のアクセスに対応している。また、この実施形態では、静止画撮影時の静止画NR処理においては、高速連写撮影して得た複数枚の撮像画像を、圧縮して画像メモリ部4に記憶しておき、必要に応じて伸長デコードして読み出して、動き検出・動き補償部16でのブロックマッチング処理ができるようにするため、静止画コーデック部19においても、短冊アクセス方式に対応している。
図35(A)は、1画面分の画像が、横×縦=640×480画素からなる例における短冊単位の分割例である。この例においては、1画面分の画像が、水平方向の64画素単位で分割される結果、10個の短冊T0〜T9に分けられている。
前述した図33に示した縮小倍率1/4の場合では、1つの短冊の中には、図35(B)に示すように、32×32画素の基底面ターゲットブロックが、B0〜B29として示すように、水平方向に2個、垂直方向に15個、合計30個入っている。
画像メモリ部4から基底面ターゲットブロックを読み込むときは、短冊アクセス方式の利点を活かすために、この実施形態では、64画素×1ラインずつアクセスし、バス効率を上げるようにしている。
したがって、図36に示すように、縮小倍率1/2のときは、基底面ターゲットブロックは4個ずつ、縮小倍率1/4のときは、基底面ターゲットブロックは2個ずつ、縮小倍率1/8のときは、基底面ターゲットブロックは1個ずつ、バスアクセスしている。
短冊アクセス方式は、バス帯域という面だけでなく、上記の回路の内部処理においても、非常に有益な手法である。第一に、垂直方向のフィルタ処理等を行うための、内部ラインメモリのサイズを削減することができる。また、解像度変換処理のような、ブロック形式で処理を行う回路にとっては、ラスタースキャン形式から任意のブロックに変換するよりも、短冊形式から任意のブロック形式に変換した方が、効率が良いという利点がある。
<静止画NR処理および動画NR処理におけるブロックマッチング処理の高速化およびバス帯域の削減>
上述したように、この実施形態では、静止画NR処理および動画NR処理に対応している。静止画NR処理は、多少処理時間がかかっても、ノイズの取れた綺麗な画像を求められるのに対して、動画NR処理では、精度よりもリアルタイム性、すなわちスピードが要求される。精度を求めるあまり、1フレーム以内にNR処理が終わらずに、処理が破綻してしまうといった事態は避けなくてはならない。
また、図1に示したように、この実施形態の撮像装置は、グローバルなシステムバス2に、各種処理部が接続されていて、様々な処理を並列に行う。このようなシステムでは、処理速度とともに、バス帯域も重要視される。しかし、たとえ、内部回路の処理速度が速くとも、バス帯域がネックになり、1フレーム以内にNR処理が終わらないという状況も考えられる。
この実施形態では、この問題点を考慮して、動画NR処理時においては、動き検出・動き補償部16では、画像補正・解像度変換部15から送られてきた基底面ターゲットブロックに対して、内部回路であるターゲットブロックバッファ部161の縮小化処理部1613で縮小化処理を行うことにより、縮小面ターゲットブロックを生成している。したがって、動画NR処理時に、ターゲットブロックの読み込みによるバスアクセスは発生せず、バス帯域を大きく削減している。
また、動き検出・動き補償部16における、階層化ブロックマッチングの処理および動き補償ブロックの画像重ね合わせ部17への転送処理を後述するように、パイプライン処理化することにより、高速処理を可能にしている。このパイプライン処理化によるメリットは、静止画NR処理における階層化ブロックマッチング処理においても、享受することができるのはもちろんである。
次に、静止画NR処理および動画NR処理でのブロックマッチング処理の高速化、バス帯域削減について説明する。
上述したように、静止画NR処理の場合は、高速で複数枚の画像の撮影を行い、これら複数枚の画像データが画像メモリ部4に格納され、動き検出・動き補償部16は、この画像メモリ部4に格納された画像を使って、ブロックマッチング処理を行う。図37〜図40に、静止画NR処理時であって、撮影中加算の場合における画像データの流れを点線で示す。
すなわち、先ず、図37に示すように、撮像素子11からの撮影画像は、前処理部13でセンサー補正などの前処理をなされた後、RAW信号形式(カメラ信号処理を行う前のデータ形式)で、一旦、画像メモリ部4に格納される。
その後、撮影画像は、画像メモリ部4から短冊形式で読み出されてデータ変換部14でRAW信号からYC画素データ(YC画像フォーマット)に変化され、画像補正・解像度変換部15で画像補正、解像度変換などが行われた後、YC画像フォーマットで画像メモリ部4に書き込まれる。高速連写時は、以上の手順が複数枚分、繰り返して行われて、画像メモリ部4には、当該複数枚の撮像画像データがYC画像フォーマットで格納保持される。
画像メモリ部4に書き込まれたYC画像フォーマットの画像データは、動き検出・動き補償部16を通じて画像重ね合わせ部17に供給され、図16に示した画像重ね合わせ部17の縮小面生成部174で縮小化される。
その後、図38に示すように、撮像素子11からの3枚目の画像の取り込み処理と並行して、1枚目の画像をターゲット画像とし、2枚目の画像の参照画像として、動き検出・動き補償部16で階層化ブロックマッチングによる動きベクトル検出および動き補償ブロックの生成が行なわれる。そして、画像重ね合わせ部17で、生成された動き補償ブロックが用いられて画像重ね合わせ処理が行なわれる。
次に、1枚目と2枚目の撮像画像の重ね合わせが終わったら、図39に示すように、重ね合わせされた画像(NR画像)を次のターゲット画像とし、3枚目の画像を参照画像として、次の動きベクトル検出および画像重ね合わせが行なわれる。以上の処理が、連続撮影される複数の撮像画像が終わるまで、繰り返されて1枚の静止画NR画像が得られる。得られた静止画NR画像の画像データは、図40に示すように、静止画コーデック部18において、この例では、JPEG形式で圧縮されて、記録再生装置部5の記録媒体に保存される。
次に、動画NR処理時における画像データの流れを、図41および図42を参照しながら説明する。
動画NR処理の場合は、画像補正・解像度変換部15から動き検出・動き補償部16へ、リアルタイムにターゲットブロックが送られてくる。動き検出・動き補償部16は、図41に示すように、画像補正・解像度変換部15から送られてきたターゲットブロックをターゲットブロックバッファ部161に格納すると共に、このターゲットブロックに応じて、ブロックマッチング処理範囲を画像メモリ部4から読み出して、参照ブロックバッファ部162に格納する。
そして、動き検出・動き補償部16は、ターゲットブロックバッファ部161からのターゲットブロックと、当該ブロックマッチング処理範囲から参照ブロックとを読み出して、前述した階層化ブロックマッチング処理をして、動きベクトル検出および動き補償ブロックの生成を行い、動き補償ブロックおよびターゲットブロックは、画像重ね合わせ部17に供給する。
画像重ね合わせ部17は、受け取ったターゲットブロックと動き補償ブロックとを重ね合わせてゆく。そして、画像重ね合わせ部17は、図41に示すように、画像重ね合わせをしたNR済みの画像を画像メモリ部4に貼る。
図42に示すように、画像メモリ部4に貼られたNR画像は、次のフレーム(1フレーム前のNR画像となっている)で、動画コーデック部19に読み込まれ、圧縮された後、記録再生装置部5の記録媒体に保存される。また、画像メモリ部4に貼られたNR画像(1フレーム前のNR画像)は、同時に、NTSCエンコーダ20からも読み込まれ、モニターディスプレイ6に対するモニター出力も行われる。
動画NR処理時においては、以上の処理が、撮影画像毎に繰り返される。
なお、ここでは、参照画像は1フレーム分としたが、図42に示すように、参照画像を複数フレーム保持しておき、より相関性の高い画像を使用しても良い。
また、動画NR処理では、リアルタイム性が重視されるため、静止画NR処理のように、縮小面ターゲット画像を作って画像メモリ部4に格納することはせずに、図14に示したターゲットブロックバッファ部161内の縮小化処理部1613で、縮小面ターゲットブロックを生成して、そのまま縮小面バッファ1612に格納している。
<階層化ブロックマッチング処理のパイプライン化処理の説明>
以上のように、動き検出・動き補償部16では、動き検出・動き補償処理において、常に、画像メモリ部4から、ターゲット画像および/または参照画像を読み出しながら、マッチング処理を行っている。
この実施形態の階層化ブロックマッチング処理を、手順通りに、順次に実行した場合には、図43に示すようなタイミングチャートに示すシーケンスとなる。なお、図43は、静止画NR処理時におけるシーケンス例である。
この実施形態の階層化ブロックマッチング処理においては、始めに、縮小面におけるブロックマッチングを行うために、ターゲットブロックバッファ部161が、画像メモリ部4から縮小面ターゲットブロックを、また、参照ブロックバッファ部162が画像メモリ部4から縮小面におけるマッチング処理範囲(縮小面マッチング処理範囲)を、それぞれ読み出す。この両方のアクセス(読み出しアクセス)が終了して、縮小面におけるブロックマッチング処理(縮小面マッチング処理)が開始される。
次に、この縮小面マッチング処理の結果、縮小面動きベクトルが求まり、この求められた縮小面動きベクトルによって、基底面におけるマッチング処理範囲(基底面マッチング処理範囲)が決まる。したがって、参照ブロックバッファ部162による画像メモリ部4からの基底面マッチング処理範囲の読み出しは、縮小面マッチング処理が終わった後に、開始される。
次に、図43に示すように、基底面でのターゲットブロックの読み込み、および基底面マッチング処理範囲の読み込みが終わると、基底面におけるブロックマッチング処理(基底面マッチング処理)が開始される。また、この基底面マッチング処理の結果、基底面動きベクトルが求まり、この基底面動きベクトルによって、動き補償ブロックが決まる。したがって、動き検出・動き補償部16から画像重ね合わせ部17への動き補償ブロックの転送は、基底面マッチング処理が終わった後になされる。
以上説明したように、ターゲットブロックバッファ部161が画像メモリ部4から縮小面ターゲットブロックを、また、参照ブロックバッファ部162が画像メモリ部4から縮小面マッチング処理範囲を、それぞれ読み出すまでは、縮小面マッチング処理は開始することができない。
また、縮小面動きベクトルが求まるまでは、基底面マッチング処理範囲は決定されないので、参照ブロックバッファ部162による画像メモリ部4からの基底面マッチング処理範囲の読み出しは、縮小面マッチング処理が終わるまではできない。
さらに、動き補償ブロックは、基底面動きベクトルが検出された後に生成されるので、動き検出・動き補償部16から画像重ね合わせ部17への動き補償ブロックの転送は、基底面マッチング処理が終わるまではできない。
上記のことから、通常の処理シーケンスにおいては、図43に示した、縮小面ターゲットブロックの読み出しから、動き補償ブロックの画像重ね合わせ部17への転送までの時間が、1ターゲットブロック分についての階層化ブロックマッチングにおける処理時間(以下、マッチング処理時間という)となる。
しかしながら、図43の処理シーケンス例では、1マッチング処理時間中に、画像メモリ部4にメモリアクセスができない、画像重ね合わせ部17へ転送している間に、画像メモリ部4にメモリアクセスができない、といった問題があり、1ターゲットブロック分についての1マッチング処理時間内に、システムバス2に対して、バスアクセスしていない期間が多く、バス2の使用効率が悪く、処理速度の高速化に改善の余地がある。
そこで、これを改善したこの実施形態におけるブロックマッチング処理手法を、以下に説明する。
先ず、図43の例と対比する例として、静止画NR処理時におけるこの実施形態におけるブロックマッチング処理手法を、図44および図45〜図47を参照しながら説明する。
この実施形態におけるブロックマッチング処理手法においては、図44に示すように、「縮小面マッチング処理が終わるまで、基底面マッチング処理範囲の読み出せない」問題と、「基底面マッチング処理が終わるまで、動き補償ブロックを転送できない」問題を回避するために、ターゲットブロックバッファ部161の基底面バッファ部1611におけるターゲットブロックを保持する4バンクのバッファBKTO−A〜BKTO−Dのうちの少なくとも3バンクを使用すると共に、縮小面マッチング処理、基底面マッチング処理、動き補償ブロック転送、の3つの処理を時間方向に分割し、3個のマッチング処理時間(3ターゲットブロック分のマッチング処理時間)にわたってパイプライン化を行っている。
この図44に示す処理手法では、基底面バッファ部1611の4個のバンクバッファBKTO−A〜BKTO−Dのうちの、3個のバンクバッファBKTO−A〜BKTO−Cを用いるものとして説明する。
この例においては、静止画NR処理におけるブロックマッチング処理のパイプライン化においては、3個のマッチング処理時間MA,MB,MCを設定する。これら3個のマッチング処理時間MA,MB,MCのそれぞれは、1ターゲットブロックについて全てのマッチング処理内容を含み、3個のマッチング処理時間MA,MB,MCは、3ターゲットブロック分のマッチング処理時間である。
すなわち、これらマッチング処理時間MA,MB,MCのそれぞれ内における処理内容には、画像メモリ部4からの縮小面ターゲットブロックおよび基底面ターゲットブロックの読み込み処理、画像メモリ部からの縮小面マッチング処理範囲および基底面マッチング処理範囲の読み込み処理、縮小面マッチング処理、基底面マッチング処理、基底面ターゲットブロックおよび動き補償ブロックの画像重ね合わせ部17への転送出力処理の全てを含み、信号処理内容としては、3個のマッチング処理時間MA,MB,MCは全く同じものを備えている。
しかし、この例では、3個のマッチング処理時間MA,MB,MCのそれぞれ内における画像メモリ部4からの縮小面ターゲットブロックおよび基底面ターゲットブロックの読み込み処理、画像メモリ部からの縮小面マッチング処理範囲および基底面マッチング処理範囲の読み込み処理、縮小面マッチング処理、基底面マッチング処理、基底面ターゲットブロックおよび動き補償ブロックの画像重ね合わせ部17への転送出力処理が、何番目のターゲットブロックについてのものであるかを、次のように制御する。
すなわち、この例においては、1つのターゲットブロックについての縮小面マッチング処理、基底面マッチング処理、動き補償ブロック転送処理、の3つの処理を、この3個のマッチング処理時間MA,MB,MCに分散させて、順次に実行するようにする。そして、この3個のマッチング処理時間MA,MB,MCを、ひとつの単位として繰り返し実行するようにする。
すなわち、例えば、ある一つのターゲットブロックTGBについての縮小面マッチング処理は、マッチング処理時間MAで行い、そのターゲットブロックTGBについての基底面マッチング処理は、次のマッチング処理時間MBで行い、そのターゲットブロックTGBについての動き補償ブロックの出力転送は、さらにその次のマッチング処理時間MCで行う。
そして、この例においては、あるターゲットブロックについての縮小面マッチング処理を行っている間に、並行してひとつ前のターゲットブロックの基底面マッチング処理範囲の読み出しを行なう。また、あるターゲットブロックについての縮小面マッチング処理範囲の画像メモリ部4からの読み出しを行っている間に、ひとつ前のマッチング処理時間における基底面マッチング処理で求められた最終的な動きベクトルに基づいて生成された、2つ前のターゲットブロックについて動き補償ブロックの出力転送処理を行う。これにより、階層化ブロックマッチング処理のパイプライン処理化を実現している。
例えばi番目のターゲットブロックTGAiについての階層化ブロックマッチング処理のシーケンスを中心にして、この例の処理手法について説明すると、次のようなものとなる。
先ず、マッチング処理時間MAでは、ターゲットブロックバッファ部161により、画像メモリ部4から、i番目(iは自然数)のターゲットブロックTGAiについての縮小面ターゲットブロックが、縮小面バッファ部1612の2個のバンクバッファBKTC−A,BKTC−Bの一方、例えばBKTC−Aに書き込まれる。その後、ターゲットブロックバッファ部161により、図45に示すように、基底面ターゲットブロックが、基底面バッファ部1611の3個のバンクバッファBKTO−A、BKTO−B、BKTO−Cのうちの、この例ではバンクバッファBKTO−Aに書き込まれる。
このとき、i番目のターゲットブロックTGAiについての縮小面ターゲットブロックのバンクバッファBKTC−Aおよび基底面ターゲットブロックのバンクバッファBKTO−Aへの書き込みと並行して、i番目のターゲットブロックTGAiについての縮小面マッチング処理範囲が、参照ブロックバッファ部162により、画像メモリ部4から、バンクバッファBKRC−Aに読み込まれる。
さらに、このとき、i番目のターゲットブロックTGAiについての縮小面マッチング処理範囲のバンクバッファBKRC−Aへの書き込みと並行して、当該マッチング処理時間MAより一つ前のマッチング処理時間MCで実行された、2つ前のターゲットブロックTGB(i−2)についての基底面マッチング処理の処理結果の動きベクトルから当該2つ前のターゲットブロックTGB(i−2)についての動き補償ブロックが、図45の下側に示すように、参照ブロックバッファ部162の基底面バッファ部1621の一方、例えばバンクメモリBKRO−Aから読み出されて、画像重ね合わせ部17に転送出力される。
また、これと共に、当該2つ前のターゲットブロックTGB(i−2)が、画像重ね合わせ部17に転送出力される。このとき、図45の上側に示すように、2つ前のターゲットブロックTGB(i−2)は、ターゲットブロックバッファ部161の基底面バッファ部1611のバンクバッファBKTO−Bに格納されているので、当該バンクバッファBKTO−Bから画像重ね合わせ部17に転送出力される。
そして、マッチング処理時間MAでは、前述のようにして、ターゲットブロックバッファ162の縮小面バッファ部1612に書き込まれた縮小面ターゲットブロックと、当該マッチング処理時間MAより一つ前のマッチング処理時間MCで動き補償ブロックの出力転送と並行して行われて画像メモリ部4から参照ブロックバッファ部162の縮小面バッファ部1622に取り込まれているi番目のターゲットブロックTGAiについての縮小面マッチング処理範囲から読み出される縮小面参照ブロックとの間で、縮小面マッチング処理が行われる。
マッチング処理時間MAでは、この縮小面マッチング処理と並行して、画像メモリ部4から、一つ前のターゲットブロックTGB(i−1)の基底面マッチング処理範囲の読み出しが行なわれる。そして、当該一つ前のターゲットブロックTGB(i−1)の基底面マッチング処理も、このマッチング処理時間MAにおいて行われる。このとき、上述したように、図45の下側に示すように、参照ブロックバッファ部162の基底面バッファ部1611のバンクバッファBKRO−Aからは、動き補償ブロックが読み出されて使用されているので、基底面マッチング処理範囲は、基底面バッファ部1611の空いているバンクバッファBKRO−Bに書き込まれることになる。
マッチング処理時間MAで行われたi番目のターゲットブロックTGBiについての縮小面マッチング処理の処理結果である縮小面動きベクトルは、次のマッチング処理時間MBにおいて、前述したように、当該i番目のターゲットブロックTGBiについての基底面マッチング処理におけるサーチ範囲を決定するために用いられ、決定されたサーチ範囲に基づいて、画像メモリ部4から当該i番目のターゲットブロックTGBiについての基底面マッチング処理範囲の読み出しがなされ、参照ブロックバッファ部162の基底面バッファ部1621に格納される。
そして、このマッチング処理時間MBでは、一つ前のマッチング処理時間でターゲットブロックバッファ部161に読み込まれた、i番目のターゲットブロックTGBiについての基底面ターゲットブロックと、前記のようにして参照ブロックバッファ部1622に格納された基底面マッチング処理範囲から読み出される基底面参照ブロックとについて、基底面マッチング処理が行われる。
このマッチング処理時間MBにおける基底面ターゲットブロックバッファ部161の3個のバンクバッファBKTO−A〜BKTO−Cのそれぞれと、また、基底面参照ブロックバッファ部162の2個のバンクバッファのそれぞれと、画像メモリ部4、画像重ね合わせ部17およびマッチング処理部163との間の関係を、図46に示す。この図46は、マッチング処理時間MAにおける図45に対応するものである。
そして、マッチング処理時間MBにおける基底面マッチング処理で求められた最終的な動きベクトルは、次のマッチング処理時間MCにおいて、参照ブロックバッファ部162の基底面バッファ部1611からの動き補償ブロックの読み出しを行う際に使用されて、当該動き補償ブロックの画像重ね合わせ部17への転送出力が実行される。
このマッチング処理時間MCにおける基底面ターゲットブロックバッファ部161の3個のバンクバッファBKTO−A〜BKTO−Cのそれぞれと、また、基底面参照ブロックバッファ部162の2個のバンクバッファのそれぞれと、画像メモリ部4、画像重ね合わせ部17およびマッチング処理部163との間の関係を、図47に示す。この図47は、マッチング処理時間MAにおける図45およびマッチング処理時間MBにおける図46に対応するものである。
なお、図45〜図47において、点線で囲んで示す矢印部分は、動き検出・動き補償部16のコントロール部165によるターゲットブロックバッファ部161および参照ブロックバッファ部162に対するバッファ入力制御およびバッファ出力制御を示している。
以上のようにして、この実施形態によれば、階層化ブロックマッチング処理をパイプライン化することができる。この場合、階層化ブロックマッチング処理のための、縮小面ターゲットブロックおよび基底面ターゲットブロックの読み込み処理、画像メモリ部からの縮小面マッチング処理範囲および基底面マッチング処理範囲の読み込み処理、縮小面マッチング処理、基底面マッチング処理、基底面ターゲットブロックおよび動き補償ブロックの画像重ね合わせ部17への転送出力処理は、上述したように、並列処理として実行することができるので、1マッチング処理時間は、図43の例の場合よりも短縮化されたものとなり、処理の高速化ができる。また、パイプライン化処理としたので、画像メモリ部4に対するメモリアクセスの効率化を図ることができる。
上述の説明は、静止画NR処理の場合における階層化ブロックマッチング処理についてであるが、動画NR処理においては、1ターゲットブロック分のマッチング処理時間に、前段の画像補正・解像度変換部15から、リアルタイムで1ターゲットブロック分の画像データが転送されてくる。そして、動画NR処理時には、前述したように、リアルタイム性の確保のために、ターゲットブロックバッファ部161内の縮小化処理部1613で縮小面ターゲットブロックを生成する必要がある。
このため、動画NR処理においては、前段の画像補正・解像度変換部15からリアルタイムで送られてくる1ターゲットブロック分の画像データを取り込んでからでないと、縮小面ターゲットブロックを生成することができず、この縮小面ターゲットブロックの生成の前処理(1ターゲットブロック分の画像データを取り込み)に、1マッチング処理時間を要することになる。
このため、動画NR処理におけるブロックマッチング処理のパイプライン化に当たっては、図48および図49に示すように、4個のマッチング処理時間MA,MB,MC,MDを設定する。そして、ターゲットブロックバッファ部161の基底面バッファ部1611としては、4個のバンクバッファBKTO−A〜BKTO−Dの全てを用いるものである。なお、図48および図49は、紙面の大きさの関係上、4個のマッチング処理時間MA,MB,MC,MDを、1枚の紙面に図示できなかったので、2図に分けて示したものである。図48および図49で、マッチング処理時間MBおよびMCは、重複して記載してある。
これら4個のマッチング処理時間MA,MB,MC,MDのそれぞれ内における処理内容には、前述の静止画NR処理におけるブロックマッチング処理における画像メモリ部4からの縮小面ターゲットブロックおよび基底面ターゲットブロックの読み込み処理の代わりに、画像補正・解像度変換部15からのターゲットブロックの読み込みおよび縮小面ターゲットブロックの生成処理が行われる他は、前述の静止画NR処理におけるブロックマッチング処理における場合と同様で、画像メモリ部からの縮小面マッチング処理範囲および基底面マッチング処理範囲の読み込み処理、縮小面マッチング処理、基底面マッチング処理、基底面ターゲットブロックおよび動き補償ブロックの画像重ね合わせ部17への転送出力処理の全てを含み、信号処理内容としては、4個のマッチング処理時間MA,MB,MC,MDは全く同じものを備えている。
そして、この動画NR処理における階層化ブロックマッチング処理の場合の例では、図48および図49に示すように、1つのターゲットブロックについての、縮小面ターゲットブロック生成処理のための前処理(ターゲットブロックの取り込み処理)、縮小マッチング処理、基底面マッチング処理、動き補償ブロック転送処理、の4つの処理を、この4個のマッチング処理時間MA,MB,MC,MDに分散させて、順次に実行するようにする。そして、この4個のマッチング処理時間MA,MB,MC,MDを、ひとつの単位として繰り返し実行するようにする。
すなわち、例えば、ある一つのターゲットブロックTGBについての取り込み処理は、マッチング処理時間MAで行い、そのターゲットブロックTGBについての縮小面ターゲットブロックの生成処理および縮小面マッチング処理は、マッチング処理時間MBで行い、そのターゲットブロックTGBについての基底面マッチング処理は、次のマッチング処理時間MCで行い、そのターゲットブロックTGBについての動き補償ブロックの出力転送は、さらにその次のマッチング処理時間MDで行う。
上述したように、この動画NR処理時における階層化ブロックマッチング処理のパイプライン化に当たっては、ターゲットブロックTGBについての取り込み処理のために1マッチング処理時間を要するために、4個のマッチング処理時間を必要とするが、当該ターゲットブロックTGBについての取り込み処理のための1マッチング処理時間MA以外の他の3個のマッチング処理時間MB〜MDにおける処理シーケンス内容は、図48および図49に示すように、前述した静止画NR処理時の3個のマッチング処理時間MA〜MCと同様となるものであるので、ここでは、詳細な説明は省略する。
つまり、縮小面マッチング処理を行っている間に、並行してひとつ前のブロックの基底面マッチング処理範囲読み出しが行われている。また、縮小面マッチング処理範囲の読み出しがなされるのと並行して、ひとつ前のマッチング処理時間における基底面マッチング処理で求められた最終的な動きベクトルに基づいて生成された、2つ前のターゲットブロックについて動き補償ブロックの出力転送処理が行なわれる。これにより、動画NR処理時における階層化ブロックマッチング処理のパイプライン処理化を実現している。
ただし、前述もしたように、この動画NR処理時においては、縮小面ターゲットブロックは、画像メモリ部4から読み出すのではなく、ターゲットブロックバッファ部161で生成するものである。
この動画NR処理時における階層化ブロックマッチング処理のパイプライン化における処理シーケンスの理解を容易にするために、図50〜図53に、マッチング処理時間MA,MB,MC,MDのそれぞれにおける基底面ターゲットブロックバッファ部161の4個のバンクバッファBKTO−A〜BKTO−Dのそれぞれと、また、基底面参照ブロックバッファ部162の2個のバンクバッファBKRO−A,BKRO−Bのそれぞれと、画像メモリ部4、画像重ね合わせ部17およびマッチング処理部163との間の関係を示した。
なお、図45〜図47と同様に、図50〜図53において、点線で囲んで示す矢印部分は、動き検出・動き補償部16のコントロール部165によるターゲットブロックバッファ部161および参照ブロックバッファ部162に対するバッファ入力制御およびバッファ出力制御を示している。
次に、このパイプライン化処理における制御処理を実現するための動き検出・動き補償部16のコントロール部165の機能ブロック図を、図54に示す。
座標コントローラ1651は、ターゲット画面を分割した全てのターゲットブロックを、順番にブロックマッチング処理を行うようにするもので、ターゲット画面上におけるターゲットブロックの座標を管理している。そして、座標コントローラ1651は、各ターゲットブロックの座標情報、サーチ範囲の情報、ベクトル精度の情報、および処理スタート指示を、複数ブロックのパイプライン管理部1652のそれぞれに渡す。
複数ブロックのパイプライン管理部1652は、座標コントローラ1651からの座標情報、サーチ範囲、ベクトル精度を基に、前述した4個のマッチング処理時間MA,MB,MC,MDのそれぞれにおけるマッチング処理を制御するためのマッチング処理コントローラ1653A,1653B,1653C,1653Dを制御して、前述したパイプライン処理を制御管理する。マッチング処理コントローラ1653Aは、マッチング処理時間MAにおける処理を、マッチング処理コントローラ1653Bは、マッチング処理時間MBにおける処理を、マッチング処理コントローラ1653Cは、マッチング処理時間MCにおける処理を、マッチング処理コントローラ1653Dは、マッチング処理時間MDにおける処理を、それぞれ制御するためのものである。
この複数ブロックのパイプライン管理部1652は、座標コントローラ1651からの座標情報、サーチ範囲、ベクトル精度を基に、各マッチング処理時間MA,MB,MC,MDのそれぞれに対して、それぞれのマッチング処理時間で処理すべきターゲットブロックの座標情報、サーチ範囲、ベクトル精度の情報を渡すと共に、その開始指示を渡す。
マッチング処理コントローラ1653A,1653B,1653C,1653Dのそれぞれは、それぞれのマッチング処理時間MA,MB,MC,MDにおけるマッチング処理部163の制御と、ターゲットブロックバッファ部161および参照ブロックバッファ部162におけるバッファ入力制御および出力バッファ制御を行う。
バッファ入力制御機能部1654A、1654B,1654C,1654Dは、それぞれマッチング処理時間MA,MB,MC,MDにおけるターゲットブロックバッファ部161および参照ブロックバッファ部162におけるバッファ入力制御を、マッチング処理コントローラ1653A,1653B,1653C,1653Dのそれぞれの制御指示を受けて実行する。
また、バッファ出力制御機能部1655A、1655B,1655C,1655Dは、それぞれマッチング処理時間MA,MB,MC,MDにおけるターゲットブロックバッファ部161および参照ブロックバッファ部162におけるバッファ出力制御を、マッチング処理コントローラ1653A,1653B,1653C,1653Dのそれぞれの制御指示を受けて実行する。
そして、マッチング処理コントローラ1653A,1653B,1653C,1653Dのそれぞれは、それぞれマッチング処理時間MA,MB,MC,MDにおける処理を終了すると、終了通知を複数ブロックのパイプライン管理部1652に送る。
複数ブロックのパイプライン管理部1652は、1周期分の4個のマッチング処理時間MA,MB,MC,MDにおける処理を終了すると、その終了通知を座標コントローラ1651に送る。座標コントローラ1651は、この終了通知を受けると、次の1周期分の4個のマッチング処理時間MA,MB,MC,MDについての座標情報、サーチ範囲、ベクトル精度などの情報を複数ブロックのパイプライン管理部1652に送る。
以上のようにして、4個のマッチング処理時間MA,MB,MC,MDを1周期分としたパイプライン処理を、繰り返す。
なお、上述したように、4個のマッチング処理コントローラ1653A〜1653Dを使用するのは、動画NR処理における階層化ブロックマッチング処理時であり、撮影後加算を採用した静止画NR処理においては、4個のマッチング処理コントローラ1653A〜1653Dのうちの3個を使用して、処理制御をおこなうようにするものである。
なお、静止画NR処理であっても、撮影中加算方式を採用する場合には、上述した動画NR処理と同様に行うので、4個のマッチング処理時間MA,MB,MC,MDを1周期分としたパイプライン処理を繰り返し、行うものとなる。
以上説明したようにして、この実施形態においては、1マッチング処理時間の間、常にバスアクセスが発生していて、バス効率が高く、さらに、パイプライン処理を行っているので、1ターゲットブロック分についての処理速度も向上している。
[その他の実施の形態および変形例]
上述の実施形態においては、静止画コーデック部18における圧縮符号化方式としては、JPEG方式を用い、動画コーデック部19における圧縮符号化方式としては、MPEG方式を用いるようにしたが、これは一例であって、どのような画像圧縮符号化方式であっても適用可能であることは言うまでもない。
また、上述の実施形態では、静止画NR処理において、3枚以上の撮像画像を重ね合わせる場合に、この発明を適用するようにしたが、この発明は、2枚の撮像画像を重ね合わせる場合にも適用可能である。
また、画像を、水平方向の複数画素毎に分割して、短冊単位のデータとしてメモリアクセスするようにしたが、これは、画像メモリからの画像データの読み出し、書き込み方向が、水平ライン方向を基準にしたからである。画像メモリからの画像データの読み出し、書き込み方向が垂直方向である場合には、画像を垂直方向の複数ライン単位で分割した帯状単位のデータとしてデータアクセスするようにすれば、上述と同様の作用効果が得られることは言うまでもない。また、さらに、画像を水平方向と垂直方向との両方向に分割しても良いことはいうまでもない。
また、上述の実施の形態において、動きベクトル算出部の第1の例においては、サーチ範囲におけるサーチ方向を水平ライン方向に取り、例えばサーチ範囲の左上から順に参照ブロックを移動させるようにしてサーチを行うようにすると共に、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…コントロール部