(57)【要約】【課題】従来のセンサレス手ぶれ補正方式の問題点を解決し、かつ、画像の平行移動のみでなく、回転を考慮して高画質の画像を得る。【解決手段】画面単位で順次に入力される画像について、注目画面と、当該注目画面よりも前の基準画面との間の平行移動量を算出すると共に、基準画面に対する注目画面の回転角度を算出する算出手段１５を設ける。第１のメモリに格納されている注目画面を、算出手段１５で算出された平行移動量だけ移動すると共に、算出手段１５で算出された回転角度だけ回転させるように、第１のメモリに対する読み出しアドレスを制御することにより、第１のメモリから読み出し、読み出した画面を、基準画面または基準画面と他の画面とを重ね合わせて加算した加算処理後画面と重ね合わせて加算する回転・平行移動加算手段１９を設ける。【選択図】図１
2008005084.tif 000002
【特許請求の範囲】
【請求項１】
画面単位で順次に入力される画像について、注目画面と、当該注目画面よりも前の基準画面との間の平行移動量を算出すると共に、前記基準画面に対する前記注目画面の回転角度を算出する算出手段と、
前記注目画面を、前記算出手段で算出された平行移動量だけ平行移動すると共に、前記算出手段で算出された回転角度だけ回転させ、前記基準画面または前記基準画面と他の画面とを重ね合わせて加算した加算処理後画面と重ね合わせて加算する回転・平行移動加算手段と、
を備え、
前記回転・平行移動加算手段は、
第１のメモリに格納されている前記注目画面を、前記算出手段で算出された平行移動量だけ移動すると共に、前記算出手段で算出された回転角度だけ回転させるように、前記第１のメモリに対する読み出しアドレスを制御することにより、前記第１のメモリから読み出す回転・平行移動処理手段と、
第２のメモリの格納されている前記基準画面または前記基準画面と他の画面とを重ね合わせて加算した加算処理後画面を読み出し、前記回転・平行移動処理手段からの前記平行移動および回転処理された前記注目画面と、前記基準画面または前記加算処理後画面とを重ね合わせて加算することにより、複数枚の画面を重ね合わせて加算した新たな加算処理後画面を得る加算手段と、
前記加算手段で重ね合わされた前記新たな加算処理後画面を前記第２のメモリに書き戻すように制御する制御手段と、
を備えることを特徴とする画像処理装置。
【請求項２】
請求項１に記載の画像処理装置において、
前記回転・平行移動処理手段における前記回転角度に応じた回転量の算出に用いる三角関数を要素とする回転行列において、前記回転角度をγとしたとき、ｃｏｓγ＝１、ｓｉｎγ＝γと近似する
ことを特徴とする画像処理装置。
【請求項３】
請求項１に記載の画像処理装置において、
前記算出手段において算出する前記回転角度は、±ａｒｃｔａｎ１／６４の範囲に限定することを特徴とする画像処理装置。
【請求項４】
請求項１に記載の画像処理装置において、
前記第１のメモリからは前記注目画面の画像データをバースト転送すると共に、前記回転角度に応じて前記注目画面の読み出しラインを切り換えるべきアドレス位置を、前記バースト転送の境目となるアドレスに設定する
ことを特徴とする画像処理装置。
【請求項５】
請求項４に記載の画像処理装置において、
前記注目画面の読み出しラインを決定する判定位置を、前記バースト転送の区間の中央の位置とする
ことを特徴とする画像処理装置。
【請求項６】
請求項１に記載の画像処理装置において、
前記算出手段は、
画面単位で順次に入力される画像について、前記注目画面である参照画面と、当該参照画面よりも前の画面である元画面との間の動きベクトルを算出するものであって、前記元画面中において、複数の所定の位置に、それぞれ複数の画素からなる所定の大きさのターゲットブロックを設定し、前記参照画面において、前記ターゲットブロックと同じ大きさの参照ブロックを、前記複数のターゲットブロックの位置に応じて設定された複数のサーチ範囲のそれぞれにおいて複数個設定してブロックマッチングを行い、前記複数のターゲットブロックのそれぞれについてのブロック毎動きベクトルを算出するブロック毎動きベクトル算出手段と、
前記ブロック毎動きベクトル算出手段で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の平行移動量を算出する平行移動量算出手段と、
前記ブロック毎動きベクトル算出手段で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の回転角度を算出する回転角度算出手段と、
を備えることを特徴とする画像処理装置。
【請求項７】
請求項６に記載の画像処理装置において、
前記元画面に対する前記参照画面全体についてのグローバル動きベクトルを算出するグローバル動きベクトル算出手段と、
前記グローバル動きベクトルを用いて、前記ブロック毎動きベクトル算出手段で求められた前記複数のブロック毎動きベクトルのそれぞれを評価する評価手段と、
を備え、
前記評価手段で付与された評価値が高い前記複数のブロック毎動きベクトルの数が予め定められた閾値未満である前記参照画面は、前記回転・平行移動加算手段において重ね合わせ画面から排除する
ことを特徴とする画像処理装置。
【請求項８】
請求項６に記載の画像処理装置において、
前記元画面に対する前記参照画面全体についてのグローバル動きベクトルを生成するグローバル動きベクトル生成手段と、
前記グローバル動きベクトルを用いて、前記ブロック毎動きベクトル算出手段で求められた前記複数のブロック毎動きベクトルのそれぞれを評価する評価手段と、
を備え、
前記平行移動量算出手段および前記回転角度算出手段においては、前記評価手段で付与された評価値が高い複数個の前記ブロック毎動きベクトルのみから前記平行移動量および前記回転角度を算出する
ことを特徴とする画像処理装置。
【請求項９】
請求項７または請求項８に記載の画像処理装置において、
前記ブロック毎動きベクトル算出手段は、
前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出手段と、
前記差分絶対値和算出手段で算出された、前記サーチ範囲内の複数参照ブロック位置についての前記差分絶対値和を記憶する差分絶対値和テーブルを、前記複数個のサーチ範囲のそれぞれに対応して複数生成する差分絶対値和テーブル生成手段と、
前記差分絶対値和テーブルのそれぞれから前記複数のターゲットブロックに対応する複数の前記ブロック毎動きベクトルを算出する手段と、
を備え、
前記グローバル動きベクトル生成手段は、
前記複数の差分絶対値和テーブルのそれぞれの前記差分絶対値和について、前記複数のサーチ範囲のそれぞれで対応する参照ブロック位置のものを合算して合算差分絶対値和を求め、一つのサーチ範囲内の複数参照ブロック位置分の前記合算差分絶対値和を記憶する合算差分絶対値和テーブルを生成する合算差分絶対値和テーブル生成手段と、
前記合算差分絶対値和テーブル生成手段で生成された前記合算差分絶対値和テーブルから、前記グローバル動きベクトルを検出する手段と、
を備えることを特徴とする画像処理装置。
【請求項１０】
請求項６に記載の画像処理装置において、
前記ブロック毎動きベクトル算出手段は、
前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出手段と、
前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得手段と、
前記複数のサーチ範囲のそれぞれのターゲットブロックについて、前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての差分絶対値和を記憶する縮小差分絶対値和テーブルを生成する縮小差分絶対値和テーブル生成手段と、
前記縮小差分絶対値和テーブルのそれぞれから前記ブロック毎動きベクトルを算出する手段と、
を備え、
前記縮小差分絶対値和テーブル生成手段は、
前記参照縮小ベクトル取得手段で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出手段と、
前記差分絶対値和算出手段で算出された前記参照ブロックのそれぞれについての前記差分の絶対値の総和から、前記近傍参照ベクトル検出手段で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分絶対値和のそれぞれを算出する分散差分絶対値和算出手段と、  
前記分散差分絶対値和算出手段で算出した前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和を、それまでの前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和に加算する分散加算手段と、
を備えることを特徴とする画像処理装置。
【請求項１１】
請求項６に記載の画像処理装置において、
前記ブロック毎動きベクトル算出手段は、
前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分を求める差分算出手段と、
前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得手段と、
前記複数のサーチ範囲のそれぞれのターゲットブロックについて、前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての縮小差分絶対値和を記憶する縮小差分絶対値和テーブルを生成する縮小差分絶対値和テーブル生成手段と、
前記縮小差分絶対値和テーブルのそれぞれから前記ブロック毎動きベクトルを算出する手段と、
を備え、
前記縮小差分絶対値和テーブル生成手段は、
前記参照縮小ベクトル取得手段で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出手段と、
前記差分算出手段で算出された前記参照ブロックのそれぞれについての前記差分値から、前記近傍参照ベクトル検出手段で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分値のそれぞれを算出する分散加算値算出手段と、
前記分散加算値算出手段で算出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分値を、それまでの前記近傍の複数の前記参照ベクトルに対応する前記差分絶対値和に加算する加算手段と、
を備えることを特徴とする画像処理装置。
【請求項１２】
請求項６〜請求項１１のいずれかに記載の画像処理装置において、
前記平行移動量算出手段で算出された前記平行移動量および前記回転角度算出手段で算出された前記回転角度に対する、前記ブロック毎動きベクトルのそれぞれが示す平行移動量および回転角度の誤差を求める誤差算出手段と、
前記誤差算出手段で求めた前記誤差の前記複数のブロック毎動きベクトルについての総和が所定の閾値未満であるか否かを判定する判定手段と、
前記判定手段で、前記複数のブロック毎動きベクトルについての総和が所定の閾値未満であるときに、前記参照画面について前記回転・平行移動加算手段における処理を実行するように制御する制御手段と
を設けることを特徴とする画像処理装置。
【請求項１３】
撮像部と、
前記撮像部からの前記撮像画像について、注目画面と、当該注目画面よりも前の基準画面との間の平行移動量を算出すると共に、前記基準画面に対する前記注目画面の回転角度を算出する算出手段と、
前記注目画面を、前記算出手段で算出された平行移動量だけ平行移動すると共に、前記算出手段で算出された回転角度だけ回転させ、前記基準画面または前記基準画面と他の画面とを重ね合わせて加算した加算処理後画面と重ね合わせて加算する回転・平行移動加算手段と、
前記回転・平行移動加算手段で重ね合わされた撮像画像のデータを記録媒体に記録する記録手段と、
を備え、
前記回転・平行移動加算手段は、
第１のメモリに格納されている前記注目画面を、前記算出手段で算出された平行移動量だけ移動すると共に、前記算出手段で算出された回転角度だけ回転させるように、前記第１のメモリに対する読み出しアドレスを制御することにより、前記第１のメモリから読み出す回転・平行移動処理手段と、
第２のメモリの格納されている前記基準画面または前記基準画面と他の画面とを重ね合わせて加算した加算処理後画面を読み出し、前記回転・平行移動処理手段からの前記平行移動および回転処理された前記注目画面と、前記基準画面または前記加算処理後画面とを重ね合わせて加算することにより、複数枚の画面を重ね合わせて加算した新たな加算処理後画面を得る加算手段と、
前記加算手段で重ね合わされた前記新たな加算処理後画面を前記第２のメモリに書き戻すように制御する制御手段と、
を備えることを特徴とする撮像装置。
【請求項１４】
画面単位で順次に入力される画像について、注目画面と、当該注目画面よりも前の基準画面との間の平行移動量を算出すると共に、前記基準画面に対する前記注目画面の回転角度を算出する算出工程と、
前記注目画面を、前記算出工程で算出された平行移動量だけ平行移動すると共に、前記算出手段で算出された回転角度だけ回転させ、前記基準画面または前記基準画面と他の画面とを重ね合わせて加算した加算処理後画面と重ね合わせて加算する回転・平行移動加算工程と、
を備え、
前記回転・平行移動加算工程は、
第１のメモリに格納されている前記注目画面を、前記算出手段で算出された平行移動量だけ移動すると共に、前記算出手段で算出された回転角度だけ回転させるように、前記第１のメモリに対する読み出しアドレスを制御することにより、前記第１のメモリから読み出す回転・平行移動処理工程と、
第２のメモリの格納されている前記基準画面または前記基準画面と他の画面とを重ね合わせて加算した加算処理後画面を読み出し、前記回転・平行移動処理工程で得られた前記平行移動および回転処理された前記注目画面と、前記基準画面または前記加算処理後画面とを重ね合わせて加算することにより、複数枚の画面を重ね合わせて加算した新たな加算処理後画面を得る加算工程と、
前記加算工程で重ね合わされた前記新たな加算処理後画面を前記第２のメモリに書き戻すように制御する制御工程と、
を備えることを特徴とする画像処理方法。
【請求項１５】
請求項１４に記載の画像処理方法において、
前記回転・平行移動処理工程における前記回転角度に応じた回転量の算出に用いる三角関数を要素とする回転行列において、前記回転角度をγとしたとき、ｃｏｓγ＝１、ｓｉｎγ＝γと近似する
ことを特徴とする画像処理方法。
【請求項１６】
請求項１４に記載の画像処理方法において、
前記算出工程において算出する前記回転角度は、±ａｒｃｔａｎ１／６４の範囲に限定することを特徴とする画像処理方法。
【請求項１７】
請求項１４に記載の画像処理方法において、
前記第１のメモリからは前記注目画面の画像データをバースト転送すると共に、前記回転角度に応じて前記注目画面の読み出しラインを切り換えるべきアドレス位置を、前記バースト転送の境目となるアドレスに設定する
を備えることを特徴とする画像処理方法。
【請求項１８】
請求項１７に記載の画像処理方法において、
前記注目画面の読み出しラインを決定する判定位置を、前記バースト転送の区間の中央の位置とする
を備えることを特徴とする画像処理方法。
【請求項１９】
撮像部からの撮像画像について、注目画面と、当該注目画面よりも前の基準画面との間の平行移動量を算出すると共に、前記基準画面に対する前記注目画面の回転角度を算出する算出工程と、
前記注目画面を、前記算出工程で算出された平行移動量だけ平行移動すると共に、前記算出工程で算出された回転角度だけ回転させ、前記基準画面または前記基準画面と他の画面とを重ね合わせて加算した加算処理後画面と重ね合わせて加算する回転・平行移動加算工程と、
前記回転・平行移動加算工程で重ね合わされた撮像画像のデータを記録媒体に記録する記録工程と、
を備え、
前記回転・平行移動加算工程は、
第１のメモリに格納されている前記注目画面を、前記算出工程で算出された平行移動量だけ移動すると共に、前記算出手段で算出された回転角度だけ回転させるように、前記第１のメモリに対する読み出しアドレスを制御することにより、前記第１のメモリから読み出す回転・平行移動処理工程と、
第２のメモリの格納されている前記基準画面または前記基準画面と他の画面とを重ね合わせて加算した加算処理後画面を読み出し、前記回転・平行移動処理工程で得られた前記平行移動および回転処理された前記注目画面と、前記基準画面または前記加算処理後画面とを重ね合わせて加算することにより、複数枚の画面を重ね合わせて加算した新たな加算処理後画面を得る加算工程と、
前記加算工程で重ね合わされた前記新たな加算処理後画面を前記第２のメモリに書き戻すように制御する制御工程と、
を備えることを特徴とする撮像方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、例えば、デジタルスチルカメラやビデオカメラなどの撮像装置において撮像されて得られた画像情報に含まれるいわゆる手ぶれ成分を補正して、当該手ぶれの無い画像を得ることができるようにする画像処理装置、画像処理方法、撮像装置および撮像方法に関する。
【背景技術】
【０００２】
一般に、デジタルスチルカメラやビデオカメラなどの撮像装置を手で持って構えて撮影をした場合、撮影時の手ぶれによる撮像装置の振動が、撮像画像の画面単位での振動となって現われる。
【０００３】
このような手ぶれによる撮像画像の振動を補正する方法として、昨今の市場においては、ジャイロセンサの低価格化、高性能化、小型化に伴い、ジャイロ（角速度）センサを用いた光学式の手ぶれ補正方式が主流を占めている。
【０００４】
しかし、ここ数年においては、デジタルスチルカメラの急速な普及と、それと機を同じくした急速な高画素化の流れが、新たな問題を生み始めている。それは、低照度（露光時間が長い）ときの静止画においても、手ぶれ補正が強く求められているものの、解がジャイロセンサ等のセンサを用いたものしか存在せず、ジャイロセンサ自体の検出精度の甘さなどのジャイロセンサの弱点やその他の問題が露呈しつつある点である。
【０００５】
現在市場に出回っている民生機における、静止画用途の手ぶれ補正は、全て、遍くジャイロセンサもしくは加速度センサを使って手ぶれベクトルを計測し、それを機構系にフィードバックして、ＣＣＤ（Ｃｈａｒｇｅ  Ｃｏｕｐｌｅｄ  Ｄｅｖｉｃｅ）イメージャやＣＭＯＳ（Ｃｏｍｐｌｅｍｅｎｔａｒｙ  Ｍｅｔａｌ  Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ）イメージャなどのイメージセンサに射影される像が、ぶれを起こさないように高速に制御する、というものである。
【０００６】
ここでいう機構系としては、レンズ、プリズム、イメージャ（もしくはイメージャと一体化したモジュール）が提案されており、それぞれ、レンズシフト、プリズムシフト、イメージャシフトと呼ばれている。
【０００７】
このような方法で手ぶれ補正がなされている以上、先に挙げたジャイロセンサ自体の精度誤差に加え、機構系へのフィードバック遅延、もしくはフィードバック遅延を回避するための予測誤差、そして、機構系の制御誤差も重畳され、とてもピクセル精度で補正をかけることは不可能である。
【０００８】
以上に挙げたように、現状のセンサを使用した手ぶれ補正には、原理的に、精度を追求できない、という大きな問題があるにも関わらず、市場で高評価を得ているのは、手ぶれを補正できないまでも低減できるからである。
【０００９】
しかしながら、今後益々の高画素化が予想される中、ピクセルサイズが小さくなるに従って、補正限界がピクセル精度と益々開いて行かざるを得ない、という事実に市場が気付くのも時間の問題である。
【００１０】
一方、手ぶれによる撮像画像の振動を補正する方法の他の一つとして、撮像画像の画面単位の動きベクトルを算出し、この動きベクトルに基づいて、画像メモリに蓄えられている撮像画像データの読み出し位置をシフトして手ぶれ補正をするセンサレス手ぶれ補正方法が知られている。
【００１１】
撮像画像の画面単位の動きベクトルを撮像画像情報自身から検出する方法としては、２画面分の撮像画像間の相関を求めるブロックマッチングが知られている。このブロックマッチングを用いるセンサレス手ぶれ補正方法は、原理的に、ロール軸方向の回転成分を含んだピクセル精度の手ぶれベクトル検出が実現可能であり、また、ジャイロセンサなどの機械的な部品が不要なので、撮像装置の小型、軽量化を実現することができるという点でも有利である。
【００１２】
図７８および図７９は、ブロックマッチングの概要を図示したものである。また、図８０には、その処理フローチャートの一般例を示す。
【００１３】
ブロックマッチングは、撮像装置部からの撮像画像について、注目画面である参照画面と、当該参照画面よりも前、例えば１画面分前の撮像画面である元画面との間の１画面分単位での動きベクトルを、所定の大きさの矩形領域のブロックについて、参照画面と元画面との相関を算出することにより算出する方法である。
【００１４】
なお、ここで画面とは、１フレームまたは１フィールドの画像データからなる画像を意味しているが、この明細書では、説明の便宜上、画面は１フレームからなるものとして、画面をフレームと称することとする。したがって、参照画面は参照フレーム、元画面は元フレーム（ターゲットフレーム）と称する。
【００１５】
例えば、参照フレームの画像データは、撮像装置部からの現フレームの画像データ、または現フレームの画像データがフレームメモリに格納されて１フレーム分遅延されたものとされる。元フレームの画像データは、参照フレームの画像データがさらにフレームメモリに格納されて１フレーム分遅延されたものとされる。
【００１６】
ブロックマッチングにおいては、図７８に示すように、元フレーム１０１の任意の所定の位置において、水平方向の複数画素および垂直方向の複数ライン分からなる所定の大きさの矩形領域からなるターゲットブロック１０３が設定される。
【００１７】
これに対して、参照フレーム１０２において、元フレームのターゲットブロック１０３の位置と同じ位置に、ターゲットブロックの射影イメージブロック１０４（図７８の点線参照）を想定し、このターゲットブロックの射影イメージブロック１０４を中心としたサーチ範囲１０５（図７８の一点鎖線参照）を設定すると共に、ターゲットブロック１０３と同じ大きさの参照ブロック１０６を考える。
【００１８】
そして、この参照ブロック１０６の位置を参照フレーム１０２のサーチ範囲１０５内において移動させ、各位置において参照ブロック１０６に含まれる画像内容と、ターゲットブロック１０３の画像内容との相関を求め、最も相関が強いとして検出された参照ブロック１０６の位置を、元フレームのターゲットブロック１０３が、参照フレーム１０２において移動した位置として検出するようにする。そして、その検出した参照フレーム１０６の位置と、ターゲットブロックの位置との間の位置ずれ量を、方向成分を含む量としての動きベクトルとして検出するようにする。
【００１９】
この場合、参照ブロック１０６は、サーチ範囲１０５を、例えば水平方向および垂直方向に、１画素または複数画素単位で移動させるようにする。したがって、サーチ範囲１０５内には、複数個の参照ブロックが設定されることになる。
【００２０】
ここで、ターゲットブロック１０３と、サーチ範囲１０５内を移動する各参照ブロック１６との相関は、ターゲットブロック１０３内の各画素の輝度値と、参照ブロック１０６内の対応する各画素の輝度値との差分の絶対値の、ブロック内の全画素についての総和（この差分の絶対値の総和を差分絶対値和と呼ぶ。以下、この差分絶対値和をＳＡＤ（Ｓｕｍ  ｏｆ  Ａｂｓｏｌｕｔｅ  Ｄｉｆｆｅｒｅｎｃｅ）値と記載することとする）を求めることにより検出する。すなわち、ＳＡＤ値が最小となる位置の参照ブロック１０６が最も相関が強い参照ブロックとして検出され、その検出された参照ブロック１０６のターゲットブロック１０３の位置に対する位置ずれ量が動きベクトルとして検出される。
【００２１】
ブロックマッチングでは、サーチ範囲１０５内に設定される複数個の参照ブロック１０６のそれぞれの、ターゲットブロック１０３の位置に対する位置ずれ量は、方向成分を含む量としての参照ベクトル１０７（図７８参照）で表現される。各参照ブロック１０６の参照ベクトル１０７は、参照ブロック１０６の参照フレーム１０２上の位置に応じた値となるが、従来のブロックマッチングでは、ＳＡＤ値が最小値となる参照ブロック１０６の参照ベクトルを、ターゲットブロック１０３に対する動きベクトルとして検出するものである。
【００２２】
そこで、ブロックマッチングでは、一般に、図７９に示すように、サーチ範囲１０５内において設定される複数個の参照ブロック１０６のそれぞれとターゲットブロック１０３との間におけるＳＡＤ値（以下、説明の簡単のため参照ブロックについてのＳＡＤ値という）を、サーチ範囲１０５内におけるそれぞれの参照ブロック１０６の位置に応じた参照ベクトル１０７のそれぞれに対応させて、メモリに記憶しておき、そのメモリに記憶された全ての参照ブロック１０６についてのＳＡＤ値の中から、最小のＳＡＤ値の参照ブロック１０６を検出することで、ターゲットブロック１０３に対する動きベクトル１１０を検出するようにしている。
【００２３】
サーチ範囲１０５内に設定された複数個の参照ブロック１０６の位置に応じた参照ベクトル１０７のそれぞれに対応させて、それぞれの参照ブロック１０６についてのＳＡＤ値を記憶したものを、差分絶対値和テーブル（以下ＳＡＤテーブルという）と呼ぶ。図７２のＳＡＤテーブル１０８が、これを示しており、このＳＡＤテーブル１０８において、それぞれの参照ブロック１０６についてのＳＡＤ値をＳＡＤテーブル要素１０９という。
【００２４】
なお、上述の説明において、ターゲットブロック１０３および参照ブロック１０６の位置とは、それらのブロックの任意の特定の位置、例えば中心位置を意味するものであり、参照ベクトル１０７は、参照フレーム１０２におけるターゲットブロック１０３の射影イメージブロック１０４の位置と、参照ブロック１０６の位置との間のずれ量（方向を含む）を示すものである。図７８および図７９の例では、ターゲットブロック１０３は、フレームの中心位置にあるとしている場合である。
【００２５】
そして、各参照ブロック１０６に対応する参照ベクトル１０７は、参照フレーム１０２上のターゲットブロック１０３に対応する位置に対する当該各参照ブロック１０６の位置ずれとなっているので、参照ブロック１０６の位置が特定されると、その位置に対応して参照ベクトルの値も特定される。したがって、ＳＡＤテーブル１０８のメモリにおける参照ブロックのＳＡＤテーブル要素のアドレスが特定されると、対応する参照ベクトルは特定されることになる。
【００２６】
以上説明した従来のブロックマッチングの処理を、図８０のフローチャートを参照して説明すると、次のようになる。
【００２７】
先ず、サーチ範囲１０５内の１つの参照ブロックＩｉを指定するが、これは、当該参照ブロックＩｉに対応する参照ベクトルを指定することに等しい（ステップＳ１）。ここで、図７９において、（ｖｘ，ｖｙ）は、ターゲットブロックのフレーム上の位置を基準位置（０，０）としたときに、指定された参照ベクトルにより示される位置を示し、ｖｘは指定された参照ベクトルによる、基準位置からの水平方向のずれ量成分であり、また、ｖｙは指定された参照ベクトルによる、基準位置からの垂直方向成分のずれ量成分である。
【００２８】
ここでは、ずれ量ｖｘ、ｖｙは、画素を単位とした値とされ、例えばｖｘ＝＋１は、基準位置（０，０）に対して、水平方向の右方向に１画素分ずれた位置を示し、また、ｖｘ＝−１は、基準位置（０，０）に対して、水平方向の左方向に１画素分ずれた位置を示している。また、例えばｖｙ＝＋１は、基準位置（０，０）に対して、垂直方向の下方向に１画素分ずれた位置を示し、また、ｖｙ＝−１は、基準位置（０，０）に対して、垂直方向の上方向に１画素分ずれた位置を示している。
【００２９】
以上のように、（ｖｘ、ｖｙ）は、参照ベクトルで示される基準位置に対する位置（以下、簡単のため、参照ベクトルで示される位置という）を示しており、参照ベクトルのそれぞれに対応している。つまり、ｖｘおよびｖｙを整数としたとき、（ｖｘ、ｖｙ）は参照ベクトルのそれぞれを表すことになる。したがって、以下の説明においては、（ｖｘ、ｖｙ）の位置を示す参照ベクトルを、参照ベクトル（ｖｘ、ｖｙ）と記載することがある。
【００３０】
ここで、サーチ範囲の中心位置をターゲットブロックの位置、つまり前記基準位置（０，０）とし、サーチ範囲を、水平方向には±Ｒｘ、垂直方向には±Ｒｙとしたとき、
−Ｒｘ≦ｖｘ≦＋Ｒｘ、−Ｒｙ≦ｖｙ≦＋Ｒｙ
とされるものである。
【００３１】
次に、ターゲットブロックＩｏ内の１つの画素の座標（ｘ，ｙ）を指定する（ステップＳ２）。次に、ターゲットブロックＩｏ内の指定された１つの座標（ｘ，ｙ）の画素値Ｉｏ（ｘ，ｙ）と、参照ブロックＩｉ内の対応する画素位置の画素値Ｉｉ（ｘ＋ｖｘ，ｙ＋ｖｙ）との差分の絶対値αを算出する（ステップＳ３）。すなわち、差分絶対値αは、
α＝｜Ｉｏ（ｘ，ｙ）−Ｉｉ（ｘ＋ｖｘ，ｙ＋ｖｙ）｜    ・・・（式１）
として算出される。
【００３２】
そして、算出した差分絶対値αを、当該参照ブロックＩｉの参照ベクトル（ｖｘ，ｖｙ）が指し示すアドレス（テーブル要素）の、それまでのＳＡＤ値に加算し、その加算であるＳＡＤ値を、当該アドレスに書き戻すようにする（ステップＳ４）。すなわち、参照ベクトル（ｖｘ，ｖｙ）に対応するＳＡＤ値を、ＳＡＤ（ｖｘ，ｖｙ）と表すと、
ＳＡＤ（ｖｘ，ｖｙ）＝Σα＝Σ｜Ｉｏ（ｘ，ｙ）−Ｉｉ（ｘ＋ｖｘ，ｙ＋ｖｙ）｜
・・・（式２）
として算出し、当該参照ベクトル（ｖｘ，ｖｙ）が指し示すアドレスに書き込むようにする。
【００３３】
次に、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素について、上記の演算を行なったか否かを判別し（ステップＳ５）、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素については、未だ、演算は終了していないと判別したときには、ステップＳ２に戻り、ターゲットブロックＩｏ内の次の座標（ｘ，ｙ）の画素位置を指定し、このステップＳ２以降の処理を繰り返す。
【００３４】
また、ステップＳ５で、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素について、上記の演算を行なったと判別したときには、当該参照ブロックについてのＳＡＤ値の算出が終了したと判別して、サーチ範囲内の全ての参照ブロック、すなわち、全ての参照ベクトル（ｖｘ，ｖｙ）についての上記の演算処理を完了したか否か判別する（ステップＳ６）。
【００３５】
ステップＳ６で、未だ、上記の演算処理を完了していない参照ベクトル（ｖｘ，ｖｙ）があると判別すると、ステップＳ１に戻り、上記の演算処理を完了していない次の参照ベクトル（ｖｘ，ｖｙ）を設定して、このステップＳ１以降の処理を繰り返す。
【００３６】
そして、ステップＳ６で、上記の演算処理を完了していない参照ベクトル（ｖｘ，ｖｙ）はサーチ範囲内になくなったと判別すると、ＳＡＤテーブルが完成したとして、当該完成したＳＡＤテーブルにおいて、最小値となっているＳＡＤ値を検出する（ステップＳ７）。そして、当該最小値となっているＳＡＤ値のアドレスに対応する参照ベクトルを、ターゲットブロックＩｏに対する動きベクトルとして検出する（ステップＳ８）。ここで、ＳＡＤの最小値をＳＡＤ（ｍｘ，ｍｙ）と書き表すと、目的とする動きベクトルは、位置（ｍｘ，ｍｙ）を示すベクトル（ｍｘ，ｍｙ）として算出される。
【００３７】
以上で、１つのターゲットブロックに対するブロックマッチングによる動きベクトルの検出処理は、終了となる。
【００３８】
実際的には、一つのターゲットブロックについての動きベクトルでは、元フレームに対する参照フレームについての精度の良い手ぶれベクトルを得ることが困難である。そのため、元フレームにおいては、ターゲットブロックは、元フレームの全範囲をカバーするように、複数個が設定され、一方、参照フレームにおいては、図８１に示すように、その複数個のターゲットブロックの射影イメージ１０４、１０４、・・・について、それぞれサーチ範囲１０５、１０５、・・・を設定して、それぞれのサーチ範囲について、対応するターゲットブロックに対する動きベクトル１１０、１１０、・・・の検出を行うようにする。
【００３９】
そして、検出された複数個の動きベクトル１１０、１１０、・・・から、元フレームに対する参照フレームについての手ぶれベクトル（グローバル動きベクトル）を検出するようにする。
【００４０】
この複数個の動きベクトル１１０から、手ぶれベクトル（グローバル動きベクトル）を検出する手法としては、複数の動きベクトルの多数決によるもの、すなわち、複数個の動きベクトル１１０で、向きおよび大きさが同等である動きベクトルの数が最も多い動きベクトルをグローバル動きベクトルとする手法が主として提案されている。また、この多数決による手法と、時間軸方向の動きベクトルの変化量（周波数）による信頼性評価との併用方法が提案されている。
【００４１】
従来技術としてのセンサレス手ぶれ補正は、特許文献１（特開２００３-７８８０７号公報）に代表されるように、その殆どが動画をターゲットとしている。また、センサレス手ぶれ補正を静止画で実現する手法としては、特許文献２（特開平７−２８３９９９号公報）を始め、幾つか提案はされている。この特許文献２は、手ぶれの発生しない程度の短い露光時間で何枚かの静止画を連写撮影し、その静止画間の手ぶれベクトルを求め、その手ぶれベクトルに従って、前記連射撮影した複数枚の静止画を移動させながら加算して行くことで、最終的に手ぶれと低照度ノイズの無い高画質（高解像度）の静止画を得る、というアルゴリズムである。
【００４２】
実現できるレベルの現実的な提案としては、特許文献３（特開２００５−３８３９６公報）を挙げることができる。この特許文献３に示されたものは、画像を縮小変換したサイズで動ベクトルを求める手段と、同一のＳＡＤテーブルを複数のブロックで共有する手段から構成される。画像の縮小変換と、ＳＡＤテーブルの複数ブロックでの共有化は、ＳＡＤテーブルサイズの削減を実現するための、非常に良い手法であり、ＭＰＥＧ（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）画像圧縮方式における動きベクトル検出やシーンチェンジ検出等、他分野でも使われている。
【００４３】
しかし、この特許文献３のアルゴリズムの問題点として、画像の縮小変換と、その際のメモリ（ＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）））アクセスに、時間とメモリ容量を消費することと、ＳＡＤテーブルを複数ブロックで時分割アクセスする手法のため、メモリアクセスが非常に増加し、この処理にも時間を要してしまうという課題がある。動画の手ぶれ補正においては、リアルタイム性と同時にシステム遅延時間の短縮が求められるため、この処理時間の問題が課題となってしまうのである。
【００４４】
また、元画像を縮小変換する際には、エイリアシング（折り返し歪み）や、低照度ノイズ除去のためのローパスフィルタを、縮小処理の前処理として実装するが必要である。しかし、縮小倍率に応じて、ローパスフィルタの特性が変化する上、特に、垂直方向のローパスフィルタの場合、多タップのデジタルフィルタとした場合に、多くのラインメモリと演算ロジックを必要としなければならず、回路規模増加の問題が生じる。
【００４５】
上記の先行技術文献は、次の通りである。
【特許文献１】特開２００３−７８８０７号公報
【特許文献２】特開平７−２８３９９９号公報
【特許文献３】特開２００５−３８３９６号公報
【発明の開示】
【発明が解決しようとする課題】
【００４６】
動画の手ぶれ補正システムにおいては、精度よりも処理時間を重視した、大まかな手ぶれベクトルのリアルタイム検出が求められており、従来技術によるセンサレス手ぶれ補正手法でも、殆どの状況において満足のいく結果が得られる。
【００４７】
一方、静止画の手ブレ補正システムにおける従来技術は、アイデアレベルの提案が多く、また、画素数が今日の１０００万画素レベルを想定していないことが多い。そのため、手ぶれの回転成分まで考慮されていなかったり、考慮されていても、膨大な演算量が必要であったりする等、デジタルスチルカメラなどの現在のモバイル機器をターゲットとした、現実的配慮に欠けていた。
【００４８】
しかし、前述の通り、デジタルカメラなどの撮像装置では、今後益々高密度画素化が進み、高性能化が求められると予想されるが、このような状況においては、静止画の撮影時の手ぶれ補正を、ジャイロ（角速度）センサを用いないセンサレスで実現する意義は非常に大きい。
【００４９】
そこで、上述したように、ブロックマッチングを用いて、センサレスで、手ぶれ動きベクトルを算出し、その検出した動きベクトルを用いて手ぶれ補正を行なうことが有望であり、上述した課題の解決が重要である。
【００５０】
この場合に、手ぶれによる画像（画面）全体についての平行移動のみではなく、画像（画面）の回転を考慮することが、静止画において、より自然かつ高画質の出力画像を得るためには重要である。
【００５１】
この発明は、以上の点にかんがみ、上述した従来のセンサレス手ぶれ補正方式の問題点を解決し、かつ、画像の平行移動のみでなく、回転を考慮して高画質の画像を得ることができる画像処理方法および装置を提供することを目的とする。
【課題を解決するための手段】
【００５２】
上記の課題を解決するために、請求項１の発明は、
画面単位で順次に入力される画像について、注目画面と、当該注目画面よりも前の基準画面との間の平行移動量を算出すると共に、前記基準画面に対する前記注目画面の回転角度を算出する算出手段と、
前記注目画面を、前記算出手段で算出された平行移動量だけ平行移動すると共に、前記算出手段で算出された回転角度だけ回転させ、前記基準画面または前記基準画面と他の画面とを重ね合わせて加算した加算処理後画面と重ね合わせて加算する回転・平行移動加算手段と、
を備え、
前記回転・平行移動加算手段は、
第１のメモリに格納されている前記注目画面を、前記算出手段で算出された平行移動量だけ移動すると共に、前記算出手段で算出された回転角度だけ回転させるように、前記第１のメモリに対する読み出しアドレスを制御することにより、前記第１のメモリから読み出す回転・平行移動処理手段と、
第２のメモリの格納されている前記基準画面または前記基準画面と他の画面とを重ね合わせて加算した加算処理後画面を読み出し、前記回転・平行移動処理手段からの前記平行移動および回転処理された前記注目画面と、前記基準画面または前記加算処理後画面とを重ね合わせて加算することにより、複数枚の画面を重ね合わせて加算した新たな加算処理後画面を得る加算手段と、
前記加算手段で重ね合わされた前記新たな加算処理後画面を前記第２のメモリに書き戻すように制御する制御手段と、
を備える画像処理装置を提供する。
【００５３】
上述の構成の請求項１の発明による画像処理装置においては、基準画面に対する注目照画面の平行移動量と回転角度とが算出される。そして、算出された平行移動量と回転角度とを用いて、複数枚の画面を順次に重ね合わせる。この重ね合わされた結果の画像は、例えば撮像画像の場合であれば、手ぶれが除去された高画質の画像となる。
【００５４】
この場合に、注目画面は、前記平行移動量と回転角度に応じて移動されて、基準画面と重ね合わされるようにされた状態で、第１のメモリから読み出され、基準画面または加算処理後画面と加算される。
【００５５】
また、請求項２の発明は、請求項１に記載の画像処理装置において、
前記回転・平行移動処理手段における前記回転角度に応じた回転量の算出に用いる三角関数を要素とする回転行列において、前記回転角度をγとしたとき、ｃｏｓγ＝１、ｓｉｎγ＝γと近似する
ことを特徴とする。
【００５６】
回転角度γから回転移動量を検出するためには、回転角度γについての三角関数ｃｏｓγ、ｓｉｎγを用いた回転行列を用いる必要がある。三角関数ｃｏｓやｓｉｎの値はテーブルを用いるが、そのテーブルコストがかかる上に、回転行列による座標変換には、僅かな縮小変換も含まれるので、忠実に実現しようとすると低コスト化の支障になる。
【００５７】
これに対して、請求項２の発明においては、ｃｏｓγ＝１、ｓｉｎγ＝γと近似した回転行列を用いるようにするので、三角関数ｃｏｓやｓｉｎのテーブルは不要になり、低コスト化を実現することができる。
【００５８】
また、請求項６の発明は、
請求項１に記載の画像処理装置において、
前記算出手段は、
画面単位で順次に入力される画像について、前記注目画面である参照画面と、当該参照画面よりも前の画面である元画面との間の動きベクトルを算出するものであって、前記元画面中において、複数の所定の位置に、それぞれ複数の画素からなる所定の大きさのターゲットブロックを設定し、前記参照画面において、前記ターゲットブロックと同じ大きさの参照ブロックを、前記複数のターゲットブロックの位置に応じて設定された複数のサーチ範囲のそれぞれにおいて複数個設定してブロックマッチングを行い、前記複数のターゲットブロックのそれぞれについてのブロック毎動きベクトルを算出するブロック毎動きベクトル算出手段と、
前記ブロック毎動きベクトル算出手段で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の平行移動量を算出する平行移動量算出手段と、
前記ブロック毎動きベクトル算出手段で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の回転角度を算出する回転角度算出手段と、
を備えることを特徴とする。
【００５９】
この請求項６の発明による画像処理装置においては、ブロック毎動きベクトル算出手段で算出された複数のブロック毎動きベクトルから、元画面に対する参照画面の平行移動量と回転角度とが算出される。そして、算出された平行移動量と回転角度とを用いて、複数枚の画面を順次に重ね合わせる。この重ね合わされた結果の画像は、例えば撮像画像の場合であれば、手ぶれが除去された高画質の画像となる。
【００６０】
また、請求項７の発明は、請求項６に記載の画像処理装置において、
前記元画面に対する前記参照画面全体についてのグローバル動きベクトルを算出するグローバル動きベクトル算出手段と、
前記グローバル動きベクトルを用いて、前記ブロック毎動きベクトル算出手段で求められた前記複数のブロック毎動きベクトルのそれぞれを評価する評価手段と、
を備え、
前記評価手段で付与された評価値が高い前記複数のブロック毎動きベクトルの数が予め定められた閾値未満である前記参照画面は、前記回転・平行移動加算手段において重ね合わせ画面から排除する
ことを特徴とする。
【００６１】
この請求項７の発明によれば、元画面に対する参照画面全体についてのグローバル動きベクトルが用いられて、複数のブロック毎動きベクトルのそれぞれが評価され、その評価値が高いブロック毎動きベクトルの数が予め定められた閾値未満であるような信頼性の低い参照画面は、回転・平行移動加算手段において重ね合わせ画面から排除される。
【００６２】
したがって、信頼性の高い参照画面のみが回転・平行移動加算手段において重ね合わされることになり、手ぶれの無い、より高画質の画像が得られると期待できる。
【００６３】
また、請求項８の発明は、請求項６に記載の画像処理装置において、
前記元画面に対する前記参照画面全体についてのグローバル動きベクトルを生成するグローバル動きベクトル生成手段と、
前記グローバル動きベクトルを用いて、前記ブロック毎動きベクトル算出手段で求められた前記複数のブロック毎動きベクトルのそれぞれを評価する評価手段と、
を備え、
前記平行移動量算出手段および前記回転角度算出手段においては、前記評価手段で付与された評価値が高い複数個の前記ブロック毎動きベクトルのみから前記平行移動量および前記回転角を算出する
ことを特徴とする。
【００６４】
この請求項８の発明によれば、ブロック毎動きベクトル算出手段で算出された複数のブロック毎動きベクトルのうちの信頼性の高いブロック毎動きベクトルのみが用いられて、平行移動量および回転角が算出されるので、精度の良い平行移動量および回転角が算出される。
【００６５】
したがって、回転・平行移動加算手段においては、この精度の良い平行移動量および回転角が用いられて参照画像の重ね合わせがなされ、手ぶれの無い、より高画質の画像が得られると期待できる。
【００６６】
また、請求項９の発明は、請求項７または請求項８に記載の画像処理装置において、
前記ブロック毎動きベクトル算出手段は、
前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出手段と、
前記差分絶対値和算出手段で算出された、前記サーチ範囲内の複数参照ブロック位置についての前記差分絶対値和を記憶する差分絶対値和テーブルを、前記複数個のサーチ範囲のそれぞれに対応して複数生成する差分絶対値和テーブル生成手段と、
前記差分絶対値和テーブルのそれぞれから前記複数のターゲットブロックに対応する複数の前記ブロック毎動きベクトルを算出する手段と、
を備え、
前記グローバル動きベクトル生成手段は、
前記複数の差分絶対値和テーブルのそれぞれの前記差分絶対値和について、前記複数のサーチ範囲のそれぞれで対応する参照ブロック位置のものを合算して合算差分絶対値和を求め、一つのサーチ範囲内の複数参照ブロック位置分の前記合算差分絶対値和を記憶する合算差分絶対値和テーブルを生成する合算差分絶対値和テーブル生成手段と、
前記合算差分絶対値和テーブル生成手段で生成された前記合算差分絶対値和テーブルから、前記グローバル動きベクトルを検出する手段と、
を備えることを特徴とする。
【００６７】
ブロック毎動きベクトル検出手段に関しては、参照画面のサーチ範囲内のそれぞれの参照ブロックと、元画面のターゲットブロックとの間の差分絶対値和（ＳＡＤ値）を求め、この差分絶対値和から差分絶対値和テーブルを生成し、その差分絶対値和テーブルからブロック毎動きベクトルを算出するのは従来と同様である。
【００６８】
この請求項９の発明においては、グローバル動きベクトル生成手段では、前記参照画面について求められた複数の差分絶対値和テーブルのそれぞれの差分絶対値和について、複数のサーチ範囲のそれぞれで対応する参照ブロック位置のＳＡＤ値を合算し、合算差分絶対値和（合算ＳＡＤ値という）を求める。これにより、一つのサーチ範囲内の複数参照ブロック位置分の合算ＳＡＤ値が求められ、それらの合算ＳＡＤ値を記憶する合算差分絶対値和テーブルが生成される。そして、この合算ＳＡＤテーブルから、元画面に対する参照画面のグローバル動きベクトルが検出される。
【００６９】
従来は、元画面に設定された複数個のターゲットブロックのそれぞれについて、動きベクトル（ターゲットブロック毎動きベクトル）を求め、その求められた複数個の動きベクトルについての例えば多数決によりグローバル動きベクトルを算出するようにしていたが、これとは異なり、この発明における合算ＳＡＤ値からなる合算ＳＡＤテーブルは、フレーム全体をまとめてブロックマッチングした結果と等価になる。
【００７０】
このため、この合算ＳＡＤテーブルから求められたグローバル動きベクトルは、従来よりも高精度のグローバル動きベクトルとなる。
【００７１】
また、請求項１０の発明は、請求項６に記載の画像処理装置において、
前記ブロック毎動きベクトル算出手段は、
前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出手段と、
前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得手段と、
前記複数のサーチ範囲のそれぞれのターゲットブロックについて、前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての差分絶対値和を記憶する縮小差分絶対値和テーブルを生成する縮小差分絶対値和テーブル生成手段と、
前記縮小差分絶対値和テーブルのそれぞれから前記ブロック毎動きベクトルを算出する手段と、
を備え、
前記縮小差分絶対値和テーブル生成手段は、
前記参照縮小ベクトル取得手段で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出手段と、
前記差分絶対値和算出手段で算出された前記参照ブロックのそれぞれについての前記差分の絶対値の総和から、前記近傍参照ベクトル検出手段で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分絶対値和のそれぞれを算出する分散差分絶対値和算出手段と、  
前記分散差分絶対値和算出手段で算出した前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和を、それまでの前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和に加算する分散加算手段と、
を備えることを特徴とする。
【００７２】
この請求項１０の発明においても、上述の請求項６と同様に、参照画面のサーチ範囲内のそれぞれの参照ブロックと、元画面のターゲットブロックとの間のＳＡＤ値を、ＳＡＤ算出手段で求めるのは従来と同様である。
【００７３】
この請求項１０の発明においては、求めた参照ブロックのＳＡＤ値を、その参照ブロックの参照ベクトルに対応して記憶するのではなく、その参照ベクトルを縮小した参照縮小ベクトルに対応して記憶する縮小差分絶対値和テーブル生成手段を備える。
【００７４】
この場合に、参照縮小ベクトルは、参照ブロックのそれぞれが対応する参照ベクトルとは一致していないので、縮小差分絶対値和テーブル生成手段は、先ず、参照縮小ベクトルの近傍の複数個の参照ベクトルを検出する。そして、それら近傍の複数の参照ベクトルのそれぞれに対応するＳＡＤ値を、ＳＡＤ算出手段で算出したＳＡＤ値から算出する。
【００７５】
そして、算出した近傍の複数の参照ベクトルのそれぞれに対応するＳＡＤ値を、それまでの当該近傍の複数の参照ベクトルのそれぞれに対応するＳＡＤ値に加算する。
【００７６】
こうして得られたＳＡＤテーブルは、参照縮小ベクトルのそれぞれの近傍の複数個の参照ベクトルのみについてのＳＡＤ値のテーブルとなっており、参照ベクトルの縮小率に応じて縮小されたものとなっている。
【００７７】
つまり、換言すると、生成されたＳＡＤ値のテーブルは、参照ベクトルの縮小率に応じて縮小されたフレーム画像についてのＳＡＤテーブルに対応する。この場合において、ターゲットブロックおよび参照ブロックの大きさは縮小されていないので、生成されたＳＡＤテーブル（縮小差分絶対値和テーブル）のサイズは、小さくなる。
【００７８】
請求項１０の発明においては、このような縮小差分絶対値和テーブルが、複数個のターゲットブロックのそれぞれについて求められる。そして、求められた複数のターゲットブロックの縮小差分絶対値和テーブルのそれぞれからブロック毎動きベクトルが算出される。
【００７９】
そして、この請求項１０の発明においては、縮小ＳＡＤテーブルは、上述したように、従来のブロックマッチングにおけるＳＡＤテーブルよりも容量の小さいものとなり、実現が現実的なものとなる。
【発明の効果】
【００８０】
この発明においては、基準画面に対する注目画面の平行移動量と回転角度とが算出され、その算出された平行移動量と回転角度だけずらされた状態で、メモリから注目画面が読み出されて、基準画面に対する注目画面のずれが補正されて複数枚の画面が順次に重ね合わせられる。この重ね合わされた結果の画像として、例えば撮像画像の場合であれば、手ぶれが除去された高画質の画像が得られる。したがって、画像の平行移動のみでなく、回転が考慮された高画質の画像が得られる。
【発明を実施するための最良の形態】
【００８１】
以下、この発明による画像処理方法および画像処理装置の実施形態を、撮像装置および撮像方法に適用した場合を例にとって、図を参照しながら説明する。
【００８２】
［この発明による画像処理方法の実施形態の概要］
以下に説明する実施形態は、主として静止画の手ぶれ補正システムに、この発明を適用した場合である。
【００８３】
この実施形態においては、入力画像フレームを参照フレームとして、この入力画像フレームと、入力画像フレームよりも前の元フレーム、例えば１フレーム遅延させた元フレームとの間で動きベクトル検出を行なう。そして、この実施形態における静止画についての手ぶれ補正は、連続的に撮影した複数枚の画像、例えば３ｆｐｓの画像を、手ぶれ補正を行いながら重ね合わせることにより行なう。
【００８４】
このように、この実施形態においては、撮影した静止画の手ぶれ補正を、連写した複数の画像について手ぶれ補正をかけながら重ね合わせて行くため、ピクセル精度（１画素精度）に近い精度が求められる。そして、この実施形態においては、手ぶれ動きベクトルとしてのフレーム間の水平方向および垂直方向の平行移動成分と同時に、フレーム間の回転成分も検出し、フレームの平行移動と共に回転移動させて、複数フレームを重ね合わせるようにする。
【００８５】
なお、以下に説明する実施形態は、静止画用に限定されるわけではなく、本質的には動画にも適用可能である。動画の場合には、リアルタイム性のため、後述する加算枚数（重ね合わせるフレーム数）に上限はあるが、フレーム毎にこの実施形態の手法を用いることにより、ノイズ・リダクション効果の高い動画を生成するシステムへの応用も、全く同じ手段で実現できる。
【００８６】
以下に説明する実施形態においても、上述したブロックマッチングを用いて、２フレーム間の動きベクトルを算出するに当たって、前述したように、元フレームについて、複数個のターゲットフレームを設定して、その複数個のターゲットフレームのそれぞれについてブロックマッチングを施す。
【００８７】
以下に説明する実施形態においては、元フレームに、例えば１６個のターゲットブロックＴＧｉ（ｉ＝０，１，２，・・・，１５）を設定し、参照フレーム１０２には、図２に示すように、元フレームの１６個のターゲットブロックＴＧｉに対応する１６個の射影イメージ１０４ｉ（ｉ＝０，１，２，・・・，１５）を設定する。そして、それぞれの射影イメージに対するサーチ範囲１０５ｉ（ｉ＝０，１，２，・・・，１５）を設定し、それぞれのサーチ範囲１０５ｉ（ｉ＝０，１，２，・・・，１５）において、対応するターゲットブロックについてのＳＡＤテーブルＴＢＬｉ（ｉ＝０，１，２，・・・，１５）を作成する。
【００８８】
そして、この実施形態では、作成されたＳＡＤテーブルＴＢＬｉのそれぞれから、各ターゲットブロックについての動きベクトル、すなわち、ブロック毎動きベクトルＢＬＫ＿Ｖｉを検出する。
【００８９】
そして、基本的には、これらの複数個のブロック毎動きベクトルＢＬＫ＿Ｖｉから、元フレームに対する参照フレームの平行移動成分を算出すると共に、回転角を算出し、その算出した平行移動成分および回転角を用いて、参照フレームを元フレームに重ね合わせるようにする。元フレームが、１フレーム毎に順次に次のフレームに更新される場合には、以上の処理を繰り返して、順次にフレームを重ね合わせることにより、手ぶれの除去された高品質の画像が得られることになる。
【００９０】
この場合において、２枚以上の複数枚のフレームを重ね合わせる際には、実際には、図３に示すように、１枚目の画面（フレーム）を基準画面として、以降のフレームを重ね合わせることになる。このため、２枚目以降の、重ね合わせるフレームについての１フレーム前のフレームとの間の平行移動量と回転角とは、順次に積算されて、１枚目のフレーム（基準画面）に対する平行移動量および回転角とされる。
【００９１】
［平行移動量および回転角度の算出方法の第１の例］
ブロックマッチング（ブロックマッチングを、この明細書では検波と呼ぶことにする）を用いて元フレームと参照フレームとの間の平行移動量および回転角度を求める方法の一つは、元フレームに対する参照フレーム全体としてのグローバル動きベクトルから求める方法である。すなわち、グローバル動きベクトルは、前のフレームに対する当該フレームの動きであるので、そのまま平行移動量とすることができる。
【００９２】
すなわち、グローバル動きベクトルの水平方向（ｘ方向）の成分が水平方向の平行移動量であり、また、グローバル動きベクトルの垂直方向（ｙ方向）の成分が垂直方向の平行移動量である。
【００９３】
また、前のフレームについて求められたグローバル動きベクトルに対する、今回の注目フレーム（参照フレーム）について求められたグローバル動きベクトルの相対的な回転角度は、今回の注目フレームの前のフレーム（元フレーム）に対する相対的な回転角度となる。
【００９４】
この場合におけるグローバル動きベクトルの算出方法としては、従来のブロックマッチングの場合と同様に、１６個のターゲットブロックについて検出されたブロック毎動きブロックＢＬＫ＿Ｖｉについて多数決を取り、多数決トップ（大きさおよび方向が同一または同等であるブロック毎動きベクトルの数が最大）のブロック毎動きベクトルを、グローバル動きベクトルとして算出する方法を採用することができる。
【００９５】
しかし、この多数決トップのブロック毎動きベクトルをグローバル動きベクトルとする場合には、被写体が動画の場合であって、当該動画撮影中の被写体が、例えば、細かい波面のある水面や木や草が風になびく情景などのときには、誤ったグローバル動きベクトル（手ぶれベクトル）を検出してしまう場合が多いという問題がある。最近のデジタルカメラにおいては、静止画のみでなく、動画を撮像記録の対象とするものも多いので、多数決方式によりグローバル動きベクトルを算出する方法は、実装上は、好ましくない。
【００９６】
そこで、この実施形態では、次に説明するような合算ＳＡＤ値を用いる合算ＳＡＤテーブルから、グローバル動きベクトルを算出するようにする。
【００９７】
すなわち、この実施形態では、前述のようにして作成した１６個のターゲットブロックについてのＳＡＤテーブルＴＢＬｉについて、図２に示すように、１６個のＳＡＤテーブルＴＢＬｉを重ね合わせるように縦方向に並べたときに、ＳＡＤテーブルＴＢＬｉのそれぞれを求めるサーチ範囲内で、互いに対応する参照ブロック位置のＳＡＤ値を合算し、合算差分絶対値和（合算ＳＡＤ値という）を求める。そして、その合算ＳＡＤ値からなるＳＡＤテーブルとして、一つのサーチ範囲内の複数参照ブロック位置分についての合算ＳＡＤテーブルＳＵＭ＿ＴＢＬを生成する。
【００９８】
ここで、合算ＳＡＤテーブルＳＵＭ＿ＴＢＬの座標位置（ｘ，ｙ）の合算ＳＡＤ値ＳＵＭ＿ＴＢＬ（ｘ，ｙ）は、各ＳＡＤテーブルＴＢＬｉの対応する座標位置（ｘ，ｙ）のＳＡＤ値をＴＢＬｉ（ｘ，ｙ）とすると、
ＳＵＭ＿ＴＢＬ（ｘ，ｙ）＝ＴＢＬ１（ｘ，ｙ）＋ＴＢＬ２（ｘ，ｙ）＋・・・
＋ＴＢＬ１６（ｘ，ｙ）
＝ΣＴＢＬｉ（ｘ，ｙ）
となる（図４の（式３）参照）。
【００９９】
そして、この実施形態では、合算ＳＡＤテーブルＳＵＭ＿ＴＢＬから、元画面に対する参照画面の動きベクトル（グローバル動きベクトル；撮像装置における手ぶれベクトルとなる）を検出する。
【０１００】
合算ＳＡＤテーブルＳＵＭ＿ＴＢＬからグローバル動きベクトルを算出する方法としては、合算ＳＡＤテーブルＳＵＭ＿ＴＢＬにおいて合算ＳＡＤ値の最小値の位置を検出し、その検出した合算ＳＡＤ値の最小値位置に対応する参照ベクトルを、グローバル動きベクトルとして検出する従来の方法を用いることができる。
【０１０１】
しかし、この最小値の合算ＳＡＤ値を用いる方法では、１画素単位の精度の動きベクトルしか得られないので、この実施形態では、合算ＳＡＤ値の最小値位置の合算ＳＡＤ値およびその近傍の複数個の合算ＳＡＤ値を用いて、近似曲面補間を行うことで、グローバル動きベクトルを算出する。すなわち、合算ＳＡＤ値の最小値位置の合算ＳＡＤ値およびその近傍の複数個の合算ＳＡＤ値を用いて、近似高次曲面を生成し、その近似高次曲面の極小値位置を検出することで、１画素単位以下の小数点精度で、グローバル動きベクトルを算出することができるようにしている。この近似曲面補間処理については、後で詳細に説明する。
【０１０２】
こうして合算ＳＡＤテーブルから求められるグローバル動きベクトルは、合算ＳＡＤ値からなる合算ＳＡＤテーブルが、フレーム全体をまとめてブロックマッチングした結果と等価になるため、多数決方式が苦手とする前述したような動画の被写体の場合にも、誤りの少ないグローバル動きベクトルが得られる。
【０１０３】
そこで、この合算ＳＡＤテーブルから求められるグローバル動きベクトルから、元フレームに対する平行移動量と回転角を求めて、上述のようなフレームの重ね合わせをすることができる。
【０１０４】
なお、このときに求めるグローバル動きベクトルとしては、合算ＳＡＤテーブルから求める合算動きベクトルに限られるものではなく、例えば多数決方式により多数決トップのブロック毎動きベクトルをグローバル動きベクトルとするようにしてもよいが、上述のような理由で合算動きベクトルが好ましい。
【０１０５】
［平行移動量および回転角度の算出方法の第２の例］
平行移動量および回転角度を算出する方法としては、グローバル動きベクトルを算出し、その算出したグローバル動きベクトルを用いて平行移動量や回転角度を算出するのではなく、参照フレームについて算出される複数個のブロック毎動きベクトルからフレームについての平行移動量および回転角を求める方法を採用することもできる。
【０１０６】
フレームの平行移動量は、原理的には、１６個のブロック毎動きベクトルの水平方向および垂直方向の移動量の平均値として求める。ここで、複数のターゲットブロックに対応する複数の射影イメージに関するサーチ範囲を検波枠と称することとしたとき、この検波枠番号ｉ（＝０，１，２，・・・，１５）は、一つの参照フレーム上において、図５のように付与することができる。
【０１０７】
そして、検波枠番号ｉのブロック毎動きベクトルの水平方向成分をＶｘｉ、垂直方向成分をＶｙｉとして、そのブロック毎動きベクトルを（Ｖｘｉ、Ｖｙｉ）と表すとすると、水平方向（ｘ方向）の平行移動量α、および垂直方向（ｙ方向）の平行移動量βは、図６の（式４）および（式５）に示すように、１６個のブロック毎動きベクトルの水平方向成分および垂直方向成分の平均値とすることができる。
【０１０８】
また、フレームの回転角γは、原理的には、１６個のブロック毎動きベクトルを用いて次のようにして求めることができる。
【０１０９】
すなわち、まず、図５と同様に図７（Ａ）に示すように一つの参照フレームについての検波枠番号を定義する。このとき、図７（Ａ）に示すように、一つの検波枠のサイズを、横（水平方向）２ａ、縦（垂直方向）２ｂとする。ここで、
ａ＝（１参照ブロックの水平画素数）＋（隣接参照ブロックとの水平間隔（画素数））
ｂ＝（１参照ブロックの垂直画素数）＋（隣接参照ブロックとの垂直間隔（画素数））
である。
【０１１０】
次に、検波枠番号０〜１５のすべての検波枠の中心Ｏｃを原点として、図７（Ｂ）に示すように、座標系を取る。そして、検波枠番号ｉに対応する値Ｐｘｉおよび値Ｐｙｉを、図７（Ｃ）および（Ｄ）に示すように定義する。この値Ｐｘｉおよび値Ｐｙｉは、すべての検波枠の中心Ｏｃからの各検波枠の中心までの水平方向（ｘ方向）および垂直方向（ｙ方向）の距離の重みを表している。
【０１１１】
この値Ｐｘｉおよび値Ｐｙｉを用いると、各検波枠番号ｉの検波枠の中心座標は、（Ｐｘｉ・ａ，Ｐｙｉ・ｂ）で表すことができる。
【０１１２】
したがって、フレームについての平行移動量を（α，β）、回転角度をγとすると、検波枠番号ｉの理論的なブロック毎動きベクトルＷｉは、図８（Ａ）に示す（式６）に示すようなものとすることができる。
【０１１３】
実際に検出された検波枠番号ｉのブロック毎動きベクトルＢＬＫ＿Ｖｉを、Ｖｉと略記すると、理論的なブロック毎動きベクトルＷｉと実際に検出されたブロック毎動きベクトルＶｉとの間のエラーεｉ２は、図８（Ｂ）の（式７）のようになるので、それを回転角度γで偏微分すると、図８（Ｃ）の（式８）のようになる。
【０１１４】
なお、図８において、「δＦ（γ）／δγ」は、関数Ｆ（γ）に関する回転角度γについての偏微分を意味している。
【０１１５】
参照フレームについて実際に検出されたブロック毎動きベクトルが実際の回転角度γを正しく含んでいるとすれば、参照フレームの複数個のすべてのブロック毎動きベクトルＶｉについてのエラーの総和Σεｉ２の回転角度γによる偏微分の値は、ゼロとなるはずであるので、回転角度γは、図８（Ｄ）の（式９）のようになる。
【０１１６】
したがって、求めるべき参照フレームについて回転角度γは、図８（Ｅ）に示す（式１０）から求めることができる。
【０１１７】
なお、（式６）の一番上の式における第１項における、三角関数を要素とする２×２の行列は、回転角度γだけ回転させるための回転行列である。この実施形態では、この三角関数を要素とする回転行列は、以下に説明するような理由から、（式６）の２行目の式に示されるように、近似したものを用いるようにしている。
【０１１８】
すなわち、発明者は、幾つかのビデオカメラやデジタルカメラを用いた、複数の被験者による手ぶれの回転角度の計測を行なった。その結果、複数の被験者による手ぶれによる回転角度γの最大値γ＿ｍａｘは、例えば３ｆｐｓの場合には、
γ＿ｍａｘ［ｒａｄ］≒ａｒｃｔａｎ１／６４＝０．０１５６２３７．．．
・・・（式１１）
であることが分かった。
【０１１９】
したがって、手ぶれによる回転角度γを、最大値γ＿ｍａｘ以下と想定すると、ｃｏｓγ≒１、ｓｉｎγ≒γであるとすることができるので、回転行列は、（式６）の２行目の式のように表すことができる。
【０１２０】
つまり、図９（Ａ）に示すように、画素のアスペクト比（画素の縦横比）を１：１としたとき、画面の水平方向に６４画素進んだときに、１画素上下に変動する傾きを、一般の手ぶれによる回転角度の上限と見なせることが分かった。
【０１２１】
図９（Ｂ）に示すように、現在考えられているデジタルカメラのイメージャの画素数の上限に近い値、１２００万画素（横×縦＝ｘ＿ｓｉｚｅ×ｙ＿ｓｉｚｅ＝４０９２×３０７２画素）を想定したとき、この画像（画面）をγ＿ｍａｘの角度を回転させると、図９（Ｂ）に示すように、回転後の画像の水平幅ｘ＿ｍｉｎは、図９（Ｂ）の元画像の４０９６から僅かに小さくなり、約４０９５．５となる。
【０１２２】
すなわち、
ｘ＿ｍｉｎ＝４０９６×ｃｏｓγ＿ｍａｘ
＝４０９６×ｃｏｓ１／６４
＝４０９５．５０００．．．
≒４０９６
となる。
【０１２３】
したがって、手ぶれによる回転角度γを、最大値γ＿ｍａｘ以下と想定すると、前記（式１１）に示すように、回転角度γは非常に小さいので、ｃｏｓγ≒１、ｓｉｎγ≒γであるとすることができ、回転行列Ｒは、図１０（Ａ）の（式１２）のように表すことができる。
【０１２４】
そして、上述の図９の説明から、手ぶれによる回転角度を、γ＿ｍａｘを上限とした回転においては、回転行列Ｒとして三角関数を正確に用いた場合と、図１０（Ａ）のような近似値を用いた場合とで、最大でも０．５画素程度しか誤差が生じないことが分かる。
【０１２５】
回転行列Ｒとして三角関数を用いて、回転角度γから回転移動量を検出するためには、通常は、三角関数ｃｏｓやｓｉｎの値をテーブル情報として用意しておく必要があるが、そのテーブル情報についてはコストがかかる上に、回転行列による座標変換には、僅かな縮小変換も含まれるので、忠実に実現しようとすると低コスト化の支障になる。
【０１２６】
これに対して、この実施形態においては、上述したように、ｃｏｓγ≒１、ｓｉｎγ≒γと近似した回転行列Ｒを用いるようにするので、三角関数ｃｏｓやｓｉｎのテーブル情報は不要になり、低コスト化を実現することができる。
【０１２７】
以上のようにして求めた平行移動量（α、β）と、回転角度γとを用いると、平行移動によりずれた画面の基準点（画面の左上の位置）を（ｘ０、ｙ０）とすると、参照フレーム上の画素位置（ｘ、ｙ）に対応する加算結果の画像の画素位置（基準画像の画素位置に対応）（Ｘ，Ｙ）は、図１０（Ｂ）の（式１３）に従う。つまり、参照フレーム上の画素位置（ｘ，ｙ）の画素は、（α、β）の平行移動および回転角度γの回転により、（式１３）に示される加算結果の画像の画素位置（Ｘ，Ｙ）に変移する。
【０１２８】
したがって、この（式１３）を変形することにより、加算結果の画像（基準画像）の画素位置（Ｘ，Ｙ）に対応する参照フレームの画素位置（ｘ，ｙ）を求めることにより、基準画像に重ね合わせるように、参照フレームの画像（画面）を平行移動および回転させて、参照フレームをメモリから読み出すようにすることができる。
【０１２９】
そして、参照フレームの画像を（α、β）だけ平行移動させると共に、回転角度γだけ回転させてメモリから読み出した参照フレームの画像を、基準画像あるいは基準画像に対してそれ以前の参照フレームを重ね合わせて加算した加算結果の画像に、重ね合わせて加算することにより、目的とする静止画出力画像が得られる。
【０１３０】
図１１に、参照フレームＦＬｒｅｆを回転角度γだけ回転させて、基準画像のフレームＦＬｏに合致させるように、参照フレームの画像をメモリから読み出すイメージを示す。図１０（Ｂ）に示した加算結果の画像の画素位置（Ｘ，Ｙ）の計算式の、それぞれ参照画像（参照フレーム）の画素位置（ｘ、ｙ）の当該ｘ，ｙの係数が１であることから、この実施形態の回転移動には拡大および縮小を伴わないことが分かる。
【０１３１】
図１１に示すように、この実施形態では、画像の回転というよりは、平行四辺形への変形により回転演算を実現することができ、コストをかけずに効率良く、メモリ読み出しアクセスができるようになる。
【０１３２】
［より高精度の平行移動量および回転角度の算出方法の例］
ところで、静止画の場合には、このグローバル動きベクトルや複数個のブロック毎動きベクトルから求められた平行移動量や回転角度を用いたとしても、精度が足りないおそれがある。
【０１３３】
そこで、この実施形態では、この点にかんがみ、さらに、より高精度で平行移動量や回転角度を算出し、その高精度の平行移動量および回転角度を用いてフレーム画像の重ね合わせができるように考慮している。
【０１３４】
前述もしたように、動被写体などのために、一つの参照フレームについて求められた複数のブロック毎動きベクトルのすべてが、手ぶれベクトルの検出という観点からは信頼性の高いものとなっているわけではない。
【０１３５】
そこで、この実施形態では、一つの参照フレームについて求められた複数のブロック毎動きベクトルについて、次のようにして信頼性の判定を行い、信頼性が高いと判定されたブロック毎動きベクトルのみを用いて平行移動量および回転角度の算出を行うことにより、算出される平行移動量および回転角度の精度を向上させるようにしている。
【０１３６】
すなわち、この実施形態では、手ぶれによる画面全体の動きベクトルではない動被写体による動きベクトル成分を、できるだけ排除することにより、より精度の高い平行移動量および回転角度の算出ができるようにしている。
【０１３７】
そのために、この実施形態では、当該参照フレームについて算出したグローバル動きベクトル、この例では合算ＳＡＤテーブルから求めたグローバル動きベクトル（以下、これを合算動きベクトルという）ＳＵＭ＿Ｖと、各ターゲットブロックについてのＳＡＤテーブルＴＢＬｉ（ｉ＝０，１，２，・・・，１５）から求められたブロック毎動きベクトルＢＬＫ＿Ｖｉとを比較して、両者が同一または近似している信頼性が高いブロック毎動きベクトルを探す。
【０１３８】
信頼性の高いブロック毎動きベクトルの数が少なく、予め定めた閾値未満であるときには、この実施形態では、当該フレームは重ね合わせるフレームとは用いないと決定して、この実施形態における静止画処理を、当該フレームについてはスキップして、次のフレームの処理に移行する。
【０１３９】
信頼性の高いブロック毎動きベクトルの数が、前記閾値以上であるときには、当該信頼性の高いブロック毎動きベクトルが算出されたターゲットブロックについてのＳＡＤテーブルから、後述するような１画素未満の精度の高精度ブロック毎動きベクトルの算出を行う。そして、算出した高精度ブロック毎動きベクトルのみを用いて、前述した平行移動量の算出および回転角度の検出を行う。
【０１４０】
この場合において、平行移動量の算出の際には、上述の第１の例および第２の例を用いることができる。
【０１４１】
例えば上述の第２の例を用いる場合においては、図５に示す１６個の検波枠のうちの、信頼性の高い検波枠番号ｉの検波枠のみについて求められた高精度ブロック毎動きベクトルを用いて平行移動量を算出するのである。ただし、この実施形態では、平行移動量の算出に当たっては、信頼性が低く平行移動量の算出から除外された検波枠番号ｑの検波枠のみではなく、当該除外された検波枠番号ｑに対して、すべての検波枠の中心Ｏｃに対して点対称の位置にある検波枠番号（１５−ｑ）の検波枠のブロック毎動きベクトルも、平行移動量の算出対象から除外する。
【０１４２】
これは、この実施形態では、フレームの回転を考慮しているため、中心Ｏｃに対して点対称の位置にある一方の検波枠のブロック毎動きベクトルの信頼性が低いとして、それを平行移動量の演算対象から除外したときには、点対称の位置にある他方のブロック毎動きベクトルをも平行移動量の演算対象から除外しないと、平行移動量の算出結果に誤差が生じてしまうことになるからである。
【０１４３】
これに対して、回転角度の演算時には、信頼性が低いとされた検波枠のブロック毎動きベクトルのみを、回転角度の演算対象から除外するだけで、その除外した検波枠と点対称の位置にある検波枠の高精度ブロック毎動きベクトルは、回転角度の演算対象に含めるようにする。
【０１４４】
以上のようにして、信頼性の高い検波枠のみを用いてフレームの平行移動量および回転角度を算出することにより、高精度で平行移動量および回転角度を算出することができると期待できる。
【０１４５】
以上説明したフレーム単位の信頼性の判定、つまり、フレーム内複数ブロック毎動きベクトルの信頼性の判定は、次のようにして行う。
【０１４６】
まず、元フレームに設定された複数個、この例では１６個のターゲットブロックＴＧｉ（ｉ＝０，１，２，・・・，１５）のそれぞれに対するＳＡＤテーブルＴＢＬｉを求め、その最小ＳＡＤ値ＭＩＮｉの座標位置からブロック毎動きベクトルＢＬＫ＿Ｖｉ（図１２（Ａ）参照）を求める。次に、前述した（式３）にしたがって、１６個のＳＡＤテーブルＴＢＬｉから合算ＳＡＤテーブルＳＵＭ＿ＴＢＬを求め、その最小ＳＡＤ値ＭＩＮｓの座標位置から合算動きベクトルＳＵＭ＿Ｖ（図１２（Ｂ）参照）を求める。
【０１４７】
次に、この実施形態においては、合算動きベクトルＳＵＭ＿Ｖ、すなわち、合算ＳＡＤテーブルＳＵＭ＿ＴＢＬの最小ＳＡＤ値ＭＩＮｓの座標位置を基準に、１６個のターゲットブロックのそれぞれの動きベクトルＢＬＫ＿Ｖｉ（すなわち、合算ＳＡＤテーブルＳＵＭ＿ＴＢＬの最小ＳＡＤ値ＭＩＮｓの座標位置）と、それぞれのＳＡＤ値とから、当該１６個のターゲットブロックのそれぞれについて、図１３に示すような条件の判定を行い、図１３に示すようなラベル付けおよびスコア（評価点）の算出を行う。
【０１４８】
図１４に、このラベル付けおよびスコア算出の処理の一例のフローチャートを示す。この図１４の処理は、１枚の参照フレームについての処理であり、この図１４の処理が１フレーム毎に繰り返されるものである。
【０１４９】
まず、ラベル付けおよびスコアの算出を行う対象ターゲットブロックについて求められた動きベクトルＢＬＫ＿Ｖｉと、合算動きベクトルＳＵＭ＿Ｖとが等しいかどうかを第１の条件とする判定をする（ステップＳ１１）。これは、対象ターゲットブロックのＳＡＤテーブルＴＢＬｉの最小ＳＡＤ値ＭＩＮｉの座標位置と、合算ＳＡＤテーブルＳＵＭ＿ＴＢＬの最小ＳＡＤ値ＭＩＮｓの座標位置が等しいか否かを条件判定することに等しい。
【０１５０】
対象ターゲットブロックについて、この第１の条件に合致すると判定されると、当該対象ターゲットブロックについは「ＴＯＰ」というラベルが付与され、この例では最大のスコア値として「４」が割り当てられる（ステップＳ１２）。
【０１５１】
対象ターゲットブロックについて、第１の条件には合致しないと判定されると、第２の条件に合致するかどうかの判定をする（ステップＳ１３）。この第２の条件は、対象ターゲットブロックについて求められた動きベクトルＢＬＫ＿Ｖｉと、合算動きベクトルＳＵＭ＿Ｖとが同一ではないが、ＳＡＤテーブル上で最も隣接するものとなっているかどうかであり、具体的には、対象ターゲットブロックのＳＡＤテーブルＴＢＬｉの最小ＳＡＤ値ＭＩＮｉの座標位置と、合算ＳＡＤテーブルＳＵＭ＿ＴＢＬの最小ＳＡＤ値ＭＩＮｓの座標位置が、上下、左右、斜めの方向に１座標値だけ異なる隣接するものであるかどうかである。
【０１５２】
対象ターゲットブロックについて、この第２の条件に合致すると判定されると、当該対象ターゲットブロックについは「ＮＥＸＴ＿ＴＯＰ」というラベルが付与され、この例ではスコア値として「２」が割り当てられる（ステップＳ１４）。
【０１５３】
対象ターゲットブロックについて、第２の条件には合致しないと判定されると、第３の条件に合致するかどうかの判定をする（ステップＳ１５）。この第３の条件は、対象ターゲットブロックのＳＡＤテーブルにおいて、動きベクトルＢＬＫ＿Ｖｉとなる座標位置のＳＡＤ値（最小ＳＡＤ値ＭＩＮｉ）と、合算動きベクトルＳＵＭ＿Ｖとなる合算ＳＡＤテーブル上の座標位置（最小ＳＡＤ値ＭＩＮｓの座標位置）に対応する座標位置のＳＡＤ値との差が、所定の閾値以下であるかどうかである。ここで、所定の閾値は、１画素あたりに換算したときの閾値とすることが望ましい。これは、この実施形態では、１画素精度の手ぶれ補正を想定しているためである。
【０１５４】
対象ターゲットブロックについて、この第３の条件に合致すると判定されると、当該対象ターゲットブロックについは「ＮＥＡＲ＿ＴＯＰ」というラベルが付与され、この例ではスコア値として「１」が割り当てられる（ステップＳ１６）。
【０１５５】
対象ターゲットブロックについて、第３の条件には合致しないと判定されると、当該対象ターゲットブロックについは「ＯＴＨＥＲＳ」というラベルが付与され、この例ではスコア値として「０」が割り当てられる（ステップＳ１７）。
【０１５６】
ステップＳ１２、ステップＳ１４、ステップＳ１６およびステップＳ１７のラベル付けおよびスコアの割り当てが終了した後には、割り当てられたスコアを累積加算して、合計スコアｓｕｍ＿ｓｃｏｒｅを算出する（ステップＳ１８）。
【０１５７】
次に、１フレーム内の１６個のすべてのターゲットブロックについて上記の処理が終了したか否かを判別し（ステップＳ１９）、終了していなければ、次のターゲットブロックのラベル付けおよびスコア算出を指示し（ステップＳ２０）、その後、ステップＳ１１に戻って、上述した処理を繰り返す。
【０１５８】
１フレーム内の１６個のすべてのターゲットブロックについて上記の処理が終了したと判別したときには、この１フレーム内の１６個のターゲットブロックについてラベル付けおよびスコア算出の処理ルーチンを終了する。このときにステップＳ１８で算出されている合計スコアｓｕｍ＿ｓｃｏｒｅは、１６個のターゲットブロックのすべてのスコアの合計となっている。
【０１５９】
なお、図１４のフローチャートは一例であり、第１の条件、第２の条件および第３の条件の合致判定は、順序不動であり、いずれを先に行ってもよい。
【０１６０】
以上のような１フレーム内の１６個のターゲットブロックについてラベル付けおよびスコア算出の処理ルーチンが終了したら、算出した合計スコアｓｕｍ＿ｓｃｏｒｅと、信頼性についての閾値とを比較する。このとき、合計スコアｓｕｍ＿ｓｃｏｒｅが閾値よりも小さいときには、当該フレームで求められる動きベクトルは、グローバル動きベクトルの検出のためには信頼性が低いと判定することができる。
【０１６１】
あるいは、第１の条件および第２の条件を満足するため信頼性が高いとして付与された、ラベルが「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のターゲットブロックのブロック毎動きベクトルの数を算出し、その数が、予め定められた閾値数未満であるときに、当該フレームで求められる動きベクトルは、グローバル動きベクトルの検出のためには信頼性が低いと判定するようにしてもよい。
【０１６２】
合計スコアｓｕｍ＿ｓｃｏｒｅが閾値以上であること、あるいはラベルが「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のターゲットブロックのブロック毎動きベクトルの数が予め定められた閾値数以上であることは、当該フレームで求められるグローバル動きベクトルの検出は、一応の信頼性が得られると判定できることになる。
【０１６３】
したがって、合計スコアｓｕｍ＿ｓｃｏｒｅが閾値以上であると判定されたとき、または、ラベルが「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のターゲットブロックのブロック毎動きベクトルの数が予め定められた閾値数以上であるときには、高い第１の条件および第２の条件を満足する信頼性の高いターゲットブロック（ラベル「ＴＯＰ」およびラベル「ＮＥＸＴ＿ＴＯＰ」）のＳＡＤテーブルのＳＡＤ値のみを用いて合算ＳＡＤテーブルを再度生成して、その再度生成した合算ＳＡＤテーブルに基づいてグローバル動きベクトルとしての合算動きベクトルを再度算出し、その再算出した合算動きベクトルからフレームの平行移動量および回転角度を算出するようにすることができる。
【０１６４】
このときに求めるグローバル動きベクトルとしては、合算ＳＡＤテーブルから求める合算動きベクトルに限られるものではなく、例えば信頼性の高いブロック毎動きベクトルについて多数決をとることにより得られるものであっても良い。
【０１６５】
また、上述したように、グローバル動きベクトルから平行移動量および回転角を算出するのではなく、信頼性の高いラベル「ＴＯＰ」およびラベル「ＮＥＸＴ＿ＴＯＰ」のブロック毎動きベクトルのみを用いて、図６〜図８を用いて説明した（式４）〜（式１０）に基づいて、平行移動量（α，β）および回転角度γを求めることができる。
【０１６６】
上述もしたように、この実施形態では、信頼性の高いラベル「ＴＯＰ」およびラベル「ＮＥＸＴ＿ＴＯＰ」のブロック毎動きベクトルのみを用いて平行移動量（α，β）および回転角度γを算出する方法を採用する。
【０１６７】
しかし、この実施形態では、より高い信頼性を得るために、さらに次のような処理を施すようにする。
【０１６８】
すなわち、この実施形態では、各ターゲットブロックに対するサーチ範囲を、徐々に絞り込んで、ブロックマッチング処理（ここでは、参照フレーム全体についてのブロックマッチングを検波と呼ぶことにする）を複数段階行うようにする。以下の実施形態では、ブロックマッチング（検波）は、２段階で行う。
【０１６９】
そして、図１５（Ａ）に示すように、各ターゲットブロックＴＧｉ毎の１回目のサーチ範囲ＳＲ＿１は最大にして、上述のような複数個のブロック毎動きベクトルＢＬＫ＿Ｖｉを求める。そして、１回目の検波が終了して複数個のターゲットブロックについてのブロック毎動きベクトルを算出したら、それらの複数個のブロック毎動きベクトルを評価して、評価値の高いブロック毎動きベクトルを探索し、その評価値の高いブロック毎動きベクトルのみを用いて、前述した（式４）および（式５）を実行し、１回目の平行移動量（α，β）を求める。そして、この１回目の平行移動量から、各ターゲットブロックについての２回目のサーチ範囲を定める。
【０１７０】
あるいは、評価値の高いブロックのみからグローバル動きベクトル（手ぶれベクトル）を算出し、そのグローバル動きベクトルから１回目の平行移動量を算出し、その１回目の平行移動量から、各ターゲットブロックについての２回目のサーチ範囲を定めるようにしてもよい。
【０１７１】
図１５（Ａ）に示すように、１回目の処理で設定されたサーチ範囲ＳＲ＿１において、各ターゲットブロックＴＧｉについての動きベクトルＢＬＫ＿Ｖｉが算出され、それら複数個のブロック毎動きベクトルから平行移動量が算出され、あるいはグローバル動きベクトルから平行移動量が算出されると、その算出された平行移動量から、参照フレームと元フレームとの間で、相関のあるブロック範囲がおおよそ検出できる。
【０１７２】
そこで、各ターゲットブロックについての２回目の検波処理のサーチ範囲ＳＲ＿２としては、図１５（Ｂ）に示すように、その相関のあるブロック範囲を中心とした、１回目よりも狭い範囲に絞ったサーチ範囲を設定することができる。この場合、図１５（Ｂ）に示すように、１回目のサーチ範囲ＳＲ＿１の中心位置ＰＯｉ＿１と、２回目のサーチ範囲ＳＲ＿２の中心位置ＰＯｉ＿２との間の位置ずれ（サーチ範囲オフセット）が、１回目で検出された平行移動量（グローバル動きベクトルに対応）に相当している。
【０１７３】
このように、各ターゲットブロックに対して、絞り込んだサーチ範囲ＳＲ＿２として検波処理をすることにより、２回目の検波の結果は、１段階検波処理よりも高精度のブロックマッチング結果が得られる。
【０１７４】
そこで、この実施形態では、この２回目の検波で得られたブロック毎動きベクトルのうちで、高評価のブロック毎動きベクトルを用いて、上述のようにして、フレームについての平行移動量および回転角度の算出を行うことにより、高精度の平行移動量および回転角度を得ることができる。
【０１７５】
ところで、この実施形態で用いる合算ＳＡＤテーブルは、ブロック毎のＳＡＤテーブルではなく、フレーム全体をまとめてブロックマッチングした結果とほぼ等価である。通常の被写体においては、従来技術で説明した多数決により勝ち残った動きベクトル、つまり多数決トップの動きベクトルと、合算ＳＡＤテーブルから求められる合算動きベクトルは、等しいものとなる。しかし、複数枚のフレームを重ね合わせる場合において、他人がフラッシュを炊いたりしてフレーム全体が明滅する場合や水面の波面等の被写体の場合、多数決の結果は、信頼性が低く、ランダムに近い動きベクトルとなるのに対し、合算動きベクトルは、比較的正解に近い結果を導き出す可能性が高い。
【０１７６】
したがって、合算ＳＡＤテーブルから求めた合算動きベクトルと、多数決により決定したグローバル動きベクトルという、両者の結果を比較することにより、少なくとも、現在のフレームの結果の信頼性を、定量的に判定することが可能となる。従来提案では、各ブロックの動きベクトルの信頼性を判定することに主眼が置かれていたが、この実施形態では、フレーム全体の信頼性を重視し、疑わしきは重ね合わせ対象から除外する、という方針のもと、違和感の少ない、安定した手ぶれ補正システムを実現する点が特徴である。
【０１７７】
この点を考慮して、この実施形態の一つの方法では、従来のブロックマッチングの場合と同様に、１６個のターゲットブロックについて検出されたブロック毎動きブロックＢＬＫ＿Ｖｉについて多数決を取り、多数決トップ（大きさおよび方向が同一または同等であるブロック毎動きベクトルの数が最大）の動きベクトルを算出する。
【０１７８】
そして、この検出した多数決トップの動きベクトルを、図１３における合算動きベクトルに代わる基準として用いて、１６個のターゲットブロックについて検出されたブロック毎動きブロックＢＬＫ＿Ｖｉと、それぞれのＳＡＤ値とから、図１３に示したようなラベル付けおよびスコア割り当てを行う。
【０１７９】
これは、図１３において、合算動きベクトルＳＵＭ＿Ｖに代えて、多数決トップの動きベクトルが用いられることに等しい。
【０１８０】
すなわち、第１の条件は、ラベル付けおよびスコアの算出を行う対象ターゲットブロックについて求められた動きベクトルＢＬＫ＿Ｖｉと、多数決トップの動きベクトルとが等しいかどうかである。つまり、対象ターゲットブロックのＳＡＤテーブルＴＢＬｉの最小ＳＡＤ値ＭＩＮｉの座標位置と、多数決トップの動きベクトルとなる座標位置とが等しいか否かを条件判定するものである。
【０１８１】
また、第２の条件は、対象ターゲットブロックについて求められた動きベクトルＢＬＫ＿Ｖｉと、多数決トップの動きベクトルとが同一ではないが、ＳＡＤテーブル上で最も隣接するものとなっているかどうかであり、具体的には、対象ターゲットブロックのＳＡＤテーブルＴＢＬｉの最小ＳＡＤ値ＭＩＮｉの座標位置と、多数決トップの動きベクトルに対応する座標位置とが、上下、左右、斜めの方向に１座標値だけ異なる隣接するものであるかどうかである。
【０１８２】
また、第３の条件は、対象ターゲットブロックのＳＡＤテーブルにおいて、動きベクトルＢＬＫ＿Ｖｉとなる座標位置のＳＡＤ値（最小ＳＡＤ値ＭＩＮｉ）と、多数決トップの動きベクトルに対応するＳＡＤテーブル上の座標位置のＳＡＤ値との差が、所定の閾値以下であるかどうかである。
【０１８３】
以上のようにして、１フレームについての１６個のターゲットブロックについての動きベクトルについて、その多数決トップの動きベクトルを基準にしたラベル付けおよびスコア割り当てを行う。そして、割り当てられたスコアの合計スコアｍａｎｙ＿ｓｃｏｒｅを算出する。
【０１８４】
そして、この実施形態では、合算動きベクトルＳＵＭ＿Ｖに対応する最小ＳＡＤ値の座標位置と、多数決トップの動きベクトルに対応するＳＡＤ値の座標位置との差が所定以内、例えば前記差が１隣接画素以内であって、前記合計スコアｓｕｍ＿ｓｃｏｒｅが所定の閾値以上、かつ、前記合計スコアｍａｎｙ＿ｓｃｏｒｅが所定の閾値以上、であるときに、当該フレームについて求められる動きベクトルは信頼性が高いと判定する。
【０１８５】
逆に、合算動きベクトルＳＵＭ＿Ｖに対応する最小ＳＡＤ値の座標位置と、多数決トップの動きベクトルに対応するＳＡＤ値の座標位置との差が所定以内、例えば前記差が１隣接画素以内でないときには、当該フレームからは信頼性の高い手ぶれベクトルが検出できないと判定して、当該フレームは、複数枚のフレームの重ね合わせ対象から除外する。
【０１８６】
また、合計スコアｓｕｍ＿ｓｃｏｒｅが所定の閾値未満、または、前記合計スコアｍａｎｙ＿ｓｃｏｒｅが所定の閾値未満であるときにも、当該フレームからは信頼性の高い手ぶれベクトルが検出できないと判定して、当該フレームは、複数枚のフレームの重ね合わせ対象から除外する。
【０１８７】
そして、前記ように信頼性が高いと判定されたときにのみ、この例では、合算動きベクトルを基準にしてラベル付けされたターゲットブロックのラベルのうち、「ＴＯＰ」および「ＮＥＸＴ＿Ｔｏｐ」が付与されたターゲットブロックについてのＳＡＤテーブルのＳＡＤ値のみを用いて、再合算ＳＡＤテーブルＲＳＵＭ＿ＴＢＬを生成する。
【０１８８】
そして、この再合算ＳＡＤテーブルＲＳＵＭ＿ＴＢＬの最小ＳＡＤ値およびその近傍座標位置のＳＡＤ値について、近似曲面補間を適用してグローバル動きベクトル（合算動きベクトル）を算出するものである。そして、算出した合算動きベクトルを用いて２回目検波の際のサーチ範囲を決定し、あるいは、平行移動量および回転角度を算出する。
【０１８９】
または、「ＴＯＰ」および「ＮＥＸＴ＿Ｔｏｐ」が付与されたターゲットブロックについてのブロック毎動きベクトルのみを用いて、前記（式４）、（式５）を用いて、平行移動量を算出して２回目検波の際のサーチ範囲を決定し、または、前記（式４）〜前記（式１０）を基にした演算をして、平行移動量および回転角度を算出する。
【０１９０】
なお、従来から提案されている、時間軸方向の動きベクトルの周波数から、動きベクトル（グローバル動きベクトル）を予測する手法と、上述したこの発明の実施形態の手法とを組み合わせることにより、更なる信頼性並びに精度の向上を図るようにしても良い。
【０１９１】
上述したように、この実施形態では、１フレーム内の複数個のターゲットブロックのそれぞれについて、ＳＡＤテーブルを生成し、ブロック毎動きベクトルを算出するようにする。この場合に、この実施形態では、現在の５００万画素オーバーの撮像素子を用いる撮像装置に適用しようとすると、１画面分の画素数に比例してＳＡＤテーブルの規模が増加するため、現実的な回路規模で実現するのが困難であるという問題がある。
【０１９２】
実現できるレベルの現実的な提案としては、前述した特許文献３（特開２００５−３８３９６公報）を挙げることができる。この特許文献３に示されたものは、画像を縮小変換したサイズで動ベクトルを求める手段と、同一のＳＡＤテーブルを複数のブロックで共有する手段から構成される。画像の縮小変換と、ＳＡＤテーブルの複数ブロックでの共有化は、ＳＡＤテーブルサイズの削減を実現するための、非常に良い手法であり、ＭＰＥＧ（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）画像圧縮方式における動きベクトル検出やシーンチェンジ検出等、他分野でも使われている。
【０１９３】
しかし、この特許文献３のアルゴリズムの問題点として、画像の縮小変換と、その際のメモリ（ＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）））アクセスに、時間とメモリ容量を消費することと、ＳＡＤテーブルを複数ブロックで時分割アクセスする手法のため、メモリアクセスが非常に増加し、この処理にも時間を要してしまうという課題がある。動画の手ぶれ補正においては、リアルタイム性と同時にシステム遅延時間の短縮が求められるため、この処理時間の問題が課題となってしまうのである。
【０１９４】
多人数評価の結果、例えば３フレーム／秒（３ｆｐｓ）の静止画の場合における手ぶれ範囲は、全フレームを１００%として±１０％程度であることが判明している。既に高級機では世に出ている１２００万画素を仮定し、現状で提案されている技術のまま、必要なＳＡＤテーブルサイズを見積もると、約８０メガビットである。しかも、現実的な処理速度を満たそうとすると、このＳＡＤテーブル情報を格納するメモリは、内蔵ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））であることが求められる。半導体プロセスルールが進んだとは言え、このサイズは、ほぼ３桁程度、現実的なレベルからはかけ離れている。
【０１９５】
また、元画像を縮小変換する際には、エイリアシング（折り返し歪み）や、低照度ノイズ除去のためのローパスフィルタを、縮小処理の前処理として実装するが必要である。しかし、縮小倍率に応じて、ローパスフィルタの特性が変化する上、特に、垂直方向のローパスフィルタの場合、多タップのデジタルフィルタとした場合に、多くのラインメモリと演算ロジックを必要としなければならず、回路規模増加の問題が生じる。
【０１９６】
そこで、この実施形態では、以上の点にかんがみ、ブロックマッチングを用いて２フレーム間のグローバル動きベクトルを算出する場合において、ＳＡＤテーブルサイズの大幅な削減が可能である画像処理方法および装置を用いる。
【０１９７】
また、特許文献３に記載された画像の縮小変換によるＳＡＤテーブルの削減手法に関して、画像の縮小変換に伴う処理時間の増大並びにメモリ容量の消費と、画像の縮小変換に伴うエイリアシング回避のための適切なローパスフィルタの実装に伴う回路増大という、２つの問題を提起した。この実施形態では、これらの問題点をも解決することができるようにしている。
【０１９８】
すなわち、この実施形態では、ターゲットブロックと参照ブロック間において求められるＳＡＤ値を、参照ブロックの参照ベクトルに対応して記憶するのではなく、当該参照ベクトルを縮小し、その縮小した参照縮小ベクトルに対応する、当該参照縮小ベクトルの近傍の複数の参照ベクトルに分散加算して記憶するようにする。
【０１９９】
これにより、従来のＳＡＤテーブルに比較して、ＳＡＤテーブルのサイズを大幅に縮小すると共に、画像の縮小変換に伴う処理時間の増大並びにメモリ容量の消費と、画像の縮小変換に伴うエイリアシング回避のための適切なローパスフィルタの実装に伴う回路増大という、２つの問題を解決するようにしている、
図１６〜図１８は、この実施形態で用いる新規なブロックマッチング方法の概要を説明するための図である。図１６は、従来のＳＡＤテーブルＴＢＬｏと、実施形態の画像処理方法において生成される縮小ＳＡＤテーブルＴＢＬｓとの関係を示すものである。
【０２００】
この実施形態においても、図８１に示したように、従来と同様に参照フレームにおいて、元フレームに設定された複数個、この例では１６個のターゲットブロックの位置のそれぞれを中心として複数個のサーチ範囲が設定される。そして、この複数個のサーチ範囲のそれぞれにおいて、前述したような複数の参照ブロックが設定され、各参照ブロック内の画素とターゲットブロック内の対応する画素の輝度値の差分の絶対値の総和、つまり、ＳＡＤ値が求められる。
【０２０１】
従来は、求められたＳＡＤ値は、図１６に示すように、対象となっている参照ブロックの参照ベクトルＲＶに対応するアドレスのテーブル要素ｔｂｌとしてＳＡＤテーブルＴＢＬｏに書き込まれる。
【０２０２】
したがって、従来のブロックマッチングでは、ターゲットブロックと参照ブロックとのフレーム画像上における位置ずれ量を表わす参照ベクトルＲＶと、ＳＡＤテーブルＴＢＬｏの各テーブル要素である参照ブロックのＳＡＤ値とは、１対１に対応している。すなわち、従来のＳＡＤテーブルＴＢＬｏでは、サーチ範囲で取り得る参照ベクトルＲＶと等しい数のＳＡＤ値のテーブル要素数を備えるものとなっている。
【０２０３】
これに対して、この実施形態におけるブロックマッチングでは、図１６および図１７（Ａ）、（Ｂ）に示すように、対象となっている参照ブロックの参照ベクトルＲＶは、縮小率１／ｎ（ｎは自然数）で縮小されて参照縮小ベクトルＣＶとされる。
【０２０４】
ここで、以下の説明においては、説明の便宜上、水平方向縮小倍率と垂直方向の縮小倍率とを同じとしているが、水平方向縮小倍率と垂直方向の縮小倍率とは独立の異なる値でも良い。また、後で述べるが、水平方向縮小倍率と垂直方向の縮小倍率とを独立に任意の自然数分の１として設定できるようにしておく方が、柔軟性も高く好都合である。
【０２０５】
この実施形態においても、前述の従来例で説明したのと同様に、サーチ範囲の中心とされるターゲットブロックの位置を基準位置（０，０）とし、参照ベクトルは、当該基準位置からの画素単位の水平方向および垂直方向のずれ量（ｖｘ，ｖｙ）（ｖｘ、ｖｙは、整数）を指し示すものとされ、参照ベクトルＲＶのそれぞれは、参照ベクトル（ｖｘ，ｖｙ）で表される。
【０２０６】
参照ベクトル（ｖｘ，ｖｙ）が、水平方向および垂直方向のそれぞれについて１／ｎに縮小された参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）で示される位置（ｖｘ／ｎ，ｖｙ／ｎ）は、整数ではなく、小数成分が発生することがある。このため、この実施形態では、縮小前の元の参照ベクトルＲＶに対応して求められたＳＡＤ値を、参照縮小ベクトルＣＶに最も近い１つの参照ベクトルに対応するテーブル要素として記憶してしまうと誤差が生じることになる。
【０２０７】
そこで、この実施形態では、まず、参照縮小ベクトルＣＶで示される位置（ｖｘ／ｎ，ｖｙ／ｎ）の近傍の複数の参照ベクトルで示される複数の位置（テーブル要素）を検出する。そして、参照ベクトルＲＶの参照ブロックについて求められたＳＡＤ値は、その検出した近傍の複数の参照ベクトルに対応するＳＡＤ値に分散して加算するようにする。
【０２０８】
この場合に、この実施形態では、参照縮小ベクトルＣＶで示される位置の近傍の周囲の複数個の参照ベクトルで示される位置に対応するテーブル要素ｔｂｌに書き込むべき成分として分散加算する値は、縮小前の元の参照ベクトルＲＶに対応して求められたＳＡＤ値から、参照縮小ベクトルとその近傍の参照ベクトルとのそれぞれが示す位置の関係を用いて、前記近傍の参照ベクトルのそれぞれに対応して分散加算するＳＡＤ値を算出し、算出したＳＡＤ値のそれぞれを、対応する参照ベクトルのテーブル要素成分として加算するようにする。
【０２０９】
ここで、分散するだけでなく加算するというのは、参照縮小ベクトルの近傍の複数の参照ベクトルは、異なる複数の参照縮小ベクトルについて重複して検出されることになるので、１つの参照ベクトルについて、重複したＳＡＤ値は加算するという意味である。
【０２１０】
なお、参照縮小ベクトルＣＶが示す位置（ｖｘ／ｎ，ｖｙ／ｎ）が、参照ベクトルが示す位置に一致する場合、つまり、ｖｘ／ｎおよびｖｙ／ｎの値が整数であるときには、周辺の複数の参照ベクトルを検出する必要はなく、当該位置（ｖｘ／ｎ，ｖｙ／ｎ）を示す参照ベクトルに対応して、縮小前の元の参照ベクトルＲＶに対応して求められたＳＡＤ値を記憶するようにするものである。
【０２１１】
次に、具体例を挙げて、以上の処理を説明する。例えば、ターゲットブロックの位置を基準（０，０）としたときに、図１７（Ａ）に示すように、（−３，−５）の位置を示す参照ブロックＲＶを、水平方向および垂直方向に、１／ｎ＝１／４倍に縮小すると、その参照縮小ベクトルＣＶで示される位置は、図１７（Ｂ）に示すように、（−０．７５，−１．２５）となる。
【０２１２】
したがって、参照縮小ベクトルＣＶで示される位置は小数成分が発生し、参照ベクトルで示される位置とは一致しない。
【０２１３】
そこで、この場合には、図１８に示すように、当該参照縮小ベクトルＣＶが示す位置の近傍位置を示す複数個の近傍参照ベクトルが検出される。図１８の例では、１つの参照縮小ベクトルＣＶに対して、４個の近傍参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４が検出される。
【０２１４】
そして、前述したように、この実施形態では、参照ベクトルＲＶの参照ブロックについて求められたＳＡＤ値は、これら４個の近傍参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４に対応するＳＡＤ値として分散加算される。
【０２１５】
この場合に、この実施形態では、４個の近傍参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４のそれぞれに分散加算するＳＡＤ値は、参照縮小ベクトルＣＶで示される位置Ｐ０（図１８において×印として示す）と、４個の近傍参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４のそれぞれで示される位置Ｐ１，Ｐ２，Ｐ３，Ｐ４（図１８において○印として示す）との位置関係を用いて線形加重分散値として算出する。
【０２１６】
図１８の例の場合には、参照縮小ベクトルＣＶで示される位置Ｐ０は、周辺近傍の４個の参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４のそれぞれで示される位置Ｐ１，Ｐ２，Ｐ３，Ｐ４を、水平方向に１：３、垂直方向に３：１に内分する位置にある。
【０２１７】
そこで、縮小前の元の参照ベクトルＲＶに対応して求められたＳＡＤ値をＳαとしたとき、周辺近傍の４個の参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４のそれぞれで示される位置Ｐ１，Ｐ２，Ｐ３，Ｐ４に対応するＳＡＤテーブル要素に分散加算する値ＳＡＤｐ１，ＳＡＤｐ２，ＳＡＤｐ３，ＳＡＤｐ４のそれぞれは、
ＳＡＤｐ１＝Ｓα×９／１６
ＳＡＤｐ２＝Ｓα×３／１６
ＳＡＤｐ３＝Ｓα×３／１６
ＳＡＤｐ４＝Ｓα×１／１６
となる。
【０２１８】
そして、この実施形態では、求められた値ＳＡＤｐ１，ＳＡＤｐ２，ＳＡＤｐ３，ＳＡＤｐ４のそれぞれを、近傍の４個の参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４のそれぞれで示される位置Ｐ１，Ｐ２，Ｐ３，Ｐ４に対応するＳＡＤテーブル要素にそれぞれ加算する。
【０２１９】
この実施形態では、以上の処理を、サーチ範囲内のすべての参照ブロックについて行なう。
【０２２０】
以上のことから、この実施形態では、参照ベクトルＲＶを１／ｎに縮小する場合には、全ての参照ベクトルに１対１に対応する従来サイズのＳＡＤテーブルＴＢＬｏに対して、水平方向に１／ｎ、また、垂直方向に１／ｎに縮小した縮小ＳＡＤテーブルＴＢＬｓを用意して、この縮小ＳＡＤテーブルＴＢＬｓのテーブル要素として、参照縮小ベクトルＣＶの近傍の参照ベクトルに対応するＳＡＤ値を求めるようにすれば良い（図１６参照）。
【０２２１】
したがって、この実施形態の場合には、縮小ＳＡＤテーブルＴＢＬｓのテーブル要素の数は、従来のＳＡＤテーブルＴＢＬｏのテーブル要素数の１／ｎ２となり、テーブルサイズを大幅に小さくすることが可能である。
【０２２２】
なお、上述の実施形態の説明においては、参照縮小ベクトルＣＶの近傍の４個の参照ベクトルを検出し、当該４個の近傍参照ベクトルに対応するＳＡＤテーブル要素に対して、対照の参照ブロック（参照ベクトルＲＶ）について算出したＳＡＤ値を線形加重分散加算するようにしたが、参照縮小ベクトルＣＶの近傍の複数の参照ベクトルの選び方およびその近傍参照ベクトルに対応するＳＡＤテーブル要素に対する分散加算の方法は、上述の例に限られるものではない。
【０２２３】
例えば、参照縮小ベクトルＣＶの近傍の９個もしくは１６個の参照ベクトルを検出し、当該９個もしくは１６個の近傍参照ベクトルに対応するＳＡＤテーブル要素に対して、いわゆるキュービック（Ｃｕｂｉｃ）補間による分散加算を行なうようにすれば、より精度は高くなる。しかし、リアルタイム性と演算回路の削減を重視すると、上述した近傍４個の参照ベクトルに対応するテーブル要素への線形加重分散加算が、より有効である。
【０２２４】
この実施形態においても、参照ブロックをサーチ範囲内で遍く移動させ、全ての参照ブロックのＳＡＤ値に対してＳＡＤテーブル（この実施形態では縮小ＳＡＤテーブル）への代入を行う点は、従来手法と同じである。
【０２２５】
ただし、従来は、参照ベクトルとＳＡＤテーブル要素のアドレスが１対１に対応していたため、ＳＡＤテーブルへは単なる代入で済んだが、この実施形態による手法では、参照ブロックについて算出したＳＡＤ値を分散加算させるため、縮小ＳＡＤテーブルにおいて、参照ベクトル（縮小参照ベクトル）とテーブルアドレスは１対１ではない。したがって、この実施形態の手法の場合には、ＳＡＤ値のテーブルアドレスへの単なる代入ではなく、加算して代入する、いわゆる代入加算である必要がある。また、そのため、ＳＡＤテーブル（縮小ＳＡＤテーブル）の各テーブル要素は、最初に初期化（０クリア）しておかなければならない。
【０２２６】
ところで、従来のブロックマッチングでは、以上のようにして完成させたＳＡＤテーブルにおいて、ＳＡＤ値が最小値となるテーブル要素を探索し、その最小値となるテーブル要素のテーブルアドレスを、参照ベクトルに変換すれば、動ベクトルの検出を完了した。
【０２２７】
これに対して、この実施形態による手法では、ＳＡＤテーブルは、参照ベクトルを縮小した縮小参照ベクトルに対応した縮小ＳＡＤテーブルであるため、当該縮小ＳＡＤテーブルの最小値がそのまま正確な動きベクトルには対応していない。
【０２２８】
もっとも、ある程度の誤差を許す装置の場合には、縮小ＳＡＤテーブルの最小値となるテーブル要素のテーブルアドレスを、参照ベクトルに変換したものを、さらに縮小率１／ｎの逆数倍、つまりｎ倍することで、動きベクトルを算出するようにすることもできる。
【０２２９】
しかし、より正確な動きベクトルを算出するようにする場合には、以下に説明するように、縮小ＳＡＤテーブルのテーブル要素値に対して補間処理を施すことで、元のベクトル精度で、正確な動きベクトル（ブロック毎動きベクトル）を検出するようにする。
【０２３０】
なお、上述の説明において、縮小参照ベクトルを用いない従来の参照ベクトルを用いるブロックマッチング手法を用いて複数個のターゲットブロックについてのＳＡＤテーブルを求め、そして、求めた複数個のＳＡＤテーブルの対応する座標位置のＳＡＤ値を合算することで合算ＳＡＤテーブルを求め、その合算ＳＡＤテーブルについて、近似曲線補間を行うことによりグローバル動きベクトルを算出することを記述したが、以下に説明する補間処理は、この場合の近似曲線補間として用いることができるものでもある。
【０２３１】
［より正確な動きベクトルを算出するための補間処理の第１の例］
より正確な動きベクトルを算出するための補間処理の第１の例は、縮小ＳＡＤテーブルにおける複数個のＳＡＤテーブル要素値（ＳＡＤ値）を、１つの２次曲面で近似する手法である。
【０２３２】
すなわち、縮小ＳＡＤテーブルにおいて、ＳＡＤ値が最小値となるテーブル要素（整数精度最小値テーブル要素（整数精度テーブルアドレス））と、この整数精度最小値テーブル要素を中心とする複数の整数精度テーブル要素とを求め、それらのテーブル要素のＳＡＤ値を用いて、最小自乗法によりＳＡＤ値の２次曲面を決定し、この２次曲面の最小値となるＳＡＤ値を検出し、当該検出した最小値となるＳＡＤ値に対応する位置（参照フレーム上において、基準位置に対してずれた位置）を検出し、当該検出した位置を小数精度の最小値テーブルアドレス（縮小ＳＡＤテーブルにおいてＳＡＤ値が最小値となるベクトル（最小値ベクトルという）に対応）とする。
【０２３３】
この場合、一意の２次曲面を定めるためには、図１９（Ａ）または（Ｂ）に示すように、整数精度最小値テーブル要素ｔｍと、当該テーブル要素ｔｍをその両側から挟む位置の、当該テーブル要素ｔｍの近傍の４個の整数精度テーブル要素ｔ１，ｔ２，ｔ３，ｔ４が最低限必要である。
【０２３４】
そして、図２０に示すように、参照フレームのサーチ範囲内の縮小ＳＡＤテーブルに対応する参照縮小ベクトルの範囲内において、ターゲットフレームの位置を基準位置（０，０）として、水平方向および垂直方向のずれ量（参照縮小ベクトルに対応）の軸ｖｘ／ｎおよび軸ｖｙ／ｎを考えると共に、これらの軸ｖｘ／ｎおよび軸ｖｙ／ｎに垂直な軸として、ＳＡＤ値の軸を考え、これら３軸からなる座標空間を想定する。
【０２３５】
そして、例えば、整数精度最小値テーブル要素ｔｍのＳＡＤ値と、当該整数精度最小値テーブル要素ｔｍを挟む２個のテーブル要素ｔ１、ｔ３のＳＡＤ値とから、図２０の座標空間において２次曲線を生成する。また、整数精度最小値テーブル要素ｔｍのＳＡＤ値と、当該最小値テーブル要素ｔｍを挟む他の２個のテーブル要素ｔ２、ｔ４のＳＡＤ値とから、図２０の座標空間において、他の２次曲線を生成する。そして、これら２個の２次曲線を含む２次曲面２０１を、最小自乗法により求め、その２次曲面２０１を、図２０に示すように、座標空間において生成する。
【０２３６】
そして、生成されたＳＡＤ値の２次曲面２０１の最小値２０２を検出し、その最小値を取るＳＡＤ値に対応する位置（ｖｘ／ｎ，ｖｙ／ｎ）（図２０の位置２０３）を検出し、当該検出した位置（ｖｘ／ｎ，ｖｙ／ｎ）を、小数精度のテーブル要素（テーブルアドレス）として検出する。そして、検出した小数精度テーブル要素に対応するベクトル（最小値ベクトル）２０４を、図２１に示すようにｎ倍して、元の大きさ精度の動きベクトル２０５を得る。
【０２３７】
例えば、図２２に示すように、参照ベクトルを１／４に縮小した場合における縮小ＳＡＤテーブルＴＢＬｓの、小数精度テーブル要素の最小値アドレスから求められる最小値ベクトル２０４が、（−０．７７７，−１．４９２）の場合に、これらを4倍した（−３．１０８，−５．９６８）が、動きベクトル２０５となる。この動きベクトル２０５は、元画像のスケールにおける動きベクトルを再現したものとなっている。
【０２３８】
以上の説明は、整数精度最小値テーブル要素ｔｍと、その近傍の４テーブル要素を用いた場合として説明したが、ＳＡＤ値の２次曲面を最小自乗法により求めるためには、より多くの複数近傍テーブル要素を用いたほうがよい。そこで、一般には、整数精度最小値テーブル要素ｔｍを中心として、その周囲の水平方向×垂直方向＝ｍ×ｍ個（ｍは３以上の整数）の矩形領域のテーブル要素を用いるようにする。
【０２３９】
しかし、この複数近傍テーブル要素の数は、多ければ良いというものではなく、広い範囲のテーブル要素を用いると、演算量の増加を招く上、画像パターンに依存するローカルミニマムの偽値を使用してしまう可能性も高まるので、適切な複数近傍テーブル要素の数からなる矩形領域のテーブル要素を用いるようにする。
【０２４０】
適切な複数近傍テーブル要素の数からなる矩形領域のテーブル要素の例として、この実施形態では、整数精度最小値テーブル要素ｔｍを中心として、その周囲の水平方向×垂直方向＝３×３個の矩形領域のテーブル要素を用いるようにする例と、整数精度最小値テーブル要素ｔｍを中心として、その周囲の水平方向×垂直方向＝３×３個の矩形領域のテーブル要素を用いるようにする例とについて説明する。
【０２４１】
［３×３個の矩形領域のテーブル要素を用いる例］
図２３に、整数精度最小値テーブル要素ｔｍを中心として、その周囲の水平方向×垂直方向＝３×３個の矩形領域（図２３で塗りを付して示してある）のテーブル要素を用いるようにする例を示す。
【０２４２】
この図２３の例の場合には、図２３（Ａ）に示すように、整数精度最小値テーブル要素ｔｍと、その近傍の８個の近傍テーブル要素のＳＡＤ値を用いて、図２３（Ｂ）に示すような２次曲面２０１を、最小自乗法により生成する。そして、生成されたＳＡＤ値の２次曲面２０１の最小値２０２を検出し、その最小値を取るＳＡＤ値に対応する位置（ｖｘ／ｎ，ｖｙ／ｎ）（図２３（Ｂ）の位置２０３）を検出し、当該検出した位置２０３を、小数精度の最小値テーブル要素位置（小数精度最小値テーブルアドレス）として検出する。
【０２４３】
そして、検出した小数精度テーブル要素位置２０３に対応するベクトル（最小値ベクトル）２０４を、前述した図２１に示すようにｎ倍して、元の大きさ精度の動きベクトル２０５を得る。
【０２４４】
ここで、ＳＡＤ値の２次曲面２０１の最小値２０２に対応する位置２０３の算出方法は、次のようになる。すなわち、図２１に示すように、整数精度最小値テーブル要素ｔｍの位置を原点（０，０）とする（ｘ，ｙ）座標を考える。この場合、周辺の８個のテーブル要素の位置は、３個のｘ軸方向の位置、すなわち、ｘ＝−１、ｘ＝０、ｘ＝１と、３個のＹ軸方向の位置、すなわち、ｙ＝−１、ｙ＝０、ｙ＝１との繰り合わせで表され、（−１，−１）、（０，−１）、（１，−１）、（−１，０）、（０，１）、（−１，１）、（０，１）、（１，１）の８位置となる。
【０２４５】
そして、図２４のテーブルにおける各テーブル要素のＳＡＤ値を、Ｓｘｙとする。したがって、例えば、整数精度最小値テーブル要素ｔｍ（位置（０，０））のＳＡＤ値はＳ００と表され、また、右下の位置（１，１）のテーブル要素値のＳＡＤ値はＳ１１と表される。
【０２４６】
すると、整数精度最小値テーブル要素ｔｍの位置を原点（０，０）とする（ｘ，ｙ）座標における小数精度の位置（ｄｘ、ｄｙ）は、図２５に示す（式Ａ）および（式Ｂ）により、求めることができる。
【０２４７】
図２５の（式Ａ）および（式Ｂ）において、
ｘ＝−１のとき、Ｋｘ＝−１
ｘ＝０のとき、Ｋｘ＝０
ｘ＝０のとき、Ｋｘ＝１
となる。また、
ｙ＝−１のとき、Ｋｙ＝−１
ｙ＝０のとき、Ｋｙ＝０
ｙ＝０のとき、Ｋｙ＝１
となる。
【０２４８】
こうして求められた小数精度の位置（ｄｘ，ｄｙ）は、整数精度最小値テーブル要素ｔｍの位置を原点（０，０）とする位置であるので、この小数精度の位置（ｄｘ，ｄｙ）と整数精度最小値テーブル要素ｔｍの位置とから、求めるサーチ範囲の中心位置からの位置２０３を検出することができる。
【０２４９】
［４×４個の矩形領域のテーブル要素を用いる例］
図２６に、整数精度最小値テーブル要素ｔｍをほぼ中心として、その周囲の水平方向×垂直方向＝４×４個の矩形領域のテーブル要素（図２６で塗りを付して示してある）を用いるようにする例を示す。
【０２５０】
この場合に、整数精度最小値テーブル要素ｔｍと、その近傍の８テーブル要素（３×３）や、その近傍の２４テーブル要素（５×５）のように、前記ｍの値が奇数である場合には、整数精度最小値テーブル要素ｔｍは、常に、使用する矩形領域の複数のテーブル要素の中心になるため、使用するテーブル範囲は単純に決定する。
【０２５１】
これに対して、近傍の１５テーブル要素（４×４）のように、ｍが偶数である場合には、整数精度最小値テーブル要素ｔｍは、使用する矩形領域の複数のテーブル要素の中心位置とはならないので、若干の工夫が必要となる。
【０２５２】
つまり、整数精度最小値テーブル要素ｔｍから見て、水平方向に左右の隣接テーブル要素のＳＡＤ値を比較し、小さい値となった側の方向の、当該方向の隣接テーブル要素に隣接するテーブル要素を近傍テーブル要素の４列目として採用する。同様に、垂直方向に上下の隣接テーブル要素のＳＡＤ値を比較し、小さい値となった側の方向の、当該方向の隣接テーブル要素に隣接するテーブル要素を近傍テーブル要素の４行目として採用する。
【０２５３】
図２６の例では、整数精度最小値テーブル要素ｔｍの水平方向に左右の隣接テーブル要素のＳＡＤ値は、「１７７」と「１７３」であるので、ＳＡＤ値が小さい右隣の値「１７３」のテーブル要素のさらに右隣の列を第４列目として採用する。また、整数精度最小値テーブル要素ｔｍの垂直方向に上下の隣接テーブル要素のＳＡＤ値は、「１６８」と「１８２」であるので、ＳＡＤ値が小さい上隣の値「１６８」のテーブル要素のさらに上隣の行を第４行目として採用する。
【０２５４】
そして、図２６の例の場合には、整数精度最小値テーブル要素ｔｍと、その近傍の１５個の近傍テーブル要素のＳＡＤ値を用いて、２次曲面２０１を、最小自乗法により生成する。そして、生成されたＳＡＤ値の２次曲面２０１の最小値２０２を検出し、その最小値を取るＳＡＤ値に対応する位置（ｖｘ／ｎ，ｖｙ／ｎ）（図２６の位置２０３）を検出し、当該検出した位置２０３を、小数精度の最小値テーブル要素位置（小数精度最小値テーブルアドレス）として検出する。
【０２５５】
そして、検出した小数精度テーブル要素位置２０３に対応するベクトル（最小値ベクトル）２０４を、前述した図２１に示すようにｎ倍して、元の大きさ精度の動きベクトル２０５を得る。
【０２５６】
ここで、この例の場合におけるＳＡＤ値の２次曲面２０１の最小値２０２に対応する位置２０３の算出方法は、次のようになる。すなわち、図２７に示すように、整数精度最小値テーブル要素ｔｍの位置を原点（０，０）とする（ｘ，ｙ）座標を考える。
【０２５７】
この例の場合には、１６テーブル要素からなる矩形領域中における整数精度最小値テーブル要素ｔｍの位置に応じて、図２７（Ａ），（Ｂ），（Ｃ），（Ｄ）のような４通りのテーブル要素配置を考える必要がある。
【０２５８】
この場合、周辺の１５個のテーブル要素の位置は、図２７（Ａ），（Ｂ），（Ｃ），（Ｄ）から分かるように、４個のｘ軸方向の位置、すなわち、ｘ＝−１、ｘ＝０、ｘ＝１、ｘ＝２またはｘ＝−２と、４個のＹ軸方向の位置、すなわち、ｙ＝−１、ｙ＝０、ｙ＝１、ｙ＝２またはｙ＝−２との繰り合わせで表される１５位置となる。
【０２５９】
そして、図２７のテーブルにおける各テーブル要素のＳＡＤ値を、Ｓｘｙとする。したがって、例えば、整数精度最小値テーブル要素ｔｍ（位置（０，０））のＳＡＤ値はＳ００と表され、また、位置（１，１）のテーブル要素値のＳＡＤ値はＳ１１と表される。
【０２６０】
すると、整数精度最小値テーブル要素ｔｍおよびその周辺の１６テーブル要素からなる矩形領域中の中心位置を原点（０，０）とする（ｘ，ｙ）座標における小数精度の位置（ｄｘ，ｄｙ）は、図２８に示す（式Ｃ）および（式Ｄ）により、求めることができる。
【０２６１】
ここで、図２８の（式Ｃ）および（式Ｄ）において、ＫｘおよびＫｙは、図２９に示すように、整数精度最小値テーブル要素ｔｍおよびその周辺の１６テーブル要素からなる矩形領域中の中心位置を原点（０，０）とする（Ｋｘ，Ｋｙ）座標を考えたときの、前記図１７（Ａ），（Ｂ），（Ｃ），（Ｄ）に示した４通りのテーブル要素配置に応じた値となる。
【０２６２】
すなわち、前記図２７（Ａ）に対応する場合には、
ｘ＝−２のとき、Ｋｘ＝−１．５
ｘ＝−１のとき、Ｋｘ＝−０．５
ｘ＝０のとき、Ｋｘ＝０．５
ｘ＝１のとき、Ｋｘ＝１．５
となる。また、
ｙ＝−２のとき、Ｋｙ＝−１．５
ｙ＝−１のとき、Ｋｙ＝−０．５
ｙ＝０のとき、Ｋｙ＝０．５
ｙ＝１のとき、Ｋｙ＝１．５
となる。
【０２６３】
また、前記図２７（Ｂ）に対応する場合には、
ｘ＝−２のとき、Ｋｘ＝−１．５
ｘ＝−１のとき、Ｋｘ＝−０．５
ｘ＝０のとき、Ｋｘ＝０．５
ｘ＝１のとき、Ｋｘ＝１．５
となる。また、
ｙ＝−１のとき、Ｋｙ＝−１．５
ｙ＝０のとき、Ｋｙ＝−０．５
ｙ＝１のとき、Ｋｙ＝０．５
ｙ＝２のとき、Ｋｙ＝１．５
となる。
【０２６４】
また、前記図２７（Ｃ）に対応する場合には、
ｘ＝−１のとき、Ｋｘ＝−１．５
ｘ＝０のとき、Ｋｘ＝−０．５
ｘ＝１のとき、Ｋｘ＝０．５
ｘ＝２のとき、Ｋｘ＝１．５
となる。また、
ｙ＝−２のとき、Ｋｙ＝−１．５
ｙ＝−１のとき、Ｋｙ＝−０．５
ｙ＝０のとき、Ｋｙ＝０．５
ｙ＝１のとき、Ｋｙ＝１．５
となる。
【０２６５】
また、前記図２７（Ｄ）に対応する場合には、
ｘ＝−１のとき、Ｋｘ＝−１．５
ｘ＝０のとき、Ｋｘ＝−０．５
ｘ＝１のとき、Ｋｘ＝０．５
ｘ＝２のとき、Ｋｘ＝１．５
となる。また、
ｙ＝−１のとき、Ｋｙ＝−１．５
ｙ＝０のとき、Ｋｙ＝−０．５
ｙ＝１のとき、Ｋｙ＝０．５
ｙ＝２のとき、Ｋｙ＝１．５
となる。
【０２６６】
また、図２８の（式Ｃ）および（式Ｄ）におけるΔｘおよびΔｙは、（Ｋｘ，Ｋｙ）座標に対する図２７（Ａ），（Ｂ），（Ｃ），（Ｄ）の各テーブル要素配置における（ｘ，ｙ）座標とのずれ量を表しており、図２９から分かるように、
図２７（Ａ）に対応する場合には、Δｘ＝−０．５、Δｙ＝−０．５、
図２７（Ｂ）に対応する場合には、Δｘ＝−０．５、Δｙ＝０．５、
図２７（Ｃ）に対応する場合には、Δｘ＝０．５、Δｙ＝−０．５、
図２７（Ｄ）に対応する場合には、Δｘ＝０．５、Δｙ＝０．５、
となる。
【０２６７】
こうして求められた小数精度の位置（ｄｘ，ｄｙ）は、整数精度最小値テーブル要素ｔｍの位置を原点（０，０）とする位置であるので、この小数精度の位置（ｄｘ，ｄｙ）と整数精度最小値テーブル要素ｔｍの位置とから、求めるサーチ範囲の中心位置からの位置２０３を検出することができる。
【０２６８】
［より正確な動きベクトルを算出するための補間処理の第２の例］
より正確な動きベクトルを算出するための補間処理の第２の例は、縮小ＳＡＤテーブルにおける整数精度最小値テーブル要素を含む複数個の水平方向のテーブル要素のＳＡＤ値を用いて水平方向の３次曲線を生成すると共に、整数精度最小値テーブル要素を含む複数個の垂直方向のテーブル要素のＳＡＤ値を用いて垂直方向の３次曲線を生成し、それぞれの３次曲線の極小値となる位置（ｖｘ，ｖｙ）を検出して、検出した位置を小数精度の最小値アドレスとするものである。
【０２６９】
図３０は、この第２の例を説明するための図である。前述の第１の例と同様にして、整数精度最小値テーブル要素ｔｍと、この整数精度最小値テーブル要素を中心とする複数の整数精度テーブル要素、図３０の例では、４×４＝１６個のテーブル要素を求める（図３０（Ａ）で塗りを付した部分参照）。
【０２７０】
次に、第１の例と同様にして、図３０（Ｂ）に示すように、参照フレームのサーチ範囲内の縮小ＳＡＤテーブルに対応する参照縮小ベクトルの範囲内において、ターゲットフレームの位置を基準位置（０，０）として、水平方向および垂直方向のずれ量（参照縮小ベクトルに対応）の軸ｖｘ／ｎおよび軸ｖｙ／ｎを考えると共に、これらの軸ｖｘ／ｎおよび軸ｖｙ／ｎに垂直な軸として、ＳＡＤ値の軸を考え、これら３軸からなる座標空間を想定する。
【０２７１】
次に、整数精度最小値テーブル要素ｔｍの周囲の１６個のテーブル要素のうち、整数精度最小値テーブル要素ｔｍを含む４個の水平方向のテーブル要素のＳＡＤ値を用いて、前記座標空間に水平方向の３次曲線２０６を生成する。この水平方向の３次曲線２０６の極小値に対応する水平方向の位置ｖｘ／ｎとして、小数精度最小値テーブル要素位置の水平方向位置を検出する。
【０２７２】
次に、整数精度最小値テーブル要素ｔｍの周囲の１６個のテーブル要素のうち、整数精度最小値テーブル要素ｔｍを含む４個の垂直方向のテーブル要素のＳＡＤ値を用いて、前記座標空間に垂直方向の３次曲線２０７を生成する。この垂直方向の３次曲線２０７の極小値に対応する垂直方向の位置ｖｙ／ｎとして、小数精度最小値テーブル要素位置の垂直方向位置を検出する。
【０２７３】
以上により求めた小数精度最小値テーブル要素位置の水平方向の位置と、垂直方向の位置から、小数精度最小値テーブル要素位置（小数精度最小値テーブルアドレス）２０８を検出する。そして、当該検出した小数精度テーブル要素位置２０８に対応するベクトル（最小値ベクトル）２０９を、前述した図２１に示すようにｎ倍して、元の大きさ精度の動きベクトルを得る。
【０２７４】
すなわち、第２の例は、第１の例で説明した方法により、水平方向、垂直方向のそれぞれの４個のテーブル要素を確定し、図３０（Ｂ）に示すように、水平方向、垂直方向のそれぞれで、３次曲線を一意に定める手法である。
【０２７５】
ここで、ＳＡＤ値の３次曲線２０６および２０９の最小値２０２に対応する位置２０８の算出方法は、次のようになる。すなわち、水平方向または垂直方向のいずれかの方向における３次曲線において、最小値の近傍の４点のＳＡＤ値を、前記水平方向または垂直方向のいずれかの方向に沿った順番に、Ｓ０、Ｓ１、Ｓ２、Ｓ３としたとき、小数精度の最小値が、図３１に示す３つの区間Ｒａ，Ｒｂ，Ｒｃのいずれにあるかにより、最小値を取る小数成分ｕを算出する式が異なる。
【０２７６】
ここで、区間ＲａはＳＡＤ値Ｓ０となる位置とＳＡＤ値Ｓ１となる位置との間の区間、ＲｂはＳＡＤ値Ｓ１となる位置とＳＡＤ値Ｓ２となる位置との間の区間、ＲｃはＳＡＤ値Ｓ２となる位置とＳＡＤ値Ｓ３となる位置との間の区間である。
【０２７７】
そして、小数精度の最小値が、図３１に示す区間Ｒａにあるときには、図３２の（式Ｅ）により、整数精度の最小値の位置に対する最小値を取る位置までのずれの小数成分ｕが算出される。
【０２７８】
また、同様に、小数精度の最小値が、図３１に示す区間Ｒｂにあるときには、図３２の（式Ｆ）により、整数精度の最小値の位置に対する最小値を取る位置までのずれの小数成分ｕが算出される。
【０２７９】
さらに、小数精度の最小値が、図３１に示す区間Ｒｃにあるときには、図３２の（式Ｇ）により、整数精度の最小値の位置に対する最小値を取る位置までのずれの小数成分ｕが算出される。
【０２８０】
そして、小数精度の最小値が、図３１に示す３つの区間Ｒａ，Ｒｂ，Ｒｃのいずれにあるかの判別は、次のようにして行なう。
【０２８１】
すなわち、図３３は、その判別を説明するための図である。図３３（Ａ），（Ｂ），（Ｃ）に示すように、先ず、整数精度のＳＡＤ値の最小値Ｓｍｉｎと、２番目に小さい整数精度のＳＡＤ値Ｓｎ２とを検出し、小数精度の最小値は、検出された整数精度のＳＡＤ値の最小値Ｓｍｉｎの位置と、２番目に小さい整数精度のＳＡＤ値Ｓｎ２の位置との間の区間に存在するとして検出する。次に、整数精度のＳＡＤ値の最小値Ｓｍｉｎと、２番目に小さい整数精度のＳＡＤ値Ｓｎ２とが、図３１に示したＳＡＤ値Ｓ０、Ｓ１、Ｓ２、Ｓ３のいずれの位置となっているかにより、検出した区間が区間Ｒａ，Ｒｂ，Ｒｃのいずれであるかの判別を行なう。
【０２８２】
なお、図３３（Ｄ）に示すように、整数精度のＳＡＤ値の最小値ＳｍｉｎがＳＡＤ値のまたは位置にあって、４個のテーブル要素値の端に位置する場合には、最小位置が推定できないとして、この実施形態では、エラーとして扱い、最小値位置の算出は行なわないようにする。もっとも、この図３３（Ｄ）のような場合においても、最小値位置を算出するようにしてもよい。
【０２８３】
以上のようにして、この実施形態によれば、１／ｎ２にスケールダウンした小さいサイズの縮小ＳＡＤテーブルを用いて、元の画像スケールにおける動きベクトルを算出することができる。この場合に、１／ｎ２にスケールダウンした小さいサイズの縮小ＳＡＤテーブルを用いているにも関わらず、従来とほぼ同様のベクトル検出結果が得られることを図３１に示す。
【０２８４】
図３４の横軸は、水平方向または垂直方向の一方についての１次元方向の縮小倍率ｎであり、また、縦軸は、検出される動きベクトルについての誤差（ベクトル誤差）を示している。図３４のベクトル誤差の数値は画素数で表されている。
【０２８５】
図３４において、曲線３０１は、縮小倍率に対するベクトル誤差の平均値である。また、曲線３０２は、縮小倍率に対するベクトル誤差の分散σの３倍値（３σ（９９．７％））を示している。曲線３０３は、曲線３０２の近似曲線を示している。
【０２８６】
図３４は、１次元方向の縮小倍率ｎに対するベクトル誤差を示しているが、ＳＡＤテーブルは２次元のため、図３４に示されるものの２乗の割合でテーブルサイズ（テーブル要素数）が削減されるのに対し、ベクトル誤差は、線形程度にしか増加しないことから、この実施形態による手法の有用性が分かる。
【０２８７】
また、ｎ＝６４（縮小率１／６４）倍の縮小倍率でも、ベクトル誤差は小さく、全く異なる動きベクトルを算出出力とするような破綻は見られないことから、実質、１／４０９６に、ＳＡＤテーブルのサイズを削減可能であると言える。
【０２８８】
また、前述したように、動画の手ぶれ補正においては、リアルタイム性とシステム遅延の削減が強く求められるのに対し、精度については、破綻した全く異なる動きベクトルが検出される場合を除き、ある程度のベクトル検出誤差に対して寛容である。したがって、破綻しないままＳＡＤテーブルのサイズを大きく削減することができる、この実施形態は有用性が高いと言える。
【０２８９】
そして、この実施形態では、前述したように、参照フレーム１０２を複数の領域、この例では１６領域に分割し、それぞれの分割領域において動きベクトル（ブロック毎動きベクトル）２０５を検出するようにする。これは、前述したように、フレーム内には動く被写体が含まれる可能性も高いため、例えば、図３５のように参照フレーム１０２の１フレーム内において１６個の動きベクトル２０５を検出し、過去のフレームにおけるそれらの動きベクトル２０５からの推移も加味しながら統計的に処理することで、１フレームについて１つのグローバル動きベクトル、即ち、フレームの手ぶれベクトルを確定するようにするためである。
【０２９０】
この場合、図３５に示すように、１回目の検波においては、検出したい１６個の動きベクトル２０５の基準位置ＰＯ１〜ＰＯ16のそれぞれを中心とするサーチ範囲ＳＲ１，ＳＲ２，・・・，ＳＲ16を定め、各サーチ範囲において、ターゲットブロックの射影イメージブロックＩＢ１，ＩＢ２，・・・，ＩＢ16を想定する。
【０２９１】
そして、この射影イメージブロックＩＢ１，ＩＢ２，・・・，ＩＢ16と同じ大きさの参照ブロックを設定し、各サーチ範囲ＳＲ１，ＳＲ２，・・・，ＳＲ16内を、設定した参照ブロックを移動させて、上述と同様にして、縮小ＳＡＤテーブルを生成すると共に、各サーチ範囲ＳＲ１，ＳＲ２，・・・，ＳＲ16における動きベクトル２０５を検出するようにする。したがって、この実施形態では、ＳＡＤテーブルＴＢＬｉは、縮小ＳＡＤテーブルの構成である。
【０２９２】
そして、この実施形態では、１６個のサーチ範囲のターゲットブロックについて求めた１６個の縮小ＳＡＤテーブルを、図２に示したように、重ね合わせるように並べて、サーチ範囲内で互いに対応する参照ブロック位置、つまり、縮小ＳＡＤテーブルで同じ座標位置のＳＡＤ値を合算し、合算ＳＡＤ値を求める。そして、その合算ＳＡＤ値からなるＳＡＤテーブルとして、一つのサーチ範囲内の複数参照ブロック位置分についての合算縮小ＳＡＤテーブルを生成する。したがって、この実施形態では、合算ＳＡＤテーブルＳＵＭ＿ＴＢＬは、合算縮小ＳＡＤテーブルの構成である。
【０２９３】
そして、この実施形態では、この縮小ＳＡＤテーブルＴＢＬｉ、この縮小ＳＡＤテーブルＴＢＬｉについて上述のような近似補間処理をすることで求められるブロック毎動きベクトル２０５、および合算ＳＡＤテーブルＳＵＭ＿ＴＢＬを用いて、図１３〜図１４に示したような信頼性の判定処理、および信頼性の高いブロック毎動きベクトルが得られるターゲットブロックについての再合算ＳＡＤテーブルＲＳＵＭ＿ＴＢＬの生成、さらに、生成した再合算ＳＡＤテーブルＲＳＵＭ＿ＴＢＬの最小ＳＡＤ値およびその近傍の複数個のＳＡＤ値を用いた曲線近似補間処理をすることにより、高精度のグローバル動きベクトルを算出する。
【０２９４】
以上説明した実施形態の縮小ＳＡＤテーブルを用いる画像処理方法は、従来手法として説明した特許文献３に記載された画像を縮小変換したサイズで動きベクトルを算出する手法に比べて、次に挙げる２つの点において、大きく異なるメリットを有するものである。
【０２９５】
まず、第一に、この実施形態による手法は、特許文献３に記載された従来手法と異なり、画像を縮小変換するプロセスを全く必要としない。この実施形態による手法においては、参照ブロックについて算出したＳＡＤ値を、ＳＡＤテーブル（縮小ＳＡＤテーブル）に代入加算する際に、同時に縮小倍率に相当するアドレス変換を行なうからである。
【０２９６】
これにより、この実施形態による手法においては、特許文献３に記載された従来手法のような画像の縮小変換のためのロジックも、縮小した画像をメモリに格納する時間およびバンド幅の浪費も、縮小画像をメモリに貼る領域確保も必要ない、というメリットを有する。
【０２９７】
特許文献３に記載された従来手法のもう１つ重要な問題点として、前述も使用にしたように、画像を縮小変換する際のエイリアシング（折り返し歪み）や、低照度ノイズ除去のためのローパスフィルタの存在の問題がある。すなわち、画像縮小する際には、適切なローパスフィルタを通してからリサンプリングを行なわなければならず、さもないと、不要なエイリアシングが発生し、その縮小画像を用いた動きベクトルの精度が著しく損なわれるからである。
【０２９８】
縮小変換の際の理想的なローパスフィルタの特性としては、ｓｉｎｃ関数に類似した関数であることが、理論的に証明されている。ｓｉｎｃ関数自体は、ｓｉｎ（ｘπ）／（ｘπ）の形で表されるカットオフ周波数ｆ／2の無限タップのＦＩＲ（Ｆｉｎｉｔｅ  Ｉｍｐｕｌｓｅ  Ｒｅｓｐｏｎｓｅ）フィルタであるが、縮小倍率１／nのときの理想的なカットオフ周波数ｆ／（２ｎ）のローパスフィルタとしては、ｓｉｎ（ｘπ/ｎ）／（ｘπ/ｎ）と表される。しかし、これもｓｉｎｃ関数の一形態として良い。
【０２９９】
図３６〜図３８の上側には、それぞれ縮小倍率が１／２倍、１／４倍、１／８倍のときのｓｉｎｃ関数（ローパスフィルタの理想特性）の形状を示す。この図３６〜図３８から、縮小倍率が大きくなればなる程、関数がタップ軸方向に拡大して行くことが分かる。つまり、無限タップのｓｉｎｃ関数を主要な係数のみで近似する場合にも、ＦＩＲフィルタのタップ数を増加させなければならないと言える。
【０３００】
また、一般的に、より低い帯域のカットオフ周波数を実現するフィルタは、フィルタ形状よりもタップ数が、その性能に対して支配的になって行くことが知られている。
【０３０１】
したがって、特許文献３に記載の従来手法の縮小画像を用いる動きベクトル演算手法の場合、画像の縮小倍率が大きくなればなる程、そのＳＡＤテーブル削減効果が大きいにも関わらず、画像生成する際の前処理用フィルタとしてのローパスフィルタは、縮小倍率が大きくなればなる程、コストが増加してしまう、という矛盾を併せ持つのである。
【０３０２】
一般に、高次タップのＦＩＲフィルタを実現する場合、演算ロジックのコストがタップ数の２乗に比例して増加するため、問題となるが、より大きい問題は、垂直フィルタ実現のためのラインメモリ数の増加である。近年のデジタルスチルカメラにおいては、画素数向上に伴うラインメモリのサイズ削減のため、いわゆる短冊処理を行なっているが、例え、１ライン当たりのサイズを削減したとしても、ラインメモリそのものの本数が増加することは、物理レイアウトエリアで換算されるトータルコストを著しく押し上げる。
【０３０３】
以上、述べたように、特許文献３に記載の従来手法の画像縮小によるアプローチは、特に垂直ローパスフィルタの実現において、大きな壁が立ちはだかっていることが分かる。それに対し、この実施形態の手法は、全く異なる形で簡潔にこの問題を解決している。
【０３０４】
図３６〜図３８の下側に、この実施形態による手法におけるローパスフィルタのイメージを示す。この実施形態による手法においては、画像縮小処理を伴っていないが、縮小ＳＡＤテーブルの生成演算過程におけるローパスフィルタのイメージを図示したものである。
【０３０５】
図３６〜図３８の下側に示されるように、このローパスフィルタの特性は、ｓｉｎｃ関数の主要係数部分を線形で近似した、シンプルなフィルタ特性ではあるものの、縮小倍率に連動してタップ数が増加していることが分かる。これは、先に述べた、カットオフ周波数が低くなる程、ローパスフィルタの性能はタップ数が支配的になる、という事実に好適である。つまり、実施形態の線形加重分散加算を行なう処理のような、この実施形態におけるＳＡＤ値の分散加算を行なう処理そのものが、倍率連動の高性能ローパスフィルタを、シンプルな回路で実現していることと等価なのである。
【０３０６】
このローパスフィルタに絡んで、他にもメリットがある。特許文献３に記載の従来手法では、ローパスフィルタをかけた後、リサンプリングすることで画像を縮小するが、この時点で相当数の画像情報が失われる。つまり、ローパスフィルタの演算において、画像情報の輝度値の語長は大幅に丸められてメモリに格納され、殆どの画素情報の下位ビットは、縮小後の画像に影響を与えないのである。
【０３０７】
一方、この実施形態による手法においては、全ての画素の輝度値の全ビット情報を、遍く平等に使用してＳＡＤ値を演算し、その分散加算値を求めて縮小ＳＡＤテーブルに加算する。縮小ＳＡＤテーブルの各テーブル要素値の語長さえ増やせば、最終的なＳＡＤ値の出力まで、一切の丸め誤差を含まない形で演算可能である。縮小ＳＡＤテーブルの面積はフレームメモリに比較して小さいため、縮小ＳＡＤテーブルの語長拡張は大きな問題にならない。その結果として、縮小ＳＡＤテーブル並びに動きベクトル検出を、高精度に実現できるのである。
【０３０８】
［この発明による画像処理装置の第１の実施形態］
次に、この発明による画像処理方法を用いた画像処理装置の第１の実施形態として、撮像装置の場合を例にとって、図を参照しながら説明する。図１は、この発明の画像処理装置の実施形態としての撮像装置の一例のブロック図を示すものである。
【０３０９】
この図１の第１の実施形態は、静止画の手ぶれ補正システムに、この発明を適用した場合である。なお、この実施形態は、静止画用に限定されるわけではなく、本質的には動画にも適用可能である。動画の場合には、リアルタイム性のため加算枚数（フレーム数）に上限はあるが、フレーム毎に本手法を用いることにより、ノイズ・リダクション効果の高い動画を生成するシステムへの応用も、全く同じ手段で実現できる。
【０３１０】
この第１の実施形態においては、入力画像フレームを参照フレームとして、この入力画像フレームと、フレームメモリ内の入力画像フレームを１フレーム遅延させた画像フレームとの間で動きベクトル検出を行なう。そして、この第１の実施形態における静止画についての手ぶれ補正は、連続的に撮影した複数枚の画像、例えば３ｆｐｓの画像を、手ぶれ補正を行いながら重ね合わせることにより行なう。
【０３１１】
このように、第１の実施形態においては、撮影した静止画の手ぶれ補正を、連写した複数の画像について手ぶれ補正をかけながら重ね合わせて行くため、ピクセル精度（１画素精度）に近い精度が求められる。つまり、第１の実施形態においては、前述したように、手ぶれ動きベクトルとしてのフレーム間の水平方向および垂直方向の平行移動成分と同時に、フレーム間の回転成分も検出するようにする。
【０３１２】
図１に示すように、この実施形態の撮像装置は、システムバス２にＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１が接続されると共に、システムバス２に、撮像信号処理系１０や、ユーザ操作入力部３、画像メモリ部４、記録再生装置部５などが接続されて構成されている。なお、この明細書においては、ＣＰＵ１は、種々のソフトウエア処理を行なうプログラムを記憶するＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やワークエリア用ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などを含むものとしている。
【０３１３】
ユーザ操作入力部３を通じた撮像記録開始操作を受けて、図１の例の撮像装置は、後述するような撮像画像データの記録処理を行なう。また、ユーザ操作入力部３を通じた撮像記録画像の再生開始操作を受けて、図１の例の撮像装置は、記録再生装置部５の記録媒体に記録された撮像画像データの再生処理を行なう。
【０３１４】
図１に示すように、撮像レンズ１０Ｌを備えるカメラ光学系（図示は省略）を通じた被写体からの入射光は、撮像素子１１に照射されて撮像される。この例では、撮像素子１１は、ＣＣＤ（Ｃｈａｒｇｅ  Ｃｏｕｐｌｅｄ  Ｄｅｖｉｃｅ）イメージャで構成されている。なお、撮像素子１１は、ＣＭＯＳ（Ｃｏｍｐｌｅｍｅｎｔａｒｙ  Ｍｅｔａｌ  Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ）イメージャで構成してもよい。
【０３１５】
この例の撮像装置においては、撮像記録開始操作がなされると、撮像素子１１からは、タイミング信号発生部１２からのタイミング信号によりサンプリングされることにより、赤（Ｒ）、緑（Ｇ）、青（Ｂ）の３原色から構成されるベイヤー配列のＲＡＷ信号であるアナログ撮像信号が出力される。出力されたアナログ撮像信号は、前処理部１３に供給され、欠陥補正やγ補正等の前処理が施され、データ変換部１４に供給される。
【０３１６】
データ変換部１４は、これに入力されたアナログ撮像信号から、輝度信号成分Ｙと、色差信号成分Ｃｂ／Ｃｒとにより構成されるデジタル撮像信号（ＹＣデータ）に変換し、そのデジタル撮像信号をシステムバス２を介して、画像メモリ部４に供給する。
【０３１７】
画像メモリ部４は、この図１の例においては、３個のフレームメモリ４１，４２および４３からなり、データ変換部１４からのデジタル撮像信号は、先ず、フレームメモリ４１に格納される。そして、１フレーム経過すると、フレームメモリ４１に記憶されているデジタル撮像信号が、フレームメモリ４２に転送されると共に、フレームメモリ４１には、データ変換部１４からの新たなフレームのデジタル撮像信号が書き込まれる。したがって、フレームメモリ４２には、フレームメモリ４１に格納されているフレーム画像よりも１フレーム分前のフレーム画像が格納されている。
【０３１８】
そして、手ぶれベクトル検出部１５は、システムバス２を介して、これら２個のフレームメモリ４１およびフレームメモリ４２をアクセスして、その格納データを読み出し、前述したような、１フレーム当たり１６個のＳＡＤテーブル生成処理、ブロック毎動きベクトル検出処理、合算ＳＡＤテーブル生成処理、再合算ＳＡＤテーブル生成処理、グローバル動きベクトル検出処理などの処理、さらにフレームについての平行移動量および回転角度の算出処理を実行する。
【０３１９】
この場合、フレームメモリ４２に格納されているフレーム画像は、元フレームの画像とされ、また、フレームメモリ４１に格納されているフレーム画像は、参照フレームの画像とされる。なお、実際には、フレームメモリ４１と４２とは、ダブルバッファとしてローテーションされる。
【０３２０】
この第１の実施形態における手ぶれベクトル検出部１５においては、前述したように、サーチ範囲を絞りながら、かつ、必要に応じて縮小倍率を変更しながら、２段階以上、縮小ＳＡＤテーブルおよび合算ＳＡＤテーブルを用いた動きベクトル検出処理を繰り返すようにする。
【０３２１】
特に、静止画についての手ぶれベクトル検出および手ぶれ補正処理においては、リアルタイム性の制約が少なく、画素数が多く、高精度の動きベクトルの検出が必要であるので、複数段階の階層的な動きベクトル検出処理が非常に有効である。
【０３２２】
この第１の実施形態においては、画像メモリ４には、複数枚のフレームを回転および平行移動させて重ね合わせた結果を記憶するためのフレームメモリ４３を設ける。前述したように、画像フレームの重ね合わせは、１枚目の基準画像（図３の画像フレーム１２０参照）に対して行うようにする。
【０３２３】
複数枚のフレームを回転および平行移動させて重ね合わせる基準となる１枚目のフレームの画像データは、図１において破線で示すように、フレームメモリ４３にも書き込まれる。
【０３２４】
そして、２枚目以降の画像フレームについては、フレームメモリ４２に格納された後、フレームメモリ４１に格納されている画像データを用いて、常に１フレーム前の画像との相対的な手ぶれベクトルの検出が、手ぶれベクトル検出部１５で実行される。このとき、１枚目の基準画像との相対手ぶれを算出するために、それまでの手ぶれベクトルを積分しておくようにする。また、手ぶれベクトル検出部１５では、２枚目以降の画像フレームの、１枚目の基準画像フレームに対する相対的な回転角度が検出される。
【０３２５】
手ぶれベクトル検出部１５は、検出した１枚目の画像フレームに対する２枚目以降の画像フレームのそれぞれについての相対的な手ぶれベクトルと回転角度の情報をＣＰＵ１に供給する。
【０３２６】
そして、フレームメモリ４２に格納されている２枚目以降の画像は、算出された１枚目のフレームの基準画像との相対手ぶれ成分（平行移動量の成分）を相殺するように、ＣＰＵ１の制御により、フレームメモリ４２から読み出されて、回転・平行移動加算部１９に供給される。このフレームメモリ４２からの相対手ぶれ成分にしたがった切り出しにより、回転平行移動加算部１９には、手ぶれによる平行移動量が除去された状態で供給される。
【０３２７】
回転・平行移動加算部１９では、ＣＰＵ１からの制御信号により、１枚目の基準画像フレームに対する相対回転角度に応じてフレームメモリ４２から読み出された２枚目以降の画像フレームのそれぞれが回転させられて、フレームメモリ４３から読み出された画像フレームに対して加算もしくは平均化される。その加算もしくは平均結果の画像フレームは、フレームメモリ４３に書き戻される。
【０３２８】
そして、フレームメモリ４４の画像フレームのデータは、ＣＰＵ１の制御指示に応じた所定の解像度および所定の画像サイズとなるように切り出されて解像度変換部１６に供給される。解像度変換部１６は、ＣＰＵ１からの制御を受けて、ＣＰＵ１の制御指示に応じた所定の解像度および所定の画像サイズの画像データを生成して、出力する処理を実行する。
【０３２９】
この解像度変換部１６からの手ぶれが除去された画像データは、ＮＴＳＣ（Ｎａｔｉｏｎａｌ  Ｔｅｌｅｖｉｓｉｏｎ  Ｓｙｓｔｅｍ  Ｃｏｍｍｉｔｔｅｅ）エンコーダ１８によりＮＴＳＣ方式の標準カラー映像信号に変換され、電子式ビューファインダーを構成するモニターディスプレイ６に供給され、撮影時の画像がその表示画面にモニター表示される。
【０３３０】
このモニター表示と並行して、解像度変換部１６からの手ぶれが除去された画像データはコーデック部１７で記録変調などのコーディング処理された後、記録再生装置部５に供給されて、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）などの光ディスクやハードディスクなどの記録媒体に記録される。
【０３３１】
この記録再生装置部５の記録媒体に記録された撮像画像データは、ユーザ操作入力部３を通じた再生開始操作に応じて読み出され、コーデック部１７に供給されて、再生デコードされる。そして、再生デコードされた画像データはＮＴＳＣエンコーダ１８を通じてモニターディスプレイ６に供給され、再生画像がその表示画面に表示される。なお、図１では、図示を省略したが、ＮＴＳＣエンコーダ１８からの出力映像信号は、映像出力端子を通じて外部に導出することが可能とされている。
【０３３２】
上述した手ぶれベクトル検出部１５は、ハードウエアにより構成することできるし、また、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）を用いて構成することもできる。さらには、ＣＰＵ１によりソフトウエア処理とすることもできる。また、ハードウエアやＤＳＰ処理と、ＣＰＵ１によるソフトウエア処理との組み合わせとすることもできる。
【０３３３】
手ぶれベクトル検出部１５では、相対的なフレーム間のブロック毎動きベクトルおよびグローバル動きベクトルの算出のみを行い、相対的な高精度のグローバル動きベクトルや平行移動量、回転角度の算出、また、１枚目に対する平行移動量および回転角度の算出処理は、ＣＰＵ１が実行するようにしても良い。
【０３３４】
なお、この実施形態では、回転・平行移動加算部１９においては、後述するように、「単純加算」、「平均加算」、「トーナメント加算」の３通りのフレーム加算処理方法が、実行できるようにされている。そして、ユーザ操作入力部３には、それら３通りのフレーム加算処理方法のいずれを実行するかを指定する選択指定操作手段（図１では図示を省略）が設けられ、ＣＰＵ１は、ユーザのこの選択指定操作手段を通じた選択指定に応じた選択制御信号を回転・平行移動加算部１９に供給する。回転・平行移動加算部１９は、３通りのフレーム加算処理方法のうちの、ＣＰＵ１からの選択制御信号により指定されるフレーム加算処理方法を実行する。
【０３３５】
［手ぶれベクトル検出部１５における処理動作］
［第１の例］
この実施形態における手ぶれベクトル検出部１５における処理動作の流れの第１の例を、図３９〜図４２のフローチャートを参照して、以下に説明する。この第１の例は、参照フレームについてのグローバル動きベクトルから平行移動量および回転角度を算出するようにする場合である。
【０３３６】
なお、この図３９〜図４２は、一つの参照フレームについての処理であり、この図３９〜図４２の処理ルーチンが各参照フレームにおいて実行されるものである。この場合に、ステップＳ３１の１回目のサーチ範囲の設定処理は、最初の参照フレームについて設定したら、その後の参照フレームにおいては省略することができる。
【０３３７】
まず、１回目検波について説明する。前述の図３５に示したように、１６個のターゲットブロックについての１６個のサーチ範囲について、それぞれのターゲットブロックの中心位置を、それぞれのサーチ範囲の中心としてサーチ範囲のオフセットをゼロに設定すると共に、それぞれのサーチ範囲を、この実施形態において想定される最大範囲に設定する（図３９のステップＳ３１）。
【０３３８】
次に、１６個のターゲットブロックについて、それぞれ設定されたサーチ範囲において前述した縮小ＳＡＤテーブルおよびブロック毎動きベクトルの算出処理を実行する（ステップＳ３２）。このステップＳ３２の詳細処理ルーチンは後述する。
【０３３９】
そして、１６個のターゲットブロックについての縮小ＳＡＤテーブルの生成が終了すると、１６個の縮小ＳＡＤテーブルにおいて、図４に示した（式３）により、サーチ範囲のそれぞれで対応する参照ブロック位置のＳＡＤ値を合算する処理を行い、縮小ＳＡＤテーブルと同一サイズである一つのサーチ範囲内の複数参照ブロック位置分の合算縮小ＳＡＤテーブルを生成する（ステップＳ３３）。
【０３４０】
次に、生成した合算縮小ＳＡＤテーブルにおいて、最小ＳＡＤ値を検出し、検出した最小ＳＡＤ値とその近傍の複数ＳＡＤ値を用いて、前述した近似曲面補間の処理を行って、合算動きベクトルを算出する（ステップＳ３４）。
【０３４１】
次に、ステップＳ３４で算出された合算動きベクトルを基準にして、１６個の縮小ＳＡＤテーブルのＳＡＤ値と、ブロック毎動きベクトルとから、図１３に示した条件の判定を行い、１６個のターゲットブロックのそれぞれについての縮小ＳＡＤテーブルについての前述したような「ＴＯＰ」、「ＮＥＸＴ＿ＴＯＰ」、「ＮＥＡＲ＿ＴＯＰ」、「ＯＴＨＥＲＳ」のラベル付けおよび当該参照フレームについての合計スコアｓｕｍ＿ｓｃｏｒｅの算出処理を行う。そして、算出されたそれらのラベル付け結果および合計スコアｓｕｍ＿ｓｃｏｒｅを保持する（ステップＳ３５）。なお、このとき、「ＮＥＡＲ＿ＴＯＰ」、「ＯＴＨＥＲＳ」のラベル付けをしたターゲットブロックについては、信頼性が低いため使用しないことを意味するマスクフラグが設定される。
【０３４２】
次に、ステップＳ３２で算出された１６個のブロック毎動きベクトルについて多数決を取り（ステップＳ３６）、多数決トップのブロック毎動きベクトルを基準にして、１６個の縮小ＳＡＤテーブルのＳＡＤ値と、ブロック毎動きベクトルとから、前述したような図１２に対応する条件の判定を行い、１６個のターゲットブロックのそれぞれについてのＳＡＤテーブルについての前述したような「ＴＯＰ」、「ＮＥＸＴ＿ＴＯＰ」、「ＮＥＡＲ＿ＴＯＰ」、「ＯＴＨＥＲＳ」のラベル付けおよび当該参照フレームについての合計スコアｍａｎｙ＿ｓｃｏｒｅの算出処理を行い、算出されたそれらのラベル付け結果および合計スコアｍａｎｙ＿ｓｃｏｒｅを保持する（ステップＳ３７）。
【０３４３】
そして、ステップＳ３４で算出した合算動きベクトルと、ステップＳ３６での多数決処理の結果、検出される多数決トップの動きベクトルとを比較し、両動きベクトルが縮小ＳＡＤテーブル上の座標位置として、１隣接以内（座標位置が上下左右斜め方向に１位置しか違わない）であるか否か判別する（ステップＳ３８）。
【０３４４】
ステップＳ３８で、合算動きベクトルと多数決トップの動きベクトルとの差異が１隣接以内ではないと判別したときには、当該参照フレームのグローバル動きベクトルは信頼性が無いと判断して、当該参照フレームは、静止画手ぶれ補正のための重ね合わせ処理をするフレームから除外し、その後の処理をスキップする（ステップＳ３９）。そして、この処理ルーチンを終了する。
【０３４５】
また、ステップＳ３８で、合算動きベクトルと多数決トップの動きベクトルとの差異が１隣接以内であると判別したときには、ステップＳ３５で求められた合計スコアｓｕｍ＿ｓｃｏｒｅが予め定められた所定の閾値θth１以上であり、かつ、ステップＳ３７で求められた合計スコアｍａｎｙ＿ｓｃｏｒｅが予め定められた所定の閾値θth２以上であるか否か判別する（図４０のステップＳ４１）。
【０３４６】
ステップＳ４１で、合計スコアｓｕｍ＿ｓｃｏｒｅおよび合計スコアｍａｎｙ＿ｓｃｏｒｅの一方または両者が、閾値θth１および閾値θth２以上である条件を満足しなかったときには、ステップＳ３９に進んで、当該参照フレームは、静止画手ぶれ補正のための重ね合わせ処理をするフレームから除外し、その後の処理をスキップする。そして、この処理ルーチンを終了する。
【０３４７】
また、ステップＳ４１で、合計スコアｓｕｍ＿ｓｃｏｒｅおよび合計スコアｍａｎｙ＿ｓｃｏｒｅの両者が、閾値θth１および閾値θth２以上である条件を満足したときには、ステップＳ３５でラベル付けされたターゲットブロックに対するＳＡＤテーブルのうち、「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のラベルが付与されたＳＡＤテーブルのＳＡＤ値のみを用いて、合算ＳＡＤ値を再算出し、合算縮小ＳＡＤテーブルを再算出する（ステップＳ４２）。
【０３４８】
そして、再作成により求めた再合算縮小ＳＡＤテーブルにおける最小ＳＡＤ値の座標位置およびその近傍座標位置の複数個のＳＡＤ値を用いて近似曲面補間処理を行う（ステップＳ４３）。この例では、このステップＳ４３では、図２３を用いて説明した３×３個の矩形領域のテーブル要素を用いる近似曲面補間処理を実行する。
【０３４９】
そして、この近似曲面補間処理の結果として検出される動きベクトルを、グローバル動きベクトルとして、２回目検波の際のサーチ範囲オフセットを設定するために用いるために確保する（ステップＳ４４）。
【０３５０】
次に、手ぶれベクトル検出部１５は、図４１および図４２に示す２回目検波を続いて実行する。
【０３５１】
すなわち、１６個のターゲットブロックについての１６個のサーチ範囲を、図１５（Ｂ）に示したように、ステップＳ３９で確保した１回目検波で得られたグローバル動きベクトル分、つまり、平行移動量分だけオフセットした位置を中心としたものとし、かつ、１回目検波時よりも狭い範囲として設定する（図４１のステップＳ５１）。
【０３５２】
次に、１６個のターゲットブロックについて、それぞれ設定されたサーチ範囲において前述した縮小ＳＡＤテーブルおよびブロック毎動きベクトルの算出処理を実行する（ステップＳ５２）。
【０３５３】
そして、ステップＳ５２での複数個のターゲットブロックについての縮小ＳＡＤテーブルの生成が終了すると、１回目検波でマスクフラグが立てられたターゲットブロックを除く、ラベル「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のターゲットブロックについての縮小ＳＡＤテーブルにおいて、図４に示した（式３）により、サーチ範囲のそれぞれで対応する参照ブロック位置のＳＡＤ値を合算する処理を行い、縮小ＳＡＤテーブルと同一サイズである一つのサーチ範囲内の複数参照ブロック位置分の合算縮小ＳＡＤテーブルを生成する（ステップＳ５３）。なお、ステップＳ５２の縮小ＳＡＤテーブルおよびブロック毎動きベクトルの算出処理を、１回目検波でマスクフラグが立てられたターゲットブロックを除く、ラベル「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のターゲットブロックについてのみ行うようにしても良い。
【０３５４】
次に、ステップＳ５３で生成した合算縮小ＳＡＤテーブルにおいて、最小ＳＡＤ値を検出し、検出した最小ＳＡＤ値とその近傍の複数ＳＡＤ値を用いて、前述した近似曲面補間の処理を行って、小数精度の合算動きベクトルを算出する（ステップＳ５４）。
【０３５５】
次に、ステップＳ５４で算出された合算動きベクトルを基準にして、１回目検波でマスクフラグが立てられていないターゲットブロックについての縮小ＳＡＤテーブルのＳＡＤ値と、そのブロック毎動きベクトルとから、図１３に示した条件の判定を行い、前記のターゲットブロックのそれぞれについての縮小ＳＡＤテーブルについての前述したような「ＴＯＰ」、「ＮＥＸＴ＿ＴＯＰ」、「ＮＥＡＲ＿ＴＯＰ」、「ＯＴＨＥＲＳ」のラベル付けおよび当該参照フレームについての合計スコアｓｕｍ＿ｓｃｏｒｅの算出処理を再度行い、算出されたそれらのラベル付け結果および合計スコアｓｕｍ＿ｓｃｏｒｅを保持する（ステップＳ５５）。なお、この際にも、新たに「ＮＥＡＲ＿ＴＯＰ」、「ＯＴＨＥＲＳ」のラベル付けがなされたターゲットブロックについては、信頼性が低いため使用しないことを意味するマスクフラグが設定される。
【０３５６】
次に、ステップＳ５２で算出されたブロック毎動きベクトルのうちの、１回目検波でマスクフラグが立てられていないターゲットブロックについてのブロック毎動きベクトルについて多数決を取り（ステップＳ５６）、その結果としての多数決トップのブロック毎動きベクトルを基準にして、前記マスクフラグが立てられていないターゲットブロックの縮小ＳＡＤテーブルのＳＡＤ値と、そのブロック毎動きベクトルとから、前述したような図９に対応する条件の判定を行い、前述したような「ＴＯＰ」、「ＮＥＸＴ＿ＴＯＰ」、「ＮＥＡＲ＿ＴＯＰ」、「ＯＴＨＥＲＳ」のラベル付けおよび当該参照フレームについての合計スコアｍａｎｙ＿ｓｃｏｒｅの算出処理を行い、算出されたそれらのラベル付け結果および合計スコアｍａｎｙ＿ｓｃｏｒｅを保持する（ステップＳ５７）。
【０３５７】
そして、ステップＳ５４で算出した合算動きベクトルと、ステップＳ５６での多数決処理の結果、検出される多数決トップの動きベクトルとを比較し、両動きベクトルが縮小ＳＡＤテーブル上の座標位置として、１隣接以内（座標位置が上下左右斜め方向に１位置しか違わない）であるか否か判別する（ステップＳ５８）。
【０３５８】
ステップＳ５８で、合算動きベクトルと多数決トップの動きベクトルとの差異が１隣接以内ではないと判別したときには、当該参照フレームのグローバル動きベクトルは信頼性が無いと判断して、当該参照フレームは、静止画手ぶれ補正のための重ね合わせ処理をするフレームから除外し、その後の処理をスキップする（ステップＳ５９）。そして、この処理ルーチンを終了する。
【０３５９】
また、ステップＳ５８で、合算動きベクトルと多数決トップの動きベクトルとの差異が１隣接以内であると判別したときには、ステップＳ５５で求められた合計スコアｓｕｍ＿ｓｃｏｒｅが予め定められた所定の閾値θth３以上であり、かつ、ステップＳ３７で求められた合計スコアｍａｎｙ＿ｓｃｏｒｅが予め定められた所定の閾値θth４以上であるか否か判別する（図４２のステップＳ６１）。
【０３６０】
ステップＳ６１で、合計スコアｓｕｍ＿ｓｃｏｒｅおよび合計スコアｍａｎｙ＿ｓｃｏｒｅの一方または両者が、閾値θth３および閾値θth４以上である条件を満足しなかったときには、ステップＳ５９に進んで、当該参照フレームは、静止画手ぶれ補正のための重ね合わせ処理をするフレームから除外し、その後の処理をスキップする。そして、この処理ルーチンを終了する。
【０３６１】
また、ステップＳ６１で、合計スコアｓｕｍ＿ｓｃｏｒｅおよび合計スコアｍａｎｙ＿ｓｃｏｒｅの両者が、閾値θth３および閾値θth４以上である条件を満足したときには、ステップＳ５５でラベル付けされたターゲットブロックに対するＳＡＤテーブルのうち、「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のラベルが付与されたＳＡＤテーブルのＳＡＤ値のみを用いて、合算ＳＡＤ値を再算出し、合算縮小ＳＡＤテーブルを再算出する（ステップＳ６２）。
【０３６２】
そして、再作成により求めた再合算縮小ＳＡＤテーブルにおける最小ＳＡＤ値の座標位置およびその近傍座標位置の複数個のＳＡＤ値を用いて近似曲面補間処理を行い、グローバル動きベクトルとしての合算動きベクトルを算出し、保持する（ステップＳ６３）。この例では、このステップＳ６３では、図２３を用いて説明した３×３個の矩形領域のテーブル要素を用いる近似曲面補間処理を実行する。
【０３６３】
そして、算出された合算動きベクトルにより、当該フレームの静止画についての一つ前フレームに対する相対的な平行移動量を決定し、この決定した平行移動量を積算することにより、１枚目のフレームに対する平行移動量を算出する（ステップＳ６４）。
【０３６４】
次に、一つ前のフレームについて同様にして検出されて保持されている合算動きベクトルと、ステップＳ６３で検出された当該フレームの合算動きベクトルとの間の回転角度として、当該フレームの静止画についての一つ前のフレームに対する相対的な回転角度を算出し、この算出した回転角度を積算することにより、１枚目のフレームに対する回転角度を算出する（ステップＳ６５）。
【０３６５】
手ぶれベクトル検出部１５は、以上により手ぶれによるフレーム単位の平行移動量および回転角度の算出処理を終了し、算出結果の平行移動量および回転角度をＣＰＵ１に供給する。そして、算出結果の平行移動量および回転角度が用いられて、回転・平行移動加算部１９で、１枚目のフレームに対する重ね合わせの処理が実行される。
【０３６６】
なお、上述の説明では、ステップＳ６４およびステップＳ６５では、１枚目のフレームに対する平行移動量および回転角度をも算出するようにしたが、これらのステップＳ６４およびステップＳ６５では、一つ前のフレームに対する相対的な平行移動量および回転角度の算出のみを行うようにして、１枚目のフレームに対する平行移動量および回転角度の算出は、ＣＰＵ１が行うようにしても良い。
【０３６７】
以上で、１つの参照フレームについての手ぶれベクトル検出部１５における処理動作は終了となる。
【０３６８】
なお、図３９および図４０、また、図４１および図４２のフローチャートにおいて、ステップＳ３１〜ステップＳ３４までの処理、また、ステップＳ５１〜ステップＳ５４までの処理を手ぶれベクトル検出部１５で行い、それ以降の処理をＣＰＵ１がソフトウエアにより処理するように構成してもよい。
【０３６９】
また、手ぶれベクトル（グローバル動きベクトル）の検出に際しては、上述のようにしてグローバル動きベクトルを確保する処理手法に、さらに、従来から提案されている時間軸方向の動きベクトルの周波数から、グローバル動きベクトルを予測する手法を組み合わせることにより、更なる信頼性並びに精度の向上を図るようにしても良い。
【０３７０】
また、上述の例では、再合成縮小ＳＡＤテーブルは、ステップＳ３５またはステップＳ５５でラベル付けをした各ブロックのうちの「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のラベルが付与されたブロックの縮小ＳＡＤテーブルのＳＡＤ値のみを用いるようにしたが、ステップＳ３７またはステップＳ５７でラベル付けした各ブロックのうちの「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のラベルが付与されたブロックの縮小ＳＡＤテーブルのＳＡＤ値のみを用いるようにしても良いし、さらには、ステップＳ３５またはステップＳ５５とステップＳ３７またはステップＳ５７の両方でラベル付けをした各ブロックのうちの「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のラベルが付与されたブロックの縮小ＳＡＤテーブルのＳＡＤ値を用いて、再合算縮小ＳＡＤテーブルを生成するようにしても良い。
【０３７１】
また、上述の例においては、各ブロック毎動きベクトルに付与したラベルに対応するスコアの合計ｓｕｍ＿ｓｃｏｒｅおよびｍａｎｙ＿ｓｃｏｒｅを、動きベクトルを算出している対象の参照フレームについてのグローバル動きベクトルの評価判定の一つの材料としたが、この合計スコアの代わりに、ブロック毎動きベクトルに付与されたラベルが「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」の数が所定の閾値以上であるか否かを評価判定の材料とし、ラベルが「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」の数が所定の閾値以上であれば、高評価であると判定するようにしても良い。
【０３７２】
［第２の例］
この実施形態における手ぶれベクトル検出部１５における処理動作の流れの第２の例を、図４３〜図４５のフローチャートを参照して、以下に説明する。この第２の例は、参照フレームについてのブロック毎動きベクトルのうちの、信頼性の高いブロック毎動きベクトルのみを用いて、前述した図５〜図８に示したような手法により、参照フレームについての平行移動量および回転角度を算出するようにする場合である。
【０３７３】
この図４３〜図４５の処理も、一つの参照フレームについての処理であり、この図４３〜図４５の処理ルーチンが各参照フレームにおいて実行されるものである。この場合に、ステップＳ７１の１回目のサーチ範囲の設定処理は、最初の参照フレームについて設定したら、その後の参照フレームにおいては省略することができる。
【０３７４】
まず、１回目検波について説明する。前述の図３５に示したように、１６個のターゲットブロックについての１６個のサーチ範囲について、それぞれのターゲットブロックの中心位置を、それぞれのサーチ範囲の中心としてサーチ範囲のオフセットをゼロに設定すると共に、それぞれのサーチ範囲を、この実施形態において想定される最大範囲に設定する（図４３のステップＳ７１）。
【０３７５】
次に、１６個のターゲットブロックについて、それぞれ設定されたサーチ範囲において前述した縮小ＳＡＤテーブルおよびブロック毎動きベクトルの算出処理を実行する（ステップＳ７２）。このステップＳ７２の詳細処理ルーチンは後述する。
【０３７６】
そして、１６個のターゲットブロックについての縮小ＳＡＤテーブルの生成が終了すると、１６個の縮小ＳＡＤテーブルにおいて、図４に示した（式３）により、サーチ範囲のそれぞれで対応する参照ブロック位置のＳＡＤ値を合算する処理を行い、縮小ＳＡＤテーブルと同一サイズである一つのサーチ範囲内の複数参照ブロック位置分の合算縮小ＳＡＤテーブルを生成する（ステップＳ７３）。
【０３７７】
次に、生成した合算縮小ＳＡＤテーブルにおいて、最小ＳＡＤ値を検出し、検出した最小ＳＡＤ値とその近傍の複数ＳＡＤ値を用いて、前述した近似曲面補間の処理を行って、合算動きベクトルを算出する（ステップＳ７４）。
【０３７８】
次に、ステップＳ７４で算出された合算動きベクトルを基準にして、１６個の縮小ＳＡＤテーブルのＳＡＤ値と、ブロック毎動きベクトルとから、図１３に示した条件の判定を行い、１６個のターゲットブロックのそれぞれについての縮小ＳＡＤテーブルについての前述したような「ＴＯＰ」、「ＮＥＸＴ＿ＴＯＰ」、「ＮＥＡＲ＿ＴＯＰ」、「ＯＴＨＥＲＳ」のラベル付けを行う。このとき、「ＮＥＡＲ＿ＴＯＰ」、「ＯＴＨＥＲＳ」のラベル付けをしたターゲットブロックについては、信頼性が低いため使用しないことを意味するマスクフラグを立てる（ステップＳ７５）。
【０３７９】
次に、ラベル「ＴＯＰ」が付与されたターゲットブロックの数が、予め定められた所定の閾値θth５未満であるか否か判別する（ステップＳ７６）。ラベル「ＴＯＰ」が付与されたターゲットブロックの数が、閾値θth５未満であると判別したときには、ラベル「ＮＥＸＴ＿ＴＯＰ」が付与されたターゲットブロックの数が、予め定められた所定の閾値θth６未満であるか否か判別する（ステップＳ７７）。
【０３８０】
このステップＳ７７で、ラベル「ＮＥＸＴ＿ＴＯＰ」が付与されたターゲットブロックの数が、閾値θth６未満であると判別したときには、当該参照フレームは、静止画手ぶれ補正のための重ね合わせ処理をするフレームから除外し、その後の処理をスキップする（ステップＳ７８）。そして、この処理ルーチンを終了する。
【０３８１】
また、ステップＳ７６でラベル「ＴＯＰ」が付与されたターゲットブロックの数が、閾値θth５以上であると判別したとき、また、ステップＳ７７でラベル「ＮＥＸＴ＿ＴＯＰ」が付与されたターゲットブロックの数が、閾値θth６以上であると判別したときには、マスクフラグが立っていないラベルが「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のターゲットブロックの縮小ＳＡＤテーブルについて、前述した図２０、図２３、図２６、図３０により説明したような近似曲面補間の処理を行って、高精度（小数点精度）のブロック毎動きベクトルを算出する（ステップＳ７９）。
【０３８２】
次に、前述の図５および図６を用いて説明したようにして、ステップＳ７９で算出された信頼性の高いブロック毎動きベクトルのみを用いて当該フレームについての前フレームに対する平行移動量の算出を行う（ステップＳ８０）。ここで、算出された平行移動量は、前述の第１の例におけるグローバル動きベクトルに対応するものであり、これは２回目検波の際のサーチ範囲のオフセットの設定に利用される。以上で、１回目検波の処理は終了である。
【０３８３】
次に、手ぶれベクトル検出部１５は、図４４および図４５に示す２回目検波を続いて実行する。
【０３８４】
すなわち、１６個のターゲットブロックについての１６個のサーチ範囲を、図１５（Ｂ）に示したように、ステップＳ８０で確保した１回目検波で得られた平行移動量分だけオフセットした位置を中心としたものとし、かつ、１回目検波時よりも狭い範囲として設定する（図４４のステップＳ８１）。
【０３８５】
次に、１６個のターゲットブロックについて、それぞれ設定されたサーチ範囲において前述した縮小ＳＡＤテーブルおよびブロック毎動きベクトルの算出処理を実行する（ステップＳ８２）。
【０３８６】
そして、ステップＳ８２での複数個のターゲットブロックについての縮小ＳＡＤテーブルの生成が終了すると、１回目検波でマスクフラグが立てられたターゲットブロックを除く、ラベル「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のターゲットブロックについての縮小ＳＡＤテーブルにおいて、図４に示した（式３）により、サーチ範囲のそれぞれで対応する参照ブロック位置のＳＡＤ値を合算する処理を行い、縮小ＳＡＤテーブルと同一サイズである一つのサーチ範囲内の複数参照ブロック位置分の合算縮小ＳＡＤテーブルを生成する（ステップＳ８３）。なお、ステップＳ８２の縮小ＳＡＤテーブルおよびブロック毎動きベクトルの算出処理を、１回目検波でマスクフラグが立てられたターゲットブロックを除く、ラベル「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のターゲットブロックについてのみ行うようにしても良い。
【０３８７】
次に、ステップＳ８３で生成した合算縮小ＳＡＤテーブルにおいて、最小ＳＡＤ値を検出し、検出した最小ＳＡＤ値とその近傍の複数ＳＡＤ値を用いて、前述した近似曲面補間の処理を行って、小数精度の合算動きベクトルを算出する（ステップＳ８４）。
【０３８８】
次に、ステップＳ８４で算出された合算動きベクトルを基準にして、１回目検波でマスクフラグが立てられていないターゲットブロックについての縮小ＳＡＤテーブルのＳＡＤ値と、そのブロック毎動きベクトルとから、図１３に示した条件の判定を行い、前記のターゲットブロックのそれぞれについての縮小ＳＡＤテーブルについての前述したような「ＴＯＰ」、「ＮＥＸＴ＿ＴＯＰ」、「ＮＥＡＲ＿ＴＯＰ」、「ＯＴＨＥＲＳ」のラベル付け行うとともに、「ＮＥＡＲ＿ＴＯＰ」、「ＯＴＨＥＲＳ」のラベル付けをしたターゲットブロックについては、信頼性が低いため使用しないことを意味するマスクフラグを立てる（ステップＳ８５）。
【０３８９】
次に、マスクフラグが立てられていないターゲットブロックの数が、予め定められている所定の閾値θth７未満であるか否か判別し（ステップＳ８６）、所定の閾値θth７未満であると判別したときには、当該参照フレームは、静止画手ぶれ補正のための重ね合わせ処理をするフレームから除外し、その後の処理をスキップする（ステップＳ８７）。そして、この処理ルーチンを終了する。
【０３９０】
ステップＳ８６で、マスクフラグが立てられていないターゲットブロックの数が、予め定められている所定の閾値θth７以上であると判別したときには、マスクフラグが立っていないラベルが「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のターゲットブロックの縮小ＳＡＤテーブルについて、前述した図２０、図２３、図２６、図３０により説明したような近似曲面補間の処理を行って、高精度（小数点精度）のブロック毎動きベクトルを算出する（ステップＳ８８）。
【０３９１】
次に、前述の図５および図６を用いて説明したようにして、ステップＳ８８で算出された信頼性の高いブロック毎動きベクトルのみを用いて当該フレームについての前フレームに対する平行移動量（α，β）の算出を行う（図４５のステップＳ９１）。
【０３９２】
また、前述の図６〜図８を用いて説明したようにして、ステップＳ８８で算出された信頼性の高いブロック毎動きベクトルのみを用いて当該フレームについての前フレームに対する回転角度γの算出を行う（ステップＳ９２）。
【０３９３】
次に、ステップＳ９１で求められた平行移動量（α，β）と、ステップＳ９２で求められた回転角度γとを元にして、各ターゲットブロックについての理想的なブロック毎動きベクトルを算出し、その理想的なブロック毎動きベクトルと、実際に算出された各ターゲットブロックについてのブロック毎動きベクトルＶｉとの誤差ＥＲＲｉを計算するとともに、その総和ΣＥＲＲｉを算出する（ステップＳ９３）。ここで、誤差ＥＲＲｉは、図４６の（式Ｈ）により算出することができる。そして、算出された誤差の総和ΣＥＲＲｉは、当該フレームの誤差の総和となる。
【０３９４】
なお、前述の（式６）について説明したように、複数の被験者による手ぶれによる回転角度の測定値は、非常に小さいことが確認されており、このため、回転行列Ｒについては、ｃｏｓγ≒１、ｓｉｎγ≒γであるとすることができるので、図４６のように表すことができるものである。
【０３９５】
次に、ステップＳ９３で算出された誤差の総和ΣＥＲＲｉが、予め定められている所定の閾値θth８未満であるか否か判別し（ステップＳ９４）、所定の閾値θth８未満ではないと判別したときには、ステップＳ９３で算出された各ターゲットブロックについてのブロック毎動きベクトルＶｉの誤差ＥＲＲｉのうちで、最大値となっているターゲットブロックについてマスクフラグを立てる（ステップＳ９５）。
【０３９６】
そして、ステップＳ９５の次には、図４４のステップＳ８３に戻り、マスクフラグが立てられたターゲットブロックを除くターゲットブロックについての縮小ＳＡＤテーブルにおいて、図４に示した（式３）により、サーチ範囲のそれぞれで対応する参照ブロック位置のＳＡＤ値を合算する処理を再度行い、縮小ＳＡＤテーブルと同一サイズである一つのサーチ範囲内の複数参照ブロック位置分の合算縮小ＳＡＤテーブルを生成する。そして、前述したステップＳ８４以降の処理を繰り返すようにする。
【０３９７】
また、ステップＳ９４で、ステップＳ９３で算出された誤差の総和ΣＥＲＲｉが、所定の閾値θth８未満であると判別したときには、ステップＳ９１およびステップＳ９２で算出された平行移動量（α，β）および回転角度γを、手ぶれ成分として確定し、この２回目検波処理を終了する。
【０３９８】
そして、手ぶれベクトル検出部１５は、算出結果の平行移動量および回転角度をＣＰＵ１に供給する。ＣＰＵ１は、受け取った算出結果の平行移動量および回転角度から、１枚目のフレームに対する平行移動量および回転角度を算出し、それを回転・平行移動加算部１９に渡す。そして、回転・平行移動加算部１９では、受け取った平行移動量および回転角度を用いて、１枚目のフレームに対する重ね合わせの処理を実行する。
【０３９９】
なお、この第２の例においても、手ぶれベクトル検出部１５で、１枚目のフレームに対する平行移動量および回転角度を算出してもよい。
【０４００】
また、この例においても、図４３のステップＳ７１〜ステップＳ７４までの処理、および図４４のステップＳ８１〜ステップＳ８４までの処理を手ぶれベクトル検出部１５で行い、それ以降の処理をＣＰＵ１がソフトウエアにより処理するように構成してもよい。
【０４０１】
また、上述の例では、ブロック毎動きベクトルの信頼性の判定を行うグローバル動きベクトルは、合算動きベクトルを用いるようにしたが、多数決トップの動きベクトルを基準に用いても良い。
【０４０２】
なお、１回目検波の場合には、上述した図３８に示したような第１の例の方法を用いて、グローバル動きベクトルとしての合算動きベクトルから第２の検波のサーチ範囲オフセットを定め、２回目検波は、図４４および図４５を用いて説明した第２の例の方法を用いるようにしても良い。
【０４０３】
すなわち、１回目検波の場合、元々、各ブロック毎動きベクトルの精度がそれほど期待できないため、図５および図６を用いた平行移動量を求める手法を用いずに、ラベル「ＴＯＰ」および「ＮＥＸＴ＿ＴＯＰ」のターゲットブロックについてのブロックマッチングの結果から求めたグローバル動きベクトルにより、２回目の検波のサーチ範囲オフセットを定めるようにしても良い。
【０４０４】
一般に、手ぶれに回転成分が含まれている場合には、より確度の高い手ぶれの平行移動成分の算出方法として、図５および図６を用いて説明した手法が有効であるが、この手法が活かせるのは、精度の高いブロック毎動きベクトルが得られる２回目以降の検波時であるからである。
【０４０５】
なお、１回目検波の後、グローバル動きベクトルや平行移動量のみにより２回目検波のサーチオフセットを定めるのではなく、１回目検波の後、前のフレームのグローバル動きベクトルとの間での回転角度や、前述した図７および図８を用いて説明した回転角度の算出方法により回転角度までも算出しておき、２回目検波のサーチ範囲オフセットを、回転角度にも併せて、各ターゲットブロック毎に独立して設定するようにしても良い。このようにした場合には、よりサーチ範囲を限定することができて、精度や処理速度の向上が期待できる。
【０４０６】
また、上述の説明では、１回目検波および２回目検波の両方において、合算動きベクトルに近似するブロック毎動きベクトルを有効なブロック毎動きベクトルとしたが、２回目検波では、１回目検波でマスクフラグが立てられたターゲットブロック以外のすべてのターゲットブロックについてのブロック毎動きベクトルを有効とするようにしてもよい。２回目検波では、各ブロック毎動きベクトルの精度が高く、手ぶれの回転成分まで検出可能であるため、これらは平均化された合算動きベクトルトルと類似するとは限らない場合があるからである。
【０４０７】
上述した手ぶれベクトル検出処理は、静止画の場合には、動画に比較して処理時間に余裕がある代わりに精度が要求されるため、非常に有効である。より精度を高めるために、上述のような２回検波ではなく、３回以上の複数回の検波を行うようにしても良い。その場合には、最終回までは、サーチ範囲オフセットを伴うサーチ範囲の絞り込み、および高信頼度のブロック毎動きベクトルの探索を行い、最終回において、例えば図４４および図４５に示したようにして、平行移動量および回転角度の算出をする。
【０４０８】
［ステップＳ３２、Ｓ５２、Ｓ７２、Ｓ８２の処理ルーチン例］
次に、図３９のステップＳ３２、図４１のステップＳ５２、図４３のステップＳ７２および図４４のステップＳ８２における各ターゲットブロックについての縮小ＳＡＤテーブル生成処理およびブロック毎動きベクトル算出の処理ルーチンの例を説明する。
【０４０９】
＜第１の例＞
図４７および図４８は、ステップＳ３２、Ｓ５２、Ｓ７２、Ｓ８２における各ターゲットブロックについての縮小ＳＡＤテーブルおよびブロック毎動きベクトル算出処理ルーチンの第１の例を示すものである。
【０４１０】
先ず、前述の図３５に示したようなサーチ範囲ＳＲ内の１つの参照ブロック位置に対応する参照ベクトル（ｖｘ、ｖｙ）を指定する（ステップＳ１０１）。前述したように、（ｖｘ，ｖｙ）は、ターゲットブロックのフレーム上の位置（サーチ範囲の中心位置である）を基準位置（０，０）としたときに、指定された参照ベクトルにより示される位置を示し、ｖｘは指定された参照ベクトルによる、基準位置からの水平方向のずれ量成分であり、また、ｖｙは指定された参照ベクトルによる、基準位置からの垂直方向成分のずれ量成分である。そして、前述の従来例で述べたのと同様に、ずれ量ｖｘ、ｖｙは、画素を単位とした値とされている。
【０４１１】
ここで、サーチ範囲の中心位置を前記基準位置（０，０）とし、サーチ範囲を、水平方向には±Ｒｘ、垂直方向には±Ｒｙとしたとき、
−Ｒｘ≦ｖｘ≦＋Ｒｘ、−Ｒｙ≦ｖｙ≦＋Ｒｙ
とされるものである。
【０４１２】
次に、ターゲットブロックＩｏ内の１つの画素の座標（ｘ，ｙ）を指定する（ステップＳ１０２）。次に、ターゲットブロックＩｏ内の指定された１つの座標（ｘ，ｙ）の画素値Ｉｏ（ｘ，ｙ）と、参照ブロックＩｉ内の対応する画素位置の画素値Ｉｉ（ｘ＋ｖｘ，ｙ＋ｖｙ）との差分絶対値αを、前述した（式１）に示したようにして算出する（ステップＳ１０３）。  
そして、算出した差分絶対値αを、当該参照ブロックＩｉの参照ベクトル（ｖｘ，ｖｙ）が指し示すアドレス（テーブル要素）の、それまでのＳＡＤ値に加算し、その加算であるＳＡＤ値を、当該アドレスに書き戻すようにする（ステップＳ１０４）。すなわち、参照ベクトル（ｖｘ，ｖｙ）に対応するＳＡＤ値を、ＳＡＤ（ｖｘ，ｖｙ）と表したとき、これを、前述した（式２）、すなわち、
ＳＡＤ（ｖｘ，ｖｙ）＝Σα＝Σ｜Ｉｏ（ｘ，ｙ）−Ｉｉ（ｘ＋ｖｘ，ｙ＋ｖｙ）｜
・・・（式２）
として算出し、当該参照ベクトル（ｖｘ，ｖｙ）が指し示すアドレスに書き込むようにする。
【０４１３】
次に、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素について、上記のステップＳ１０２〜ステップＳ１０４の演算を行なったか否かを判別し（ステップＳ１０５）、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素については、未だ、その演算は終了していないと判別したときには、ステップＳ１０２に戻り、ターゲットブロックＩｏ内の次の座標（ｘ，ｙ）の画素位置を指定し、このステップＳ１０２以降の処理を繰り返す。
【０４１４】
以上のステップＳ１０１〜ステップＳ１０５までの処理は、図８０に示したフローチャートのステップＳ１〜ステップＳ５と全く同様である。
【０４１５】
この実施形態では、ステップＳ１０５で、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素について、上記の演算を行なったと判別したときには、縮小倍率を１／ｎとして、参照ベクトル（ｖｘ，ｖｙ）を１／ｎに縮小した参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）を算出する（ステップＳ１０６）。
【０４１６】
次いで、参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）の近傍の複数の参照ベクトル、この例では、上述したように４個の近傍参照ベクトルを検知する（ステップＳ１０７）。そして、検知した４個の近傍参照ベクトルのそれぞれに対応するテーブル要素として分散加算すべき値を、前述したように、参照縮小ベクトルと近傍参照ベクトルとがそれぞれ示す位置の関係に基いて、ステップＳ１０４で求めたＳＡＤ値から、線形加重分散値として求める（ステップＳ１０８）。そして、求めた４個の線形加重分散値を、近傍参照ベクトルのそれぞれに対応するＳＡＤテーブル要素値に加算する（ステップＳ１０９）。
【０４１７】
このステップＳ１０９が終了すると、注目中の参照ブロックについてのＳＡＤ値の算出が終了したと判別して、サーチ範囲内の全ての参照ブロック、すなわち、全ての参照ベクトル（ｖｘ，ｖｙ）についての上記のステップＳ１０１からステップＳ１０９までの演算処理を完了したか否か判別する（図４８のステップＳ１１１）。
【０４１８】
ステップＳ１１１で、未だ、上記の演算処理を完了していない参照ベクトル（ｖｘ，ｖｙ）があると判別すると、ステップＳ１０１に戻り、上記の演算処理を完了していない次の参照ベクトル（ｖｘ，ｖｙ）を設定して、このステップＳ１０１以降の処理を繰り返す。
【０４１９】
そして、ステップＳ１１１で、上記の演算処理を完了していない参照ベクトル（ｖｘ，ｖｙ）はサーチ範囲内になくなったと判別すると、縮小ＳＡＤテーブルが完成したとして、当該完成した縮小ＳＡＤテーブルにおいて、最小値となっているＳＡＤ値を検出する（ステップＳ１１２）。
【０４２０】
次に、当該最小値となっているテーブル要素アドレス（ｍｘ，ｍｙ）のＳＡＤ値（最小値）と、その近傍の複数個、この例では、上述したように１５個の近傍テーブル要素のＳＡＤ値を用いて２次曲面を生成し（ステップＳ１１３）、その２次曲面の最小値のＳＡＤ値が対応する小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する（ステップＳ１１４）。この最小値ベクトル（ｐｘ，ｐｙ）は、小数精度の最小テーブル要素アドレスに対応している。
【０４２１】
そして、算出した小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）をｎ倍することにより、求めるべく動きベクトル（ｐｘ×ｎ，ｐｙ×ｎ）を算出する（ステップＳ１１５）。
【０４２２】
以上で、１つのターゲットブロックに対する、この実施形態におけるブロックマッチングによる動きベクトルの検出処理は、終了となる。図３５に示したような、１フレームについて設定した複数個、この例では、１６個のターゲットブロックについての縮小ＳＡＤテーブルおよび動きベクトルを算出する場合、対象とするターゲットブロックを変える毎に、サーチ範囲および縮小倍率１／ｎを再設定して、上述の図４７および図４８に示した処理を、各分割領域について繰り返すものである。
【０４２３】
なお、小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する方法としては、前述した水平方向および垂直方向の３次曲線を用いる方法を用いても良いことは言うまでもない。
【０４２４】
なお、図４７および図４８のフローチャートにおいて、ステップＳ１０１〜ステップＳ１１１までの処理を手ぶれベクトル検出部１５で行い、それ以降の処理をＣＰＵ１がソフトウエアにより処理するように構成してもよい。
【０４２５】
＜第２の例＞
上述の第１の例においては、１つの参照ブロック（参照ベクトル）について、そのＳＡＤ値を求めた後、そのＳＡＤ値から、参照縮小ベクトルの近傍の複数参照ベクトルについての分散加算値を求め、分散加算処理を行なうようにした。
【０４２６】
これに対して、この第２の例においては、参照ブロック内の各画素の、ターゲットブロックの画素との差分を検出したときに、その差分値から、参照縮小ベクトルの近傍の複数参照ベクトルについての分散加算値（ＳＡＤ値ではなく差分値）を求め、求めた差分値を分散加算処理するようにする。この第２の例によれば、１つの参照ブロック内のすべての画素についての差分演算を終了したときには、縮小ＳＡＤテーブルが生成されることになる。
【０４２７】
図４９および図５０は、この第２の例による動きベクトル検出処理のフローチャートを示すものである。
【０４２８】
図４９のステップＳ１２１〜ステップＳ１２３までの処理は、図４７のステップＳ１０１〜ステップＳ１０３までの処理と全く同様であるので、ここでは、その詳細な説明は省略する。
【０４２９】
この第２の例においては、ステップＳ１２３で、座標（ｘ，ｙ）の画素についての参照ブロックとターゲットブロック間での差分値αが算出すると、次には、縮小倍率を１／ｎとして、参照ベクトル（ｖｘ，ｖｙ）を１／ｎに縮小した参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）を算出する（ステップＳ１２４）。
【０４３０】
次に、参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）の近傍の複数の参照ベクトル、この例では、上述したように４個の近傍参照ベクトルを検知する（ステップＳ１２５）。そして、検知した４個の近傍参照ベクトルのそれぞれに対応するテーブル要素として分散加算すべき差分値を、前述したように、ステップＳ１２３で求めた差分値αから、参照縮小ベクトルと近傍参照ベクトルとがそれぞれ示す位置の関係に基いて、線形加重分散値（差分値）として求める（ステップＳ１２６）。
【０４３１】
そして、求めた４個の線形加重分散値を、近傍参照ベクトルのそれぞれに対応するテーブル要素値に加算する（ステップＳ１２７）。
【０４３２】
このステップＳ１２７が終了したら、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素について、上記のステップＳ１２２〜ステップＳ１２７の演算を行なったか否かを判別し（ステップＳ１２８）、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素については、未だ、その演算は終了していないと判別したときには、ステップＳ１２２に戻り、ターゲットブロックＩｏ内の次の座標（ｘ，ｙ）の画素位置を指定し、このステップＳ１２２以降の処理を繰り返す。
【０４３３】
ステップＳ１２８で、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素について、上記の演算を行なったと判別したときには、注目中の参照ブロックについてのＳＡＤ値の算出が終了したと判別して、サーチ範囲内の全ての参照ブロック、すなわち、全ての参照ベクトル（ｖｘ，ｖｙ）についての上記のステップＳ１２１からステップＳ１２８までの演算処理を完了したか否か判別する（図５０のステップＳ１３１）。
【０４３４】
ステップＳ１３１で、未だ、上記の演算処理を完了していない参照ベクトル（ｖｘ，ｖｙ）があると判別すると、ステップＳ１２１に戻り、上記の演算処理を完了していない次の参照ベクトル（ｖｘ，ｖｙ）を設定して、このステップＳ１２１以降の処理を繰り返す。
【０４３５】
そして、ステップＳ１２１で、上記の演算処理を完了していない参照ベクトル（ｖｘ，ｖｙ）はサーチ範囲内になくなったと判別すると、縮小ＳＡＤテーブルが完成したとして、当該完成した縮小ＳＡＤテーブルにおいて、最小値となっているＳＡＤ値を検出する（ステップＳ１３２）。
【０４３６】
次に、当該最小値となっているテーブル要素アドレス（ｍｘ，ｍｙ）のＳＡＤ値（最小値）と、その近傍の複数個、この例では、上述したように１５個の近傍テーブル要素のＳＡＤ値を用いて２次曲面を生成し（ステップＳ１３３）、その２次曲面の最小値のＳＡＤ値が対応する小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する（ステップＳ１３４）。この最小値ベクトル（ｐｘ，ｐｙ）は、小数精度の最小テーブル要素アドレスに対応している。
【０４３７】
そして、算出した小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）をｎ倍することにより、求めるべく動きベクトル（ｐｘ×ｎ，ｐｙ×ｎ）を算出する（ステップＳ１３５）。
【０４３８】
以上で、１つのターゲットブロックに対する、この第２の例におけるブロックマッチングによる動きベクトルの検出処理は、終了となる。図３５に示したような、１フレームについて設定した複数個、この例では、１６個のターゲットブロックについての縮小ＳＡＤテーブルおよび動きベクトルを算出する場合、対象とするターゲットブロックを変える毎に、サーチ範囲および縮小倍率１／ｎを再設定して、上述の図４９および図５０に示した処理を、各分割領域について繰り返すものである。
【０４３９】
なお、この第２の例においても、小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する方法としては、前述した水平方向および垂直方向の３次曲線を用いる方法を用いても良いことは言うまでもない。
【０４４０】
なお、図４９および図５０のフローチャートにおいて、ステップＳ１２１〜ステップＳ１３１までの処理を手ぶれベクトル検出部１５で行い、それ以降の処理をＣＰＵ１がソフトウエアにより処理するように構成してもよい。
【０４４１】
＜第３の例＞
図３４に示したように、この実施形態による動きベクトルの検出手法を用いた場合には、参照ベクトルの縮小倍率が１／６４の場合でも、全く異なる動きベクトルを出力するような破綻は見られないことから、実質的に１／４０９６に、ＳＡＤテーブルを削減可能である。
【０４４２】
つまり、１／４０９６に削減した縮小ＳＡＤテーブルを用意しておき、縮小倍率１／６４で１回目の動きベクトルを算出する。次に、１回目で検出したその動きベクトルを中心にしてサーチ範囲を狭め、２回目の検出を、１回目よりも小さい例えば縮小倍率１／８で行なうようにすればよい。すなわち、１回目と２回目とで縮小倍率を変えて、１回目のベクトル誤差範囲内に収まるように、２回目の縮小倍率を設定すれば、かなりの高精度で、動きベクトル検出が可能である。
【０４４３】
この第３の例の場合における動きベクトル検出処理を、図５１〜図５４のフローチャートを参照しながら説明する。
【０４４４】
この図５１〜図５４に示す第３の例は、基本的な動き検出処理として上述した第１の例を用いている。したがって、図５１のステップＳ１４１〜ステップＳ１４９の処理ステップおよび図５２のステップＳ１５１〜ステップＳ１５５までの処理ステップは、図４７のステップＳ１０１〜ステップＳ１０９の処理ステップおよび図４８のステップＳ１１１〜ステップＳ１１５までの処理ステップと全く同様である。
【０４４５】
この第３の例においては、図５２のステップＳ１５５で動きベクトルを算出したら、そこで処理を終了するのではなく、当該ステップＳ１５５で算出した動きベクトルは、１回目の動きベクトルとして、次のステップＳ１５６において、この１回目で算出した動きベクトルに基づき、同じ参照フレーム内で、サーチ範囲を絞り、また、参照ベクトルの縮小倍率を、１回目の縮小倍率１／ｎａよりも小さい縮小倍率１／ｎｂ（ここで、ｎａ＞ｎｂである）に変更する。
【０４４６】
すなわち、図５５に示すように、１回目の処理で設定されたサーチ範囲ＳＲ＿１において、ターゲットブロックＴＢについての動きベクトルＢＬＫ＿Ｖｉが算出されると、その算出された動きベクトルＢＬＫ＿Ｖｉから、参照フレームと元フレームとの間で、相関のあるブロック範囲がおおよそ検出できる。そこで、２回目の処理のサーチ範囲ＳＲ＿２としては、図５５の下側に示すように、その相関のあるブロック範囲を中心とした、絞ったサーチ範囲を設定することができる。この場合、図５２に示すように、１回目のサーチ範囲ＳＲ＿１の中心位置ＰＯｉ＿１と、２回目のサーチ範囲ＳＲ＿２の中心位置ＰＯｉ＿２との間の位置ずれ（サーチ範囲オフセット）が、１回目で検出された動きベクトルＢＬＫ＿Ｖｉに相当している。
【０４４７】
そして、この実施形態では、さらに、１回目よりも参照ベクトルに対する縮小倍率を小さくすることで、より誤差の少ない状態で、２回目の動きベクトルの算出が可能になると期待できる。
【０４４８】
こうして、ステップＳ１５６で、絞ったサーチ範囲を設定し、新たな縮小倍率を設定したら、１回目と全く同様にして、２回目の動きベクトルの検出処理を、ステップＳ１５７〜ステップＳ１５８、図５３のステップＳ１６１〜ステップＳ１６８、さらに、図５４のステップＳ１７１〜ステップＳ１７４により実行する。これらのステップの処理は、図４７のステップＳ１０１〜ステップＳ１０９の処理ステップおよび図４８のステップＳ１１１〜ステップＳ１１５までの処理ステップと全く同様である。
【０４４９】
こうして、最終的に、ステップＳ１７４において、２回目の動きベクトルとして、目的とするブロック毎動きベクトルが得られる。
【０４５０】
以上の例は、ブロック毎動きベクトルの検出方法として、前述した第１の例を用い、それを２段階、繰り返した場合であるが、サーチ範囲をさらに絞り、かつ、必要に応じて縮小倍率を変更しながら、２段階以上、繰り返すようにしても、勿論良い。
【０４５１】
また、ブロック毎動きベクトルの検出方法としては、前述した第１の例の代わりに、前述した第２の例を用いることができることは言うまでもない。また、小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する方法としては、前述した水平方向および垂直方向の３次曲線を用いる方法を用いても良いことは前述の例と同様である。
【０４５２】
なお、図５１〜図５４のフローチャートにおいて、ステップＳ１４１〜ステップＳ１６８までの処理を手ぶれベクトル検出部１５で行い、それ以降の処理をＣＰＵ１がソフトウエアにより処理するように構成してもよい。
【０４５３】
［回転・平行移動加算部１９での加算処理］
以上のようにして、手ぶれによる平行移動成分（フレームの平行移動量）と回転成分（フレームの回転角度）が、静止画のフレーム単位に求められると、回転・平行移動加算部１９で、加算（重ね合わせ）処理が行われる。
【０４５４】
この実施形態では、前述したように、様々な被写体に対して、ユーザが意図する通りに、いわゆる絵作りを行えるようにするため、この例では、３通りの加算手法を予め撮像装置に用意しておき、ユーザがその３通りの加算手法の中から、意図する絵作りに応じた加算手法を、ユーザ操作入力部３を通じて選択操作をすることにより、選択することができるようにしている。
【０４５５】
なお、前述もしたように、この実施形態では、説明の簡単のために、静止画の被写体のみの場合としているが、本質的には動画にも適用可能である。動画の場合、リアルタイム性のため加算枚数に上限はあるが、フレーム毎にこの実施形態の手法を用いることにより、ノイズ・リダクション効果の高い動画を生成するシステムへの応用も、全く同じ手段で実現することができる。
【０４５６】
この実施形態では、加算（重ね合わせ）手法として、単純加算手法、平均加算手法、トーナメント加算手法の３つの手法を、選択的に実現できるように、図１の例の撮像装置の回転・平行移動加算部１９は構成されている。以下に、各手法の詳細を順に説明する。なお、この実施形態では、重ね合わせる画像フレームの枚数は、例えば８枚とされている。
【０４５７】
（１）単純加算手法
この単純加算手法の場合における回転・平行移動加算部１９と、画像メモリ４との関係を考慮したブロック図を図５６に示す。この場合、回転・平行移動加算部１９には、回転・平行移動処理部１９１と、ゲインアンプ１９２および１９３と、加算部１９４とが設けられる。
【０４５８】
前述したように、画像メモリ４のフレームメモリ４３は、加算後の画像フレームＦｍを格納するが、順次画像フレームが入力されて来る場合、１枚目の画像フレームＦ１が基準となるため、１枚目の画像フレームＦ１は、直接、このフレームメモリ４３に書き込まれる。一方、２枚目以降の画像フレームＦｊ（ｊ＝２，３，４・・・）は、画像メモリ４のフレームメモリ４２に格納された後、回転・平行移動加算部１９に供給される。なお、画像フレームの加算結果は平行移動量（α、β）および回転角度γに応じた分のずれ分を見込んだ画像フレームの大きさを想定する必要があるので、画像メモリ４の少なくともフレームメモリ４３は、１フレーム分よりも平行移動（α、β）および回転角度γに応じた分のずれ分を見込んだ分だけ広い領域分を備えるメモリとされている。
【０４５９】
回転・平行移動処理部１９１は、ＣＰＵ１からの１枚目の画像フレームＦ１に対する平行移動量（α，β）および回転角度γの情報を受けて、２枚目以降の画像フレームＦｊを平行移動させ、また、回転させる。回転・平行移動処理部１９１は、１枚目の画像フレームＦ１に対する相対手ぶれを相殺するように、２枚目以降の画像フレームＦｊを、フレームメモリ４２から読み出すことで平行移動および回転処理をする。
【０４６０】
すなわち、回転・平行移動処理部１９１は、フレームメモリ４３からの１枚目または加算結果後の画像フレームＦｍの画素と重ね合わせるべきフレームメモリ４２からの２枚目以降の画像フレームの画素アドレスを、ＣＰＵ１からの、画像フレームＦｊについての１枚目の画像フレームに対する平行移動量（α，β）および回転角度γの情報から計算し、フレームメモリ４２の、その計算結果のアドレスから画像フレームＦｊの画素データを読み出す。
【０４６１】
なお、この実施形態では、フレームメモリ４２からの２枚目以降の画像フレームの加算処理時には、フレームメモリ４３からは、１枚目の画像フレームが書き込まれたアドレス位置の画素データが順次に読み出されるものとされる。そして、回転・平行移動処理部１９１は、フレームメモリ４３の読み出しアドレス位置に対応する、２枚目以降の画像フレームについてのフレームメモリ４２の画素アドレスを順次に計算するものである。
【０４６２】
ゲインアンプ１９２は、回転・平行移動処理部１９１からの、平行移動され、また、回転された２枚目以降の画像フレームＦｊの画素データ（輝度信号成分および色差信号成分）のそれぞれを、ゲイン（乗算係数）ｗ１倍して、加算部１９４に供給する。また、ゲインアンプ１９３は、フレームメモリ４３からの１枚目あるいは加算後の画像フレームＦｍの画素データのそれぞれを、ゲイン（乗算係数）ｗ２倍して、加算部１９４に供給する。
【０４６３】
加算部１９４は、加算後の画像フレームＦｍの画素データのそれぞれを、フレームメモリ４３の同じアドレスに書き戻す（上書きする）。
【０４６４】
この実施形態では、読み出された２枚目以降の画像フレームＦｊ（加算画像という）の画素データに対するゲインアンプ１９２のゲインｗ１は、常に、ｗ１＝１とされる。
【０４６５】
一方、フレームメモリ４３からの１枚目あるいは加算結果の画像フレームＦｍ（被加算画像という）の画素データに対するゲインアンプ１９３のゲインｗ２は、２枚目以降の画像フレームＦｊに、対応する加算すべき画素があるときと、対応する加算すべき画素が存在しないとき（２枚の画像フレームが平行移動および回転により重なっていない領域であるとき）とで、異なるものとされる。
【０４６６】
すなわち、加算画像を回転および平行移動させる結果、被加算画像に加算すべき加算画像の画素が存在しない領域が必ず存在するが、ゲインｗ２は、加算すべき画素があるときには、ｗ２＝１とされる。また、加算すべき画素が無いときには、重ね合わせられる加算画像フレームＦｊが何枚目であるかにより異なる値となり、ｊ枚目の画像フレームについてのゲインｗ２は、ｗ２＝ｊ／（ｊ−１）とされる。
【０４６７】
この実施形態では、このようにすることにより、加算結果の画像において、加算すべき画素が存在している領域と存在していない領域との境界部分における違和感を削減するようにしている。
【０４６８】
このようなゲイン制御のため、この実施形態では、回転・平行移動処理部１９１では、画像フレームＦｍの画素と重ね合わせるべきフレームメモリ４２からの２枚目以降の画像フレームの画素アドレスが、フレームメモリ４２にあるか否か、つまり、加算すべき画素があるか無いか、を示す情報ＥＸを、ＣＰＵ１に供給するようにする。ＣＰＵ１は、これを受けて、ゲインアンプ１９３のゲインｗ２を制御するようにする。
【０４６９】
なお、ＣＰＵ１がゲインアンプ１９３のゲインｗ２を制御するのではなく、回転・平行移動処理部１９１が、画像フレームＦｍの画素と重ね合わせるべきフレームメモリ４２からの２枚目以降の画像フレームの画素アドレスがフレームメモリ４２にあるか否かに応じたゲインｗ２をゲインアンプ１９３に供給するように構成しても良い。
【０４７０】
この単純加算手法の場合における各ｊ枚目の画像フレームについての加算の様子を、図５７に示す。図５７には、加算部１９４とフレームメモリ４３とが繰り返し使用されて、複数枚、図５７の例では８枚の画像フレームが重ね合わされる様子を示している。図５７において、丸数字は、何枚目の画像フレームであるかを示しており、また、被加算画像のゲイン（乗算係数）ｗ２のうち、括弧で括った値は、加算画素が存在しない場合の値である。
【０４７１】
ところで、回転・平行移動加算部１９においては、上述したように、フレームメモリ４２から、参照フレームの画像（加算画像）を読み出すと共に、フレームメモリ４３から基準画像または加算結果の画像（被加算画像）を読み出して、両者を加算するようにするが、その際、回転・平行移動処理部１９１は、図５６において点線で示すように、フレームメモリ４２および４３にアドレス制御信号を送って、読み出しアドレスを制御するようにする。なお、このアドレス制御は、回転・平行移動処理部１９１が行なうのではなく、ＣＰＵ１が行なってもよいことは言うまでもない。
【０４７２】
そして、回転・平行移動処理部１９１は、上述したように、フレームメモリ４３の読み出しアドレスとしては、基準画像の画素位置（Ｘ，Ｙ）について、０ラインの０番目の画素位置から水平方向に昇順に変更指定し、同じライン番号の最後まで指定すると、次のライン番号を昇順に変更指定してゆくというように、ラスタースキャンと同様のアドレス制御を行なう。
【０４７３】
一方、回転・平行移動処理部１９１は、フレームメモリ４２からの参照フレームの読み出しは、算出された平行移動量（α、β）および回転角度γだけ移動させて読み出すようにするが、フレームメモリ４３からの被加算画像の読み出し位置に応じた、フレームメモリからの加算画像の読み出し位置を、図１０（Ｂ）の（式１３）に基づいて計算して、アドレス指定することになる。
【０４７４】
このときのフレームメモリ４２からの参照フレーム（加算画像）の、メモリ上のアクセスイメージは、図５８の上方に示すようなものとなる。そして、このとき、垂直座標の少数成分が同じ値の点は、画面の垂直線に対して回転角度γだけ傾いた線（図５８で点線で示す線）上に並ぶ。これは、図５８の右上に示すように、図１０（Ｂ）の（式１３）において、ｙが１増加すると、Ｙも１だけ増加するからである。
【０４７５】
これは、つまり、フレームメモリ４２からの加算画像についてのメモリアクセスにおいては、図５８の下側に示すように、被加算画像（基準画面）について順次変更される画素位置（Ｘ，Ｙ）に対応する画素位置（ｘ，ｙ）のアドレスは、水平方向の途中で垂直方向に変化させる（垂直方向の段差を設ける）必要があるが、図５８の下側に示すように、この画素位置（ｘ，ｙ）のアドレスが垂直方向に段差を生じる位置の水平座標は、ライン毎に少しずつずれてゆくことを意味している。
【０４７６】
したがって、フレームメモリ４２，４３から、いわゆるバースト転送により画像データを読み出す場合、ライン毎に、垂直座標が変わる水平方向の画素位置が変わるために、常に、一定の水平方向の画素位置でバースト転送の初期アドレスを設定することはできず、バースト転送効率の低下を招くことになる。しかも、算出された回転角度γや平行移動量（α、β）の大きさによって、バースト転送の効率低下の程度が変化するため、バースト転送の効率低下の平均ケースとワーストケースとの処理速度差が大きくなってしまうという問題もある。
【０４７７】
この問題を避ける方法としては、図５９に示すように、フレームメモリ４２と回転・平行移動処理部１９１との間に、複数ライン分のラインメモリからなるバッファメモリ回路４０１を設ける方法がある。
【０４７８】
この方法においては、フレームメモリ４２からは平行移動および回転制御なしに、バースト転送により画像データを読み出し、バッファメモリ回路４０１に供給する。そして、回転・平行移動処理部１９１は、前述したような（式１３）に基づく画素位置の計算を行なって、その計算結果の画素位置のデータを、バッファメモリ回路４０１から読み出すようにする。
【０４７９】
なお、この方法を用いる場合には、バッファメモリ回路４０１に用意するラインメモリのコストが問題になる。そこで、図６０に示すように、参照フレーム１０２を、水平方向に分割して、縦短冊上にフレームを分割し、その縦短冊単位１０２１，１０２２，・・・，１０２３について、回転・平行移動加算処理を行うようにすると良い。バッファメモリ回路４０１は、縦短冊単位の画像データを扱う分のラインメモリを用意すればよいからである。
【０４８０】
しかし、このようにしても、バッファメモリのコストが必要になることは否めない。そこで、この実施形態では、画質よりもコストが優先され、処理時間やバス帯域削減の重要度も高い場合として、次のような手法を用いる。
【０４８１】
すなわち、前記フレームメモリ４２からの画像データの読み出しにおける前記垂直方向の段差が生じる水平方向の画素位置を、図５８に示したように、垂直方向に対して回転角度γ分ずれた位置に正しく設定するのではなく、図６１に示すように、バースト転送の境目のアドレスと、前記垂直方向の段差を生じる水平方向の画素位置とを一致させるように、アドレスを生成する。
【０４８２】
ここで、この実施形態では、図６１に示すように、バースト転送の中央地点、つまり、バースト転送の境目の隣り合うアドレスの中間位置、で、次の前記垂直方向の段差を生じる水平方向位置の判定を行なうようにする。そのため、常にバースト転送単位の半分先まで、アドレス計算のための先読みを行なうようにする。
【０４８３】
バースト転送の境目で、前記垂直方向の段差を生じる水平方向位置の判定を行なうようにすると、最大で１ラインのズレが発生するのに対して、この実施形態のように、バースト転送の中央地点で、前記垂直方向の段差を生じる水平方向位置の判定を行なうようにすると、ズレを最大でも０．５ラインに抑えることができるという効果がある。
【０４８４】
なお、解像度変換部１６における垂直補間フィルタの位相を、上記のズレに合わせて滑らか制御すると、ズレによる画質への影響を軽減することができて効果的である。
【０４８５】
ところで、図６１に示したこの実施形態の手法は、あえて誤差を許容することで、バースト転送効率を向上を目指した方法であるので、画質に対する影響の問題が考えられる。
【０４８６】
しかしながら、実際には、この実施形態の上記の手法を用いても、画質劣化は殆ど問題にならない程度である。通常の撮像静止画において、画素精度の精細度は事実上、実現できていないことや、動きベクトルの検出精度の誤差の問題もあり、フレームメモリ４２からの平行移動および回転を伴う画像の読み出しの精度のみを追求しても、意味を成さないからである。しかも、複数の画像の加算を繰り返すことにより、位相レベルのずれに起因する、最終加算画像への影響は、極めて小さいものとなるからである。
【０４８７】
［単純加算手法の処理手順のフローチャート］
図６２に、この実施形態の撮像装置における、この単純加算手法を回転・平行移動加算部１９で実行する場合の処理手順を説明するためのフローチャートを示す。なお、この図５５のフローチャートにおける各ステップは、主としてＣＰＵ１の制御に基づいてなされるものである。
【０４８８】
まず、ＣＰＵ１は、１枚目の画像フレームをフレームメモリ４３に保存するように制御する（ステップＳ１８１）。次に、ＣＰＵ１は、処理対象の画像フレームの枚数を示す変数ｊを、２枚目を示すｊ＝２にする（ステップＳ１８２）。
【０４８９】
そして、ＣＰＵ１は、ｊ枚目の画像フレームをフレームメモリ４２に保存するように制御する（ステップＳ１８３）。次に、前述したように、ＣＰＵ１の制御指示の下、手ぶれベクトル検出部１５は、１枚目の画像フレームに対するｊ枚目の画像フレームのグローバル動きベクトルあるいは平行移動量と、回転角度とを算出し、算出した平行移動量および回転角度をＣＰＵ１に送る（ステップＳ１８４）。
【０４９０】
次に、回転・平行移動加算部１９は、ＣＰＵ１からの平行移動量と、回転角度とを受けて、ｊ枚目の画像フレームを、回転および平行移動させながら、フレームメモリ４２から読み出す。また、同時に、フレームメモリ４３からは１枚目あるいは加算結果の画像フレームを読み出す（ステップＳ１８５）。なお、フレーム４２から読み出された画像を、ここでは加算画像と称し、また、フレーム４３から読み出された画像を被加算画像と称することとする。
【０４９１】
次に、回転・平行移動加算部１９は、加算画像の画素データと被加算画像の画素データとを、ゲインｗ１およびｗ２を両方とも「１」として加算する。ただし、被加算画像のうち加算画像と重ならない領域、すなわち、被加算画像の画素データに対して加算する加算画像の画素データが存在しないときには、加算画像の画素データに対するゲインｗ１は、ｗ１＝０、被加算画像の画素データに対するゲインｗ２は、ｗ２＝ｊ／（ｊ−１）とする（ステップＳ１８６）。
【０４９２】
そして、回転・平行移動加算部１９は、加算結果の画像データを、フレームメモリ４３に書き戻す（ステップＳ１８７）。
【０４９３】
次に、ＣＰＵ１は、所定の枚数の画像フレームを重ね合わせたか否か判別し（ステップＳ１８８）、所定の枚数の重ね合わせを終了していないと判別したときには、処理対象の画像フレームの枚数を示す変数ｊをインクリメントして、ｊ＝ｊ＋１にする（ステップＳ１８９）。そして、ステップＳ１８３に戻り、このステップＳ１８３以降の処理を繰り返す。
【０４９４】
また、ステップＳ１８８で、所定の枚数の重ね合わせを終了したと判別したときには、ＣＰＵ１は、この図６２の処理ルーチンを終了する。
【０４９５】
この単純加算手法は、加算画素が存在しない領域を除けば、被加算画像と加算画像とを、輝度信号および色差信号の区別無く、常に両者のゲインを「１」として加算してゆくものであり、加算画像は徐々に明るくなってゆく。
【０４９６】
このため、この単純加算手法を用いる場合には、連写を繰り返しながら、途中の加算結果（被加算画像）をモニター表示し、画像が意図した明るさに達した時点で、ユーザが連写を止める、といった撮影モードを実現することができる。
【０４９７】
本来ならば長時間露光が必要な低照度の被写体を、カメラのＩＳＯ感度を抑えながら連写するため、ユーザは、加算画像が徐々に明るくなって行く様子を確認でき、これは長時間露光のイメージと合っている。途中加算画像と同時に、そのヒストグラムをモニターできるようにすれば、なお好適である。また、当然、撮像装置側で自動的に加算枚数を決定しても良い。
【０４９８】
（２）平均加算手法
この平均加算手法は、上述した単純加算手法と類似しているが、加算画像および被加算画像についてのゲインｗ１およびｗ２の値が、単純加算手法とは異なる。すなわち、この平均加算手法においては、１枚目画像に対する２枚目画像の加算においては、ゲインｗ１およびｗ２の値は、ともに１／２としてゲインを掛けて加算するが、ｊ枚目の加算時には、加算画像のゲインｗ１は、ｗ１＝１／ｊ、非加算画像のゲインｗ２は、ｗ２＝（ｊ−１）／ｊとして加算する。
【０４９９】
つまり、加算結果である被加算画像の明るさを、加算枚数に依らず一定にしつつ、ｊ枚の加算画像のそれぞれの重みを等しくするようにする。ただし、平行移動及び回転により、被加算画像の画素と加算するべき加算画像の画素が存在しない場合は、被加算画像の画素データに対するゲインｗ２を１とすることで、加算結果の明るさを、フレーム全体に渡って維持するようにする。
【０５００】
この平均加算手法の場合における回転・平行移動加算部１９と、画像メモリ４との関係を考慮したブロック図を図６３に示す。この場合、回転・平行移動加算部１９には、回転・平行移動処理部１９１と、ゲインアンプ１９２および１９３と、加算部１９４とが設けられるのは、図８０に示した単純加算手法の場合と同じであるが、ゲインアンプ１９３および１９４のゲインｗ１およびゲインｗ２を、加算する画像フレームが何枚目であるかにより異なるので、これらゲインｗ１およびゲインｗ２の値が、ＣＰＵ１から供給されるようにされる点が、単純加算手法の場合と異なる。
【０５０１】
なお、フレームメモリ４２からの画像データの読み出し制御は、この平均加算手法においても、前述した単純加算手法の場合と全く同様に行なわれるものである。
【０５０２】
この平均加算手法の場合における各ｊ枚目の画像フレームについての加算の様子を、図６４に示す。図６４には、加算部１９４とフレームメモリ４３とが繰り返し使用されて、複数枚、図６４の例では８枚の画像フレームが重ね合わされる様子を示している。図６４において、丸数字は、何枚目の画像フレームであるかを示しており、また、被加算画像のゲイン（乗算係数）ｗ２のうち、括弧で括った値は、加算画素が存在しない場合の値である。
【０５０３】
図６４に示すように、ｊ枚目の加算画像のゲインｗ１は、ｗ１＝１／ｊとされ、また、ｊ枚目の加算における非加算画像のゲインｗ２は、ｗ２＝（ｊ−１）／ｊとされる。
【０５０４】
図６５に、この実施形態の撮像装置における、この平均加算手法を回転・平行移動加算部１９で実行する場合の処理手順を説明するためのフローチャートを示す。なお、この図６５のフローチャートにおける各ステップは、主としてＣＰＵ１の制御に基づいてなされるものである。
【０５０５】
まず、ＣＰＵ１は、１枚目の画像フレームをフレームメモリ４３に保存するように制御する（ステップＳ１８１）。次に、ＣＰＵ１は、処理対象の画像フレームの枚数を示す変数ｊを、２枚目を示すｊ＝２にする（ステップＳ１９２）。
【０５０６】
そして、ＣＰＵ１は、ｊ枚目の画像フレームをフレームメモリ４２に保存するように制御する（ステップＳ１９３）。次に、前述したように、ＣＰＵ１の制御指示の下、手ぶれベクトル検出部１５は、１枚目の画像フレームに対するｊ枚目の画像フレームのグローバル動きベクトルあるいは平行移動量と、回転角度とを算出し、算出した平行移動量および回転角度をＣＰＵ１に送る（ステップＳ１９４）。
【０５０７】
次に、回転・平行移動加算部１９は、ＣＰＵ１からの平行移動量と、回転角度とを受けて、ｊ枚目の画像フレームを、回転および平行移動させながら、フレームメモリ４２から読み出す。また、同時に、フレームメモリ４３からは１枚目あるいは加算結果の画像フレームを読み出す（ステップＳ１９５）。なお、フレーム４２から読み出された画像を、ここでは加算画像と称し、また、フレーム４３から読み出された画像を被加算画像と称することとする。
【０５０８】
次に、回転・平行移動加算部１９は、加算画像の画素データに対するゲインｗ１を、ｗ１＝１／ｊとし、被加算画像の画素データに対するゲインｗ２を、（ｊ−１）／ｊとして、加算を実行する。ただし、被加算画像のうち加算画像と重ならない領域、すなわち、被加算画像の画素データに対して加算する加算画像の画素データが存在しないときには、加算画像の画素データに対するゲインｗ１は、ｗ１＝０、被加算画像の画素データに対するゲインｗ２は、ｗ２＝１とする（ステップＳ１９６）。
【０５０９】
そして、回転・平行移動加算部１９は、加算結果の画像データを、フレームメモリ４３に書き戻す（ステップＳ１９７）。
【０５１０】
次に、ＣＰＵ１は、所定の枚数の画像フレームを重ね合わせたか否か判別し（ステップＳ１９８）、所定の枚数の重ね合わせを終了していないと判別したときには、処理対象の画像フレームの枚数を示す変数ｊをインクリメントして、ｊ＝ｊ＋１にする（ステップＳ１９９）。そして、ステップＳ１９３に戻り、このステップＳ１９３以降の処理を繰り返す。
【０５１１】
また、ステップＳ１９８で、所定の枚数の重ね合わせを終了したと判別したときには、ＣＰＵ１は、この図６５の処理ルーチンを終了する。
【０５１２】
この平均加算手法を用いるアプリケーションとして、この実施形態の撮像装置では、動被写体が消えて行くギミック（特殊効果）の機能を備えるものである。すなわち、この平均加算手法によれば、１枚目の加算時から画像の明るさは変わらないものの、連写する毎に、画像フレーム内の動いている部分（動被写体）が、少しずつボケて消えて行くような、今までに無い撮影モードが実現できるものである。なお、画像フレームの加算を繰り返す毎に、その加算効果で、画像フレーム内のノイズも無くなって行くが、これは副次的な効果となる。
【０５１３】
（３）トーナメント加算手法
単純加算手法や平均加算手法の場合、常に１枚目を基準画像とし、１枚目に対して、２枚目以降の画像の位置合わせをして加算して行く。これに対して、トーナメント加算手法の場合、いずれの画像も等しく扱う。そのため、基準画像を１枚目の画像に限らず、何枚目の画像に設定しても構わない。その代わりに、加算対象の２枚の画像を、いずれも平行移動並びに回転させる必要がある。
【０５１４】
このトーナメント加算手法の場合における回転・平行移動加算部１９と、画像メモリ４との関係を考慮したブロック図を図６６に示す。この場合、回転・平行移動加算部１９には、２個の回転・平行移動処理部１９５および１９６と、ゲインアンプ１９７および１９８と、加算部１９９とが設けられる。
【０５１５】
画像メモリ４には、前述したように、手ぶれベクトル検出部１５での手ぶれベクトル検出処理のために、少なくとも２個のフレームメモリ４１，４２が設けられると共に、画像加算結果の画像フレームが格納されるフレームメモリ４３が設けられるが、このトーナメント加算手法のためには、さらに、画像メモリ４３には、加算する枚数分の画像フレームを格納することができるように構成されている。
【０５１６】
すなわち、このトーナメント加算手法が選択されたときには、撮像装置は、加算する枚数分だけ連写し、そのすべての画像フレームを画像フレーム４３に蓄積した上で、基準画像をいずれかに設定し、加算処理を開始する。
【０５１７】
なお、画像メモリ４からの加算画像の画像データの読み出し制御は、このトーナメント加算手法においても、前述した単純加算手法の場合と全く同様に行なわれるものである。
【０５１８】
以下に説明する例では、８枚の画像フレームを用いてトーナメント加算するようにする。図６６において、画像メモリ４３内において、丸で囲んで示されるＦ１〜Ｆ８は、連写されて蓄積された８枚の画像フレームを示している。
【０５１９】
手ぶれベクトル検出部１５により、８枚の画像フレームについての各ブロック毎動きベクトル、グローバル動きベクトルなどは、加算処理が開始される時点では、すべて算出済みであるとする。
【０５２０】
しかし、上述したように、手ぶれベクトル検出部１５では、直前のフレームとの相対動きベクトルか、１枚目を基準とした動きベクトルしか検出できないため、累積誤差を許すか、設定した基準画像を使って検波し直す必要がある。
【０５２１】
図６７は、このトーナメント加算手法の概要を示すものである。図６７において、丸数字は、８枚の画像フレームＦ１〜Ｆ８に対応しており、この例では、まず、第１段階の加算として、画像フレームＦ１とＦ２、画像フレームＦ３とＦ４、画像フレームＦ５とＦ６、画像フレームＦ７とＦ８、の加算を行う。
【０５２２】
この第１段階の加算においては、それぞれ加算を行う２枚の画像フレームについて、設定された基準画像に対する相対手ぶれ分だけ、それぞれ回転・平行移動処理部１９５，１９６において、平行移動および回転する処理がなされる。
【０５２３】
この第１段階の加算が終了したら、当該第１段階での加算結果の画像について、第２段階の加算を行う。この第２段階の加算は、図６７の例では、画像フレームＦ１とＦ２の加算結果と画像フレームＦ３とＦ４の加算結果との加算と、画像フレームＦ５とＦ６の加算結果と画像フレームＦ７とＦ８の加算結果との加算を行う。この第２段階の加算においては、加算しようとする画像フレームのそれぞれは、基準画像に合致するようにされているので、回転・平行移動処理部１９５，１９６においては、平行移動および回転する処理は不要である。
【０５２４】
そして、第２段階の加算が終了したら、当該第２段階での加算結果の画像について、第３段階の加算を行う。この第３段階の加算は、図６７の例では、画像フレームＦ１とＦ２とＦ３とＦ４の加算結果と、画像フレームＦ５とＦ６とＦ７とＦ８の加算結果との加算を行う。この第３段階の加算においては、加算しようとする画像フレームのそれぞれは、基準画像に合致するようにされているので、回転・平行移動処理部１９５，１９６においては、平行移動および回転する処理は不要である。
【０５２５】
図６６に戻った説明をするに、加算処理が開始されると、まず、ＣＰＵ１は第１段階の加算をすべき２枚の画像フレームを設定し、その設定した画像フレームについての、例えば基準画像に対する平行移動量および回転角度を、回転・平行移動処理部１９５および１９６に供給する。
【０５２６】
回転・平行移動処理部１９５および１９６のそれぞれは、ＣＰＵ１から受け取った画像フレームの平行移動量および回転角度を用いて、画像メモリ４から、対応する２枚の画像フレームの画像データを、基準画像に対する相対手ぶれを相殺するように、平行移動および回転を伴って読み出す。
【０５２７】
そして、回転・平行移動処理部１９５および１９６からの２枚の画像フレームは、それぞれゲインアンプ１９７および１９８により、それぞれゲインｗ３倍およびゲインｗ４倍された後、加算部１９９において加算される。そして、その加算後の画像データは、画像メモリ４のバッファメモリに書き込まれる。
【０５２８】
ＣＰＵ１は、図６７に示した第１段階の加算をすべき他の２枚の画像フレームについて、上述と同様の処理をする。したがって、これに対応して、回転・平行移動処理部１９５および１９６が上述と同様にして、指定された他の２枚の画像フレームについての平行移動および回転をしながらの加算を行い、その加算結果を画像メモリ４に格納するようにする。
【０５２９】
そして、第１段階の加算が終了すると、ＣＰＵ１は、第２段階の加算を行うべく、画像メモリ４から読み出すべき画像フレームを、第１段階の加算結果の画像フレームに設定し、平行移動量および回転角度はゼロとして、回転・平行移動処理部１９５および１９６に読み出し指示する。
【０５３０】
回転・平行移動処理部１９５および１９６は、このＣＰＵ１からの情報および指示に応じて、第１段階の加算結果の画像フレームの画像データを読み出して、図６７に示した第２段階の加算処理をする。
【０５３１】
そして、第２段階の加算が終了すると、ＣＰＵ１は、第３段階の加算を行うべく、画像メモリ４から読み出すべき画像フレームを、第２段階の加算結果の画像フレームに設定し、平行移動量および回転角度はゼロとして、回転・平行移動処理部１９５および１９６に読み出し指示する。
【０５３２】
回転・平行移動処理部１９５および１９６は、このＣＰＵ１からの情報および指示に応じて、第２段階の加算結果の画像フレームの画像データを読み出して、図６７に示した第３段階の加算処理をする。以上で、この例のトーナメント加算を終了する。
【０５３３】
このトーナメント加算手法の場合における８枚の画像フレームについての加算におけるゲインアンプ１９７，１９８におけるゲイン（乗算係数）ｗ３、ｗ４、およびその加算処理の流れの様子を、図６８に示す。
【０５３４】
図６８に示した乗算係数ｗ３、ｗ４は、前述した平均加算手法に基づいた例であり、２枚の画像フレームで重なり合う領域では、ｗ３＝ｗ４＝１／２とされ、また、重なり合わない領域では、ｗ３＝１、ｗ４＝１とされる。
【０５３５】
なお、乗算係数ｗ３，ｗ４は、平均加算手法に基づいた値に限らず、単純加算手法に基づいて値を用いるようにしても良い。
【０５３６】
上述の説明においては省略したが、この実施形態のトーナメント加算手法においては、第２階層以降の加算において、第１階層の加算をする２枚の画像について基準画像に対して回転および平行移動をするために、基準画像の領域においては、２枚共に、対応する画素が存在しない画素位置を判定できる仕組みを設けるようにしている。
【０５３７】
すなわち、第１階層の加算時に、加算結果の輝度成分Ｙの画素値が「０」のものを、「１」に値を置き換える。そして、その代わりに、平行移動と回転の結果、第１段階の加算を行う２枚の画像共に、対応する画素が存在しない画素位置の加算結果の輝度成分Ｙの画素値を「０」とする。
【０５３８】
そして、第２階層以降の加算では、２枚共に輝度成分Ｙの画素値が「０」の場合、加算後の輝度成分Ｙも「０」にする。全ての画像を加算したとき、必ず全ての画素には有効画素（基準画像の画素）が含まれるため、輝度値が「０」の画素は、基準画像の画素値に置き換るようにする。
【０５３９】
このように、輝度成分Ｙの画素値「０」を無効画素フラグとすることで、画像データのフォーマットを維持したまま、容量を増加させずに、重ね合わせ際の有効画素が存在しない画素の判定フラグを設けることができる。
【０５４０】
勿論、上述のような重ね合わせ際の有効画素が存在しない画素位置に対して、無効画素フラグを１ビット別途設けても構わないし、また、輝度成分Ｙ、色差成分Ｃｂ／Ｃｒに依らず、どの画素値をフラグとして用いても構わない。しかし、コストや画質への影響を鑑みると、上述したこの実施形態の無効画素フラグの手法が最適であると考えられる。
【０５４１】
図６９および図７０に、この実施形態の撮像装置における、上述したトーナメント加算手法を回転・平行移動加算部１９で実行する場合の処理手順を説明するためのフローチャートを示す。なお、この図６９および図７０のフローチャートにおける各ステップは、主としてＣＰＵ１の制御に基づいてなされるものである。
【０５４２】
まず、ＣＰＵ１は、１〜８枚目までの画像フレームの画像データを、順次に画像メモリ４のフレームメモリに書き込んで保存する（ステップＳ２０１）。次に、ＣＰＵ１は、１〜８枚目までの画像の中で、基準画像を１枚設定する（ステップＳ２０２）。そして、ＣＰＵ１は、１〜８枚目までの画像フレームについて、基準画像の画像フレームに対する平行移動量および回転角度の算出をしておく（ステップＳ２０３）。
【０５４３】
次に、ＣＰＵ１は、第１段階の加算処理を開始し、１枚目と２枚目の画像フレームについての基準画像フレームに対する平行移動量および回転角度の情報の回転・平行移動加算部１９を供給する。回転・平行移動加算部１９は、１枚目と２枚目の画像フレームの画像データを、ＣＰＵ１からの、その２枚の画像フレームについての平行移動量および回転角度の情報を元にして、基準画像の画像フレームに対する回転角度および平行移動量を相殺するように、画像メモリ４の対応するフレームメモリから同時に読み出す（ステップＳ２０４）。
【０５４４】
そして、回転・平行移動加算部１９は、ＣＰＵ１の制御の下、１枚目と２枚目の画像フレームの画像データを読み出しながら、ゲインｗ３＝１／２、ゲインｗ４＝１／２として加算処理を実行し、その加算結果を画像メモリ４のフレームメモリに書き込む（ステップＳ２０５）。
【０５４５】
そして、ステップＳ２０５では、基準画像の画像フレーム領域内の画素位置（加算後の画素データを書き込む画素位置）を順次に設定し、その設定した画素位置のそれぞれについて、１枚目と２枚目の画像フレームの画像データ中から、対応する画素を検索して読み出し、その画素同士を加算するようにするが、１枚目と２枚目の画像フレームのうちで一方の画素が存在しない場合には、当該画素が存在しない方の画像フレームの画像データのゲインは「０」とし、画素が存在する方の画像フレームの画像データのゲインは「１」とする。
【０５４６】
さらに、ステップＳ２０５では、１枚目と２枚目の画像フレームに、対応する画素が共に存在しない場合には、加算結果の輝度成分Ｙの画素値は「０」とする。また、対応する画素が存在している場合の画素データの加算結果が「０」となっている場合には、その画素値は「１」に変更しておく。
【０５４７】
次に、ＣＰＵ１は、３枚目と４枚目、５枚目と６枚目、７枚目と８枚目についても、ステップＳ２０４およびステップＳ２０５の処理を行うように、回転・平行移動加算部１９に対して指示を行い、回転・平行移動加算部１９がその処理を実行する（図７０のステップＳ２１１）。
【０５４８】
次に、ＣＰＵ１は、第２段階の加算処理を開始するように、回転・平行移動加算処理部１９に指示する。回転・平行移動加算処理部１９は、ＣＰＵ１からの指示に応じて、１枚目と２枚目の画像の加算結果の画像データと、３枚目と４枚目の加算結果の画像データとを、画像メモリ４から、平行移動および回転を行わずに読み出す。そして、ゲインｗ３およびｗ４を、共に１／２として、前記２つの画像データの加算を行う（ステップＳ２１２）。
【０５４９】
そして、このステップＳ２１２においては、加算しようとする１枚目と２枚目の画像の加算結果の画素データの輝度成分Ｙ、または、３枚目と４枚目の加算結果の画素データの輝度成分Ｙの一方が「０」である場合には、加算使用とする２枚の画像のうち、輝度成分Ｙが「０」である画像の画素データのゲインは「０」とし、他方の画像の画素データのゲインは「１」とする。
【０５５０】
また、さらに、ステップＳ２１２において、加算しようとする２つの画像の画素データの輝度成分Ｙが共に「０」の場合には、その加算結果の輝度成分Ｙの値も「０」とする。
【０５５１】
次に、ＣＰＵ１は、５枚目と６枚目の画像の加算結果の画像データと、７枚目と８枚目の加算結果の画像データとについても、上述のステップＳ２１２の処理を行うように、回転・平行移動加算部１９に指示し、回転・平行移動加算部１９はその処理を実行する（ステップＳ２１３）。
【０５５２】
次に、ＣＰＵ１は、第３段階の加算、つまり、１〜４枚目の画像フレームの加算結果と、５〜８枚目の画像フレームの加算結果とについて、上述したステップＳ２１２の処理を行うように、回転・平行移動加算部１９に指示し、回転・平行移動加算部１９はその処理を実行する（ステップＳ２１４）。
【０５５３】
以上で、この実施形態のトーナメント加算手法による複数枚の画像フレームの加算処理を終了する。
【０５５４】
以上説明したこの実施形態のトーナメント加算手法におけるポイントは２つあり、１つは、トーナメントの第１段階（初段）では、基準画像以外は、２枚の加算画像のいずれも、平行移動と回転を伴いながら加算するのに対し、第２段階以降は、平行移動も回転も行わずに加算することである。第１段階の加算が、図６９のＡの処理に相当し、第段階以降の加算が、図７０のＢの処理に相当する。
【０５５５】
この実施形態のトーナメント加算手法における、もう１つのポイントは、第２段階以降の加算において、第１段階の２枚の画像が、両画像共に画素が存在しない画素位置を、判定できる仕組みを設けた点である。
【０５５６】
なお、上述の例では、８枚の画像フレームをトーナメント加算する例を示したが、この実施形態のトーナメント加算手法では、予め連写した画像を画像メモリ４に溜めておくことが重要であり、枚数は重要ではない。ただし、トーナメント加算手法の性質を考慮すると、２のベキ乗で表される加算枚数が好ましい。
【０５５７】
この実施形態のトーナメント加算手法のメリットは、２つある。１つは、先述したように、加算しようする全ての画像を撮影しておいてから、任意の基準画像を選択できることである。連写しながら手ぶれベクトルを求めておき、連写中の手ぶれ軌跡の中央に位置するフレームを、基準画像として選択すれば、加算結果画像の有効領域を最も広く取れるというメリットがある。
【０５５８】
もう１つのメリットは、各フレームの画像を完全に等価に扱うことができる点である。例えば、既説した平均加算手法の場合も、加算結果における各フレームの比重が等しくなるように、加算係数をフレーム枚数に応じて変化させているが、どうしてもデジタルの丸め誤差が発生する。その結果として、各フレームの比重は完全に同じにはならない。それに対し、この実施形態のトーナメント加算手法の場合は、完全に同じ係数で各フレームを加算するため、丸め誤差の影響に偏りがないのである。
【０５５９】
ただし、トーナメント加算手法においては、予め全ての画像をメモリに格納しておく方式のため、大量にメモリを必要とすることと、そのため、連写枚数に上限があり、先述した単純加算手法や平均加算手法のような、無限に加算し続けることはできないという問題がある。
【０５６０】
しかし、例えば、ハードディスクのような、ビット単価の極めて安い外部ストレージに、連写した画像を一時保存するアーキテクチャを採れば、上記の問題は回避可能である。
【０５６１】
ところで近年、手ぶれだけでなく、動被写体ぶれも防ぐための手法として、手ぶれも動被写体ぶれも発生しにくい、１／６０秒程度の短い露光時間で高感度に撮影する、高感度撮影が市場の耳目を集めている。
【０５６２】
この場合に問題となるのが、Ｓ／Ｎを抑えながら、どこまでのＩＳＯ感度に対応できるか、である。通常、感度を向上させると、同時に画像のノイズも目立ってしまうため、デジタルカメラ各社は、様々な手法を用いてノイズ・リダクションを行い、一定水準のＳ／Ｎを維持できる、最高ＩＳＯ感度の数値の大きさを、性能として謳っている。
【０５６３】
この実施形態で主題としている静止画の手ぶれ補正も、目的の１つはノイズ・リダクションであり、複数枚の画像の加算を行う際に、動被写体部分を検出し、加算を行わないか、その部分だけ別途サーチし、追跡加算を行うことで、動被写体ぶれにも対応した、見かけ上の高感度なノイズ・リダクションを実現することは可能である。
【０５６４】
ランダムノイズを対象とした場合、Ｎ枚の画像を加算すれば、統計的にそのノイズ成分はNの平方根の比率に削減される。つまり、ＩＳＯ３２００相当の実力値を持つデジタルカメラにおいて、動被写体に対応した１６枚加算を行えば、そのセットのＩＳＯ感度を、４倍のＩＳＯ１２８００として謳うことができるのである。
【０５６５】
この場合に求められる加算の方式としては、固定枚数の加算でも、処理時間を多少要しても構わない代わりに、できるだけ高画質なものである。この要件を満たすものが、この実施形態のトーナメント加算手法であり、逆に言うと、トーナメント加算手法に好適なアプリケーションとして、高感度撮影時のＩＳＯ感度向上が挙げられる。
【０５６６】
上述したように、この実施形態の撮像装置は、単純加算手法、平均加算手法、トーナメント加算手法の３つの加算手法を具備している。上記の３つの加算手法のそれぞれには、それぞれに最適なデジタルカメラのアプリケーションがあることは上述した。
【０５６７】
この実施形態の撮像装置においては、これら３つの加算方式のうちのいずれを使用するかを、ユーザ操作入力部３を通じて、ユーザが選択することができるので、ユーザは、自分が欲する加算結果に応じて、加算手法を選択することができるというメリットがある。
【０５６８】
なお、ユーザが直接的に３種の加算手法のいずれかを選択するのではなく、撮像装置が、上述した３種の加算手法に最適なアプリケーションを選択可能な機能として備えるように構成し、ユーザがいずれかアプリケーションを選択したときに、ＣＰＵ１が、各アプリケーションに最適な加算手法を自動的に選択するように構成することもできる。
【０５６９】
そして、１つのデジタルカメラで、手持ち長時間露光撮影、動被写体が徐々に消えて行くギミック、実力値以上の高感度撮影、の３つの新しいアプリケーションが同時に実装できるというメリットもある。
【０５７０】
［画像処理装置の第２の実施形態］
上述した画像処理装置の第１の実施形態としての撮像装置における手ぶれベクトル検出部１５においては、図１に示したように、画像メモリ部４は、２枚の画像、つまり元フレームの画像と、参照フレームの画像とが、両方共、フレームメモリに格納されていることを前提にしていた。このため、動きベクトルの検出タイミングは、１フレーム分遅延されることとなる。
【０５７１】
これに対して、この第２の実施形態では、撮像素子１１からの垂れ流し画像データを参照フレームとする構成として、ラスタースキャンのストリームデータに対して、リアルタイムでＳＡＤ値を演算することができるようにしている。
【０５７２】
図７１に、この第２の実施形態の場合における撮像装置の構成例のブロック図を示す。この図７１から分かるように、撮像信号処理系１０の構成ブロックおよびその他の構成ブロックは、図１に示した第１の実施形態と全く同様であるが、この第２の実施形態においては、画像メモリ部４は２個のフレームメモリ４４および４５からなる。フレームメモリ４４は、動きベクトル検出処理用であり、フレームメモリ４５は、フレーム画像の重ね合わせ用である。
【０５７３】
なお、実際的には、書き込みと読み出しとが同時にできないフレームメモリを用いる場合、フレームメモリ４４は、周知のように、２枚のフレームメモリを、書き込みと、読み出しで１フレーム毎に交互に切り替えて用いるものである。
【０５７４】
手ぶれベクトル検出部１５は、後述するように、データ変換部１４からの入力画素データを、参照フレームの画素データとすると共に、フレームメモリ４３の格納データを元フレームのデータとして、縮小ＳＡＤテーブル生成処理、ブロック毎動きベクトルの検出処理、合算ＳＡＤテーブル生成処理およびグローバル動きベクトル（手ぶれベクトル）検出処理を行なう。そして、この第２の実施形態においては、手ぶれベクトル検出部１５では、前述と同様に、グローバル動きベクトル（手ぶれの平行移動成分）や平行移動量（α、β）に加えて、参照フレームの元フレームに対する回転角度γを検出する。
【０５７５】
なお、この例の場合、手ぶれベクトル検出部１５では、常に１フレーム前の画像との相対手ぶれベクトルを求めることになるので、１枚目の基準画像（図３の画像フレーム１２０参照）との相対手ぶれを算出するために、１枚目からそれまでの手ぶれ成分を積分しておくものである。
【０５７６】
そして、回転・平行移動加算部１９は、上述した第１の実施形態と全く同様にして、この検出された手ぶれの平行移動成分と回転角度に従って、1フレーム遅延の後、フレームメモリ４４に格納されている画像フレームを、切り出しと同時に回転させながら、フレームメモリ４５の画像に加算もしくは平均化して行く。この過程を繰り返すことにより、フレームメモリ４５には、手ぶれの無い、より高Ｓ／Ｎで、より高解像度の静止画像の画像フレーム１２０が生成される（図３参照）。
【０５７７】
そして、解像度変換部１６は、フレームメモリ４５のフレーム画像から、ＣＰＵ１からの制御指示に応じた所定の解像度および所定の画像サイズを切り出して、前述したように、記録撮像画像データとしてコーデック部１７に供給すると共に、モニター画像データとしてＮＴＳＣエンコーダ１８に供給する。
【０５７８】
この第２の実施形態では、元フレームがフレームメモリ４４に格納されており、参照フレームは、データ変換部１４からストリームで入力されて来るものとされる。手ぶれベクトル検出部１５は、第１の実施形態では、２個のフレームメモリ４１，４２に格納された２枚の画像データを用いて、参照ブロックについてのＳＡＤ値を求める処理をするようにした。これに対して、この第２の実施形態では、図７１に示すように、データ変換部１４からのストリーム画像データを参照フレームの画像データとすると共に、フレームメモリ４４に格納されている画像データを元フレームの画像データとして、参照ブロックについてのＳＡＤ値を求めるようにする。
【０５７９】
上述したように、この第２の実施形態では、データ変換部１４からのストリーム画像データを参照フレームの画像データとする。このため、ある入力画素に対して、この画素を要素とする参照ブロックが、参照フレーム上に同時に複数存在することになる。図７２は、そのことを説明するための図である。
【０５８０】
すなわち、参照フレーム１０２上のサーチ範囲１０５における入力画素Ｄｉｎは、例えば、参照ベクトル１０７１が対応する参照ブロック１０６１の左側に位置する画素であると共に、参照ベクトル１０７２が対応する参照ブロック１０６２の右上に位置する画素となっていることが、この図７２から分かる。
【０５８１】
したがって、入力画素Ｄｉｎが参照ブロック１０６１に属するとした場合には、ターゲットブロック１０３の画素Ｄ１を読み出して、その差分を算出する必要がある。また、入力画素Ｄｉｎが参照ブロック１０６２に属するとした場合には、ターゲットブロック１０３の画素Ｄ２を読み出して、その差分を算出する必要がある。
【０５８２】
図７２および後述の図７３では簡単のため、２つの参照ブロックのみを図示しているが、実際上は、入力画素Ｄｉｎを、その参照ブロック内の画素とする参照ブロックは多数となる。
【０５８３】
この第２の実施形態の場合のＳＡＤ演算は、入力画素Ｄｉｎの輝度値Yと、各々の参照ブロック内の入力画素Ｄｉｎの位置に対応した、ターゲットブロック内の画素の輝度値Ｙとの差分絶対値を算出し、その算出した差分絶対値を、それぞれの参照ブロックに対応した参照ベクトルに従って、ＳＡＤテーブルに加算してゆくようにして行なう。
【０５８４】
例えば、入力画素Ｄｉｎが参照ブロック１０６１に属するとした場合における、ターゲットブロック１０３の画素Ｄ１と入力画素Ｄｉｎとの差分絶対値は、図７３に示すように、ＳＡＤテーブル１０８の参照ベクトル１０７１が対応するＳＡＤテーブル要素１０９２のＳＡＤ値に加算して書き込むようにする。また、入力画素Ｄｉｎが参照ブロック１０６２に属するとした場合における、ターゲットブロック１０３の画素Ｄ２と入力画素Ｄｉｎとの差分絶対値は、図７３に示すように、ＳＡＤテーブル１０８の参照ベクトル１０７２が対応するＳＡＤテーブル要素１０９２のＳＡＤ値に加算して書き込むようにする。
【０５８５】
したがって、サーチ範囲内の全ての領域の入力画素が入力されて処理が終了したときには、ＳＡＤテーブルが完成することになる。
【０５８６】
図７３の説明は、従来手法に、リアルタイムＳＡＤ算出処理を適用した場合である。この第２の実施形態においては、図７２において、ＳＡＤテーブル１０８の参照ベクトル１０７１または１０７２が対応するＳＡＤテーブル要素１０９１または１０９２のＳＡＤ値として、算出した差分絶対値のそれぞれを、加算して書き込むのではなく、前述した第１の実施形態のように、参照ベクトル１０７１，１０７２を縮小倍率１／ｎで縮小した参照縮小ベクトルを算出し、その参照縮小ベクトルの近傍の複数の参照ベクトルに、前記算出した差分絶対値から、それぞれを分散加算するための分散加算値を求め、求めた分散加算値を、前記近傍の複数の参照ベクトルに対応するＳＡＤ値に加算するようにするものである。
【０５８７】
ＳＡＤテーブル（縮小ＳＡＤテーブル）が完成した後の正確な動きベクトルを算出するための処理は、この第２の実施形態においても、前述した第１の実施形態で述べた手法と全く同様にして、２次曲面や、水平方向および垂直方向の３次曲線を用いた手法を用いることができる。
【０５８８】
この第２の実施形態の場合の手ぶれベクトル検出部１５における、前記図３９のステップＳ３２、図４１のステップＳ５２、図４３のステップＳ７２および図４４のステップＳ８２における各ターゲットブロックについての縮小ＳＡＤテーブル生成処理およびブロック毎動きベクトル検出処理の動作のフローチャートを図７４および図７５に示す。
【０５８９】
先ず、手ぶれベクトル検出部１５では、入力画像のフレーム（参照フレーム）の任意の位置（ｘ，ｙ）の画素データＤｉｎ（ｘ，ｙ）を受け取る（ステップＳ２２１）。次に、当該画素の位置（ｘ，ｙ）を含む複数の参照ブロックの一つに対応する参照ベクトル（ｖｘ，ｖｙ）を設定する（ステップＳ２２２）。
【０５９０】
次に、設定された参照ベクトル（ｖｘ，ｖｙ）の参照ブロックＩｉの当該画素値Ｉｉ（ｘ，ｙ）と、これに対応するターゲットブロックＩｏ内の画素値Ｉｏ（ｘ−ｖｘ，ｙ−ｖｙ）との差分の絶対値αを算出する（ステップＳ２２３）。すなわち、差分絶対値αは、
α＝｜Ｉｏ（ｘ−ｖｘ，ｙ−ｖｙ）−Ｉｉ（ｘ，ｙ）｜    ・・・（式４）
として算出される。
【０５９１】
次に、縮小倍率を１／ｎとして、参照ベクトル（ｖｘ，ｖｙ）を１／ｎに縮小した参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）を算出する（ステップＳ２２４）。
【０５９２】
次いで、参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）の近傍の複数の参照ベクトル、この例では、上述したように４個の近傍参照ベクトルを検知する（ステップＳ２２５）。そして、検知した４個の近傍参照ベクトルのそれぞれに対応するテーブル要素として分散加算すべき値（差分絶対値）を、前述したように、参照縮小ベクトルと近傍参照ベクトルとがそれぞれ示す位置の関係に基いて、ステップＳ２２３で求めた差分絶対値αから、線形加重分散値として求める（ステップＳ２２６）。そして、求めた４個の線形加重分散値を、近傍参照ベクトルのそれぞれに対応するＳＡＤテーブル要素値に加算する（ステップＳ２２７）。
【０５９３】
次に、入力画素Ｄｉｎ（ｘ，ｙ）を含む参照ブロックの全てについての上記ステップＳ２２２〜ステップＳ２２７の演算を行なったか否か判別し（ステップＳ２２８）、当該入力画素Ｄｉｎ（ｘ，ｙ）を含む他の参照ブロックがあると判別したときには、ステップＳ２２２に戻り、当該入力画素Ｄｉｎを含む他の参照ブロック（ｖｘ，ｖｙ）を設定し、このステップＳ２２２〜ステップＳ２２７の処理を繰り返す。
【０５９４】
また、ステップＳ２２８で、入力画素Ｄｉｎ（ｘ，ｙ）を含む参照ブロックの全てについての上記ステップＳ２２２〜ステップＳ２２７の演算を行なったと判別したときには、サーチ範囲内の全ての入力画素Ｄｉｎについて、上記の演算ステップの処理を終了したか否か判別し（図７５のステップＳ２３１）、終了していないと判別したときには、ステップＳ２２１に戻り、サーチ範囲内の次の入力画素Ｄｉｎを取り込み、このステップＳ２２１以降の処理を繰り返す。
【０５９５】
そして、ステップＳ２３１で、サーチ範囲内の全ての入力画素Ｄｉｎについて、上記の演算ステップの処理を終了したと判別すると、縮小ＳＡＤテーブルが完成したとして、当該完成した縮小ＳＡＤテーブルにおいて、最小値となっているＳＡＤ値を検出する（ステップＳ２３２）。
【０５９６】
次に、当該最小値となっているテーブル要素アドレス（ｍｘ，ｍｙ）のＳＡＤ値（最小値）と、その近傍の複数個、この例では、上述したように１５個の近傍テーブル要素のＳＡＤ値を用いて２次曲面を生成し（ステップＳ２３３）、その２次曲面の最小値のＳＡＤ値が対応する小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する（ステップＳ２３４）。この最小値ベクトル（ｐｘ，ｐｙ）は、小数精度の最小テーブル要素アドレスに対応している。
【０５９７】
そして、算出した小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）をｎ倍することにより、求める動きベクトル（ｐｘ×ｎ，ｐｙ×ｎ）を算出する（ステップＳ２３５）。
【０５９８】
なお、この例においても、小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する方法としては、前述した水平方向および垂直方向の３次曲線を用いる方法を用いても良いことは前述の例と同様である。
【０５９９】
また、前述の第１の実施形態において、図５１〜図５４のフローチャートを参照しながら説明した第３の例と同様にして、この第２の実施形態においても、サーチ範囲を絞りながら、かつ、必要に応じて縮小倍率を変更しながら、２段階以上、縮小ＳＡＤテーブルを用いた動きベクトル検出処理を繰り返すようにしても、勿論良い。
【０６００】
この第２の実施形態のメリットは、フレームメモリを、第１の実施形態に比べて１枚分削減できることと、フレームメモリに入力画像を格納する時間を短縮できることである。メモリ削減の効果は言うまでもないが、処理時間の短縮も、近年、重要視されて来ている。
【０６０１】
［第３の実施形態］
上述の第２の実施形態では、入力画像に対し、常に１フレーム前の画像との比較によって、手ぶれベクトルと回転角度を求める方式であったが、前述もしたように、実際には、図３に示したように、１枚目を基準として、以降のフレームを足し合わせるため、動きベクトル検出も１枚目を基準にする方が誤差は小さくなる。第３の実施形態は、この点を考慮したものである。
【０６０２】
図７６に、この第３の実施形態による撮像装置の構成例のブロック図を示す。
【０６０３】
すなわち、この図７６の例においては、画像メモリ部４には、図７１の第２の実施形態におけるフレームメモリ４４およびフレームメモリ４５に加えて、フレームメモリ４６を設ける。そして、データ変換部１４からの画像データは、フレームメモリ４４とフレームメモリ４６とに書き込むようにする。
【０６０４】
そして、この第３の実施形態においては、フレームメモリ４６を、ターゲットとなる１枚目のフレーム（元フレームおよび基準画像のフレーム）格納用として用いて、常に、この画像に対する入力画像の参照ベクトルを算出するシステムの構成を示す。この構成においても、フレームメモリ４５に加算画像結果が格納される。
【０６０５】
この例においても、基準となる１枚目のフレームの画像データは、図７６において破線で示すように、フレームメモリ４５にも書き込むようにする。
【０６０６】
そして、２枚目以降の画像フレームは、フレームメモリ４４に書き込むと共に、手ぶれベクトル検出部１５に供給する。手ぶれベクトル検出部１５では、データ変換部１４からの２枚目以降の画像フレームのそれぞれと、フレームメモリ４６から読み出された１枚目の画像データとの間の相対的な手ぶれベクトルの検出を行うと共に、回転角度の検出を行う。
【０６０７】
手ぶれベクトル検出部１５は、検出した１枚目の画像フレームに対する２枚目以降の画像フレームのそれぞれについての相対的な手ぶれベクトルと回転角度の情報をＣＰＵ１に供給する。
【０６０８】
そして、フレームメモリ４４に格納されている２枚目以降の画像は、算出された１枚目のフレームの基準画像との相対手ぶれ成分を相殺するように、ＣＰＵ１の制御により、フレームメモリ４４から読み出されて、回転・平行移動加算部１９に供給される。そして、回転・平行移動加算部１９では、ＣＰＵ１からの制御信号により、１枚目の基準画像フレームに対する相対回転角度に応じて２枚目以降の画像フレームのそれぞれが回転させられて、フレームメモリ４６から読み出された画像フレームに対して加算もしくは平均化される。その加算もしくは平均結果の画像フレームは、フレームメモリ４６に書き戻される。
【０６０９】
そして、フレームメモリ４６の画像フレームのデータは、ＣＰＵ１の制御指示に応じた所定の解像度および所定の画像サイズで切り出されて解像度変換部１６に供給される。そして、解像度変換部１６は、前述したように、記録撮像画像データとしてコーデック部１７に供給すると共に、モニター画像データとしてＮＴＳＣエンコーダ１８に供給する。
【０６１０】
なお、上述の第３の実施形態において、入力画像の１フレーム目を基準画像として、無限加算もしくは無限平均加算も可能なシステムを示したが、もしメモリ容量がふんだんに存在するか、記録再生装置部５への一時的な退避が許されるならば、予め加算対象の画像を全て保存しておき、それらをトーナメント加算手法による加算、もしくは平均加算手法による加算をしてゆく方法を採用しても良い。
【０６１１】
［第６の実施形態］
以上説明した第１〜第３の実施形態によるセンサレス手ブレ補正と、現存技術である光学手ぶれ補正とを組み合わせることによって、より高い効果が得られる。
【０６１２】
冒頭で説明したように、ジャイロセンサを用いる光学手ぶれ補正は、大まかな補正を得意としており、また、回転補正が難しいのに対し、ブロックマッチングを使用したセンサレス手ブレ補正は、回転補正も含めた精度は高いが、サーチ範囲が広くなると、ＳＡＤテーブルのコストが急上昇するか、この実施形態の手法を用いたとしても、複数段階の動き検出処理による場合には処理時間を要するからである。
【０６１３】
したがって、光学手ぶれ補正で大まかに補正して、センサレベル手ぶれ補正のための動きベクトル検出用のサーチ範囲を狭め、そのサーチ範囲において、動きベクトルを算出して、センサレス手ブレ補正をかけることにより、低コスト、高精度、高速の手ぶれ補正システムが実現できる。
【０６１４】
［実施形態の効果］
上述の第１〜第３の実施形態のブロックマッチング手法を用いたセンサレス手ぶれ補正手法は、これまで提案されている、センサレス静止画手ぶれ補正技術に対しては、コスト、精度、処理時間、ロバスト性の、いずれにおいても優位に立つ。
【０６１５】
現在市場に出回っている静止画の手ぶれ補正の全ては、ジャイロセンサとレンズシフト等の光学補正を組み合わせて用いたシステムであるが、誤差が大きく、満足のいく画質ではなかった。これに対して、この発明による手法により、センサや機構部分を無くした、低コストかつ高精度の手ぶれ補正が実現する。
【０６１６】
［その他の変形例］
上述の実施形態の説明では、参照ベクトルに対する縮小倍率は水平方向と垂直方向とで同一としたが、水平方向と、垂直方向とで、縮小倍率を異ならせるようにしても良いことは前述した通りである。
【０６１７】
また、上述の実施形態では、参照ブロックおよびターゲットブロック内の全ての画素についてＳＡＤ値を求めるようにしたが、例えばｋ個（ｋは自然数）おきの画素のみを用いてＳＡＤ値を求めるようにしても良い。
【０６１８】
また、リアルタイム処理の動きベクトル検出システムでは、演算コストと処理時間削減を目的として、ターゲットブロック内の代表点のみを参照ブロック内でサーチする、ＳＡＤ演算がしばしば行われている。
【０６１９】
すなわち、図７７に示すように、ターゲットブロック１０３を、例えば横×縦＝ｎ×ｍ個（ｎ、ｍは１以上の整数）からなる複数画素毎に分割し、その分割単位である複数画素のうちの１点の画素を代表点ＴＰとする。そして、ＳＡＤ演算においては、ターゲットブロック１０３については、このようにして定めた複数個の代表点ＴＰのみを使用する。
【０６２０】
一方、参照ブロック１０６では全画素をＳＡＤ値演算の対象とするもので、ターゲットブロック１０３の一つの代表点ＴＰに対しては、一つの参照ブロック１０６において、代表点ＴＰが設定される分割単位であるｎ×ｍ個からなる複数画素の領域ＡＲに含まれる全画素を使用する。
【０６２１】
そして、ターゲットブロック１０３と、一つの参照ブロック１０６との間においては、ターゲットブロック１０２の各代表点ＴＰの画素値と、参照ブロック１０６の、各代表点ＴＰに対応するそれぞれの領域ＡＲに含まれるｎ×ｍ個からなる複数の画素のそれぞれの画素値との差分の合計が求められ、そして、求められた代表点ＴＰについての差分の合計が、ターゲットブロック１０３のすべての代表点ＴＰについて合計されることになる。これが、ＳＡＤテーブルの一つの要素値となる。
【０６２２】
そして、ターゲットブロック１０３についてのサーチ範囲のすべての参照ブロックについて、上記と同様の代表点ＴＰを用いた差分演算が行われて、ＳＡＤテーブルが生成されることになる。ただし、この例の場合には、サーチ範囲に設定する複数個の参照ブロックは、前述した分割単位であるｎ×ｍ個からなる複数画素毎、あるいは当該複数画素の整数倍毎にずれたものとされる。
【０６２３】
上述のようにターゲットブロックについて代表点を用いるようにする場合には、ＳＡＤ値を算出する際のターゲットブロックについてのメモリアクセスは、参照ブロックの領域ＡＲの複数画素毎に対して、一つの代表点ＴＰの１回でよくなり、メモリアクセス数を大幅に少なくすることができる。
【０６２４】
また、代表点ＴＰのみを用いる場合には、ターゲットブロックのデータとしては、ブロック内の全画素のうちの代表点ＴＰの画素データのみを記憶すればよいので、元フレーム（ターゲットフレーム）のターゲットブロックのデータを記憶するフレームメモリの容量を削減することができる。
【０６２５】
また、フレームメモリとは別に、小規模な代表点メモリ（ＳＲＡＭ）をローカルで持ち、当該ローカルメモリに元フレーム（ターゲットフレーム）のターゲットブロックのデータを保持するようにすることにより、画像メモリ４（ＤＲＡＭ）の帯域削減を図っても良い。
【０６２６】
ターゲットブロックについて代表点を用いる場合の処理に関する以上の説明は、図７８〜図８０を用いて説明した手法におけるものについてであるが、図６５〜図６８を用いて説明した第２の実施の形態における手法の場合にも適用できることは言うまでもない。
【０６２７】
この第２の実施形態における手法において、ターゲットブロックについて代表点ＴＰのみを用いる場合には、入力される参照フレームの画素（入力画素）ごとに、サーチ範囲の全範囲において、当該入力画素を含む領域ＡＲ（当該画素の位置は領域ＡＲにおいて同じではない）を備えるすべての参照ブロックを検出し、その検出したすべての参照ブロックのそれぞれにおける領域ＡＲに対応するターゲットブロックの代表点を判定する。
【０６２８】
そして、その判定結果として得られる複数個の代表点の画素値を、元フレーム（ターゲットフレーム）の画像データを記憶するメモリからそれぞれ読み出して、その代表点の画素値と当該入力画素との差分をそれぞれ演算し、その演算結果を、ＳＡＤテーブルにおいて、対応する参照ブロック（参照ベクトル）の座標位置に累積するようにする。
【０６２９】
この場合には、メモリアクセスは、ターゲットブロックの代表点のみを読み出すだけであるので、メモリアクセス数を大幅に削減することができるものである。
【０６３０】
なお、代表点を用いる処理は、上述した縮小ＳＡＤテーブルを用いる場合にも適用できることは言うまでもない。
【０６３１】
なお、上述の実施形態では、画素の差分値およびＳＡＤ値は、画素の輝度値Ｙのみを用いて演算するものとしたが、動ベクトル検出のために、輝度値Ｙだけでなく、色差成分Ｃｂ／Ｃｒを用いてもよい。また、データ変換部１４で輝度値Ｙおよび色差成分Ｃｂ／Ｃｒに変換される前のＲＡＷデータを対象として、動きベクトル検出処理を行ってもよい。
【０６３２】
また、前述もしたが、手ぶれベクトル検出部１５は、ハードウエア処理による構成とする場合に限定されるものではなく、ソフトウエアで実現しても良い。
【図面の簡単な説明】
【０６３３】
【図１】この発明による画像処理装置の第１の実施形態の構成例を示すブロック図である。
【図２】この発明による画像処理方法の実施形態の概要を説明するために用いる図である。
【図３】この発明による画像処理方法の実施形態の概要を説明するために用いる図である。
【図４】この発明による画像処理方法の実施形態の概要を説明するために用いる図である。
【図５】この発明による画像処理方法の実施形態においてフレームの手ぶれの平行移動成分を算出する処理を説明するために用いる図である。
【図６】この発明による画像処理方法の実施形態においてフレームの手ぶれの平行移動成分を算出する処理を説明するために用いる図である。
【図７】この発明による画像処理方法の実施形態においてフレームの手ぶれの回転成分を算出する処理を説明するために用いる図である。
【図８】この発明による画像処理方法の実施形態においてフレームの手ぶれの回転成分を算出する処理を説明するために用いる図である。
【図９】この発明による画像処理方法の実施形態においてフレームの手ぶれの回転成分を算出する処理を説明するために用いる図である。
【図１０】この発明による画像処理方法の実施形態においてフレームの手ぶれの回転成分を算出する処理を説明するために用いる図である。
【図１１】この発明による画像処理方法の実施形態においてフレームの手ぶれの回転成分を算出する処理を説明するために用いる図である。
【図１２】この発明による画像処理方法の実施形態の概要を説明するための図である。
【図１３】この発明による画像処理方法の実施形態の概要を説明するために用いる図である。
【図１４】この発明による画像処理方法の実施形態の概要を説明するために用いるフローチャートを示す図である。
【図１５】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを複数段階に渡って算出するための処理の例を説明するための図である。
【図１６】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図１７】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図１８】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図１９】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図２０】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図２１】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図２２】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図２３】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図２４】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図２５】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図２６】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図２７】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図２８】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図２９】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図３０】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図３１】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図３２】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図３３】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理の例を説明するための図である。
【図３４】この発明による画像処理方法の実施形態において、ブロック毎動きベクトルを算出するための処理例の処理性能を説明するための図である。
【図３５】この発明による画像処理方法の実施形態の概要を説明するための図である。
【図３６】この発明による画像処理方法の実施形態の特徴を、従来の手法と比較して説明するために用いる図である。
【図３７】この発明による画像処理方法の実施形態の特徴を、従来の手法と比較して説明するために用いる図である。
【図３８】この発明による画像処理方法の実施形態の特徴を、従来の手法と比較して説明するために用いる図である。
【図３９】この発明による画像処理装置の第１の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例を説明するためのフローチャートの一部を示す図である。
【図４０】この発明による画像処理装置の第１の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例を説明するためのフローチャートの一部を示す図である。
【図４１】この発明による画像処理装置の第１の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例を説明するためのフローチャートの一部を示す図である。
【図４２】この発明による画像処理装置の第１の実施形態におけるブロック毎動きベクトル検出処理の第１の例を説明するためのフローチャートの一部を示す図である。
【図４３】この発明による画像処理装置の第１の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例の他の例を説明するためのフローチャートの一部を示す図である。
【図４４】この発明による画像処理装置の第１の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例の他の例を説明するためのフローチャートの一部を示す図である。
【図４５】この発明による画像処理装置の第１の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例の他の例を説明するためのフローチャートの一部を示す図である。
【図４６】この発明による画像処理装置の第１の実施形態の手ぶれの平行移動成分および回転成分を検出する処理例の他の例を説明するための図である。
【図４７】この発明による画像処理装置の第１の実施形態におけるブロック毎動きベクトル検出処理の第１の例を説明するためのフローチャートの一部を示す図である。
【図４８】この発明による画像処理装置の第１の実施形態におけるブロック毎動きベクトル検出処理の第１の例を説明するためのフローチャートの一部を示す図である。
【図４９】この発明による画像処理装置の第１の実施形態におけるブロック毎動きベクトル検出処理の第２の例を説明するためのフローチャートの一部を示す図である。
【図５０】この発明による画像処理装置の第１の実施形態におけるブロック毎動きベクトル検出処理の第２の例を説明するためのフローチャートの一部を示す図である。
【図５１】この発明による画像処理装置の第１の実施形態におけるブロック毎動きベクトル検出処理の第３の例を説明するためのフローチャートの一部を示す図である。
【図５２】この発明による画像処理装置の第１の実施形態におけるブロック毎動きベクトル検出処理の第３の例を説明するためのフローチャートの一部を示す図である。
【図５３】この発明による画像処理装置の第１の実施形態におけるブロック毎動きベクトル検出処理の第３の例を説明するためのフローチャートの一部を示す図である。
【図５４】この発明による画像処理装置の第１の実施形態におけるブロック毎動きベクトル検出処理の第３の例を説明するためのフローチャートの一部を示す図である。
【図５５】この発明による画像処理装置の第１の実施形態におけるブロック毎動きベクトル検出処理の第３の例を説明するために用いる図である。
【図５６】この発明による画像処理装置の第１の実施形態における回転・平行移動加算部１９の構成例を示すブロック図である。
【図５７】この発明による画像処理装置の第１の実施形態における回転・平行移動加算部１９の構成例を説明するための図である。
【図５８】この発明による画像処理装置の第１の実施形態における回転・平行移動処理時におけるフレームメモリからの画像データの読み出しアクセスを説明するための図である。
【図５９】この発明による画像処理装置の第１の実施形態における回転・平行移動処理時におけるフレームメモリからの画像データの読み出しアクセスを説明するための図である。
【図６０】この発明による画像処理装置の第１の実施形態における回転・平行移動処理時におけるフレームメモリからの画像データの読み出しアクセスを説明するための図である。
【図６１】この発明による画像処理装置の第１の実施形態における回転・平行移動処理時におけるフレームメモリからの画像データの読み出しアクセスを説明するための図である。
【図６２】この発明による画像処理装置の第１の実施形態における回転・平行移動加算部１９の処理例を説明するためのフローチャートを示す図である。
【図６３】この発明による画像処理装置の第１の実施形態における回転・平行移動加算部１９の構成例を示すブロック図である。
【図６４】この発明による画像処理装置の第１の実施形態における回転・平行移動加算部１９の構成例を説明するための図である。
【図６５】この発明による画像処理装置の第１の実施形態における回転・平行移動加算部１９の処理例を説明するためのフローチャートを示す図である。
【図６６】この発明による画像処理装置の第１の実施形態における回転・平行移動加算部１９の構成例を示すブロック図である。
【図６７】この発明による画像処理装置の第１の実施形態における回転・平行移動加算部１９の構成例を説明するための図である。
【図６８】この発明による画像処理装置の第１の実施形態における回転・平行移動加算部１９の処理例を説明するためのフローチャートを示す図である。
【図６９】この発明による画像処理装置の第１の実施形態における回転・平行移動加算部１９の処理例を説明するためのフローチャートの一部を示す図である。
【図７０】この発明による画像処理装置の第１の実施形態における回転・平行移動加算部１９の処理例を説明するためのフローチャートの一部を示す図である。
【図７１】この発明による画像処理装置の第３の実施形態の構成例を示すブロック図である。
【図７２】この発明による画像処理装置の第２の実施形態におけるブロック毎動きベクトル検出処理を説明するための図である。
【図７３】この発明による画像処理装置の第２の実施形態におけるブロック毎動きベクトル検出処理を説明するための図である。
【図７４】この発明による画像処理装置の第２の実施形態におけるブロック毎動きベクトル検出処理の例を説明するためのフローチャートの一部を示す図である。
【図７５】この発明による画像処理装置の第２の実施形態におけるブロック毎動きベクトル検出処理の例を説明するためのフローチャートの一部を示す図である。
【図７６】この発明による画像処理装置の第３の実施形態の構成例を示すブロック図である。
【図７７】この発明による画像処理方法の他の例を説明するために用いる図である。
【図７８】ブロックマッチングにより動きベクトルを算出する処理を説明するための図である。
【図７９】ブロックマッチングにより動きベクトルを算出する処理を説明するための図である。
【図８０】ブロックマッチングにより動きベクトルを算出する処理を説明するための図である。
【図８１】ブロックマッチングにより動きベクトルを算出する処理を説明するための図である。
【符号の説明】
【０６３４】
４…画像メモリ、１０１…元フレーム、１０２…参照フレーム、１０３…ターゲットブロック、１０５…サーチ範囲、１０６…参照ブロック、１０７…参照ベクトル、１５…手ぶれベクトル検出部、１９…回転・平行移動加算部、４１〜４５…フレームメモリ、ＴＢＬｉ…ＳＡＤテーブル、ＳＵＭ＿ＴＢＬ…合算ＳＡＤテーブル、ＴＢＬｓ…縮小ＳＡＤテーブル、ＴＢＬｏ…従来のＳＡＤテーブル、ＲＶ…参照ベクトル、ＣＶ…参照縮小ベクトル、ＮＶ１〜ＮＶ４…近傍参照ベクトル、ＢＬＫ＿Ｖｉ…ブロック毎動きベクトル、ＳＵＭ＿Ｖ…合算動きベクトル
【図１】
2008005084.tif 000003
【図２】
2008005084.tif 000004
【図３】
2008005084.tif 000005
【図４】
2008005084.tif 000006
【図５】
2008005084.tif 000007
【図６】
2008005084.tif 000008
【図７】
2008005084.tif 000009
【図８】
2008005084.tif 000010
【図９】
2008005084.tif 000011
【図１０】
2008005084.tif 000012
【図１１】
2008005084.tif 000013
【図１２】
2008005084.tif 000014
【図１３】
2008005084.tif 000015
【図１４】
2008005084.tif 000016
【図１５】
2008005084.tif 000017
【図１６】
2008005084.tif 000018
【図１７】
2008005084.tif 000019
【図１８】
2008005084.tif 000020
【図１９】
2008005084.tif 000021
【図２０】
2008005084.tif 000022
【図２１】
2008005084.tif 000023
【図２２】
2008005084.tif 000024
【図２３】
2008005084.tif 000025
【図２４】
2008005084.tif 000026
【図２５】
2008005084.tif 000027
【図２６】
2008005084.tif 000028
【図２７】
2008005084.tif 000029
【図２８】
2008005084.tif 000030
【図２９】
2008005084.tif 000031
【図３０】
2008005084.tif 000032
【図３１】
2008005084.tif 000033
【図３２】
2008005084.tif 000034
【図３３】
2008005084.tif 000035
【図３４】
2008005084.tif 000036
【図３５】
2008005084.tif 000037
【図３６】
2008005084.tif 000038
【図３７】
2008005084.tif 000039
【図３８】
2008005084.tif 000040
【図３９】
2008005084.tif 000041
【図４０】
2008005084.tif 000042
【図４１】
2008005084.tif 000043
【図４２】
2008005084.tif 000044
【図４３】
2008005084.tif 000045
【図４４】
2008005084.tif 000046
【図４５】
2008005084.tif 000047
【図４６】
2008005084.tif 000048
【図４７】
2008005084.tif 000049
【図４８】
2008005084.tif 000050
【図４９】
2008005084.tif 000051
【図５０】
2008005084.tif 000052
【図５１】
2008005084.tif 000053
【図５２】
2008005084.tif 000054
【図５３】
2008005084.tif 000055
【図５４】
2008005084.tif 000056
【図５５】
2008005084.tif 000057
【図５６】
2008005084.tif 000058
【図５７】
2008005084.tif 000059
【図５８】
2008005084.tif 000060
【図５９】
2008005084.tif 000061
【図６０】
2008005084.tif 000062
【図６１】
2008005084.tif 000063
【図６２】
2008005084.tif 000064
【図６３】
2008005084.tif 000065
【図６４】
2008005084.tif 000066
【図６５】
2008005084.tif 000067
【図６６】
2008005084.tif 000068
【図６７】
2008005084.tif 000069
【図６８】
2008005084.tif 000070
【図６９】
2008005084.tif 000071
【図７０】
2008005084.tif 000072
【図７１】
2008005084.tif 000073
【図７２】
2008005084.tif 000074
【図７３】
2008005084.tif 000075
【図７４】
2008005084.tif 000076
【図７５】
2008005084.tif 000077
【図７６】
2008005084.tif 000078
【図７７】
2008005084.tif 000079
【図７８】
2008005084.tif 000080
【図７９】
2008005084.tif 000081
【図８０】
2008005084.tif 000082
【図８１】
2008005084.tif 000083
【手続補正書】
【提出日】平成19年2月28日(2007.2.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
画面単位で順次に入力される画像について、２画面間の平行移動量を算出すると共に、前記２画面の一方に対する前記２画面の他方の回転角度を算出する算出手段と、
前記２画面の他方を、前記算出手段で算出された平行移動量だけ平行移動すると共に、前記算出手段で算出された回転角度だけ回転させ、前記２画面の一方または前記２画面の一方と他の画面とを重ね合わせて加算した加算処理後画面と重ね合わせて加算する回転・平行移動加算手段と、
を備え、
前記回転・平行移動加算手段は、
第１のメモリに格納されている前記２画面の他方を、前記算出手段で算出された平行移動量だけ移動すると共に、前記算出手段で算出された回転角度だけ回転させるように、前記第１のメモリに対する読み出しアドレスを制御することにより、前記第１のメモリから読み出す回転・平行移動処理手段と、
第２のメモリの格納されている前記２画面の一方または前記２画面の一方と他の画面とを重ね合わせて加算した加算処理後画面を読み出し、前記回転・平行移動処理手段からの前記平行移動および回転処理された前記２画面の他方と、前記２画面の一方または前記加算処理後画面とを重ね合わせて加算することにより、複数枚の画面を重ね合わせて加算した新たな加算処理後画面を得る加算手段と、
前記加算手段で重ね合わされた前記新たな加算処理後画面を前記第２のメモリに書き戻すように制御する制御手段と、
を備えることを特徴とする画像処理装置。
【請求項２】
請求項１に記載の画像処理装置において、
前記回転・平行移動処理手段における前記回転角度に応じた回転量の算出に用いる三角関数を要素とする回転行列において、前記回転角度をγとしたとき、ｃｏｓγ＝１、ｓｉｎγ＝γと近似する
ことを特徴とする画像処理装置。
【請求項３】
請求項１に記載の画像処理装置において、
前記算出手段において算出する前記回転角度は、±ａｒｃｔａｎ１／６４の範囲に限定することを特徴とする画像処理装置。
【請求項４】
請求項１に記載の画像処理装置において、
前記第１のメモリからは前記２画面の他方の画像データをバースト転送すると共に、前記回転角度に応じて前記２画面の他方の読み出しラインを切り換えるべきアドレス位置を、前記バースト転送の境目となるアドレスに設定する
ことを特徴とする画像処理装置。
【請求項５】
請求項４に記載の画像処理装置において、
前記２画面の他方の読み出しラインを決定する判定位置を、前記バースト転送の区間の中央の位置とする
ことを特徴とする画像処理装置。
【請求項６】
請求項１に記載の画像処理装置において、
前記算出手段は、
画面単位で順次に入力される画像について、前記２画面の他方である参照画面と、当該参照画面よりも前の画面である前記２画面の一方である元画面との間の動きベクトルを算出するものであって、前記元画面中において、複数の所定の位置に、それぞれ複数の画素からなる所定の大きさのターゲットブロックを設定し、前記参照画面において、前記ターゲットブロックと同じ大きさの参照ブロックを、前記複数のターゲットブロックの位置に応じて設定された複数のサーチ範囲のそれぞれにおいて複数個設定してブロックマッチングを行い、前記複数のターゲットブロックのそれぞれについてのブロック毎動きベクトルを算出するブロック毎動きベクトル算出手段と、
前記ブロック毎動きベクトル算出手段で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の平行移動量を算出する平行移動量算出手段と、
前記ブロック毎動きベクトル算出手段で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の回転角度を算出する回転角度算出手段と、
を備えることを特徴とする画像処理装置。
【請求項７】
請求項６に記載の画像処理装置において、
前記元画面に対する前記参照画面全体についてのグローバル動きベクトルを算出するグローバル動きベクトル算出手段と、
前記グローバル動きベクトルを用いて、前記ブロック毎動きベクトル算出手段で求められた前記複数のブロック毎動きベクトルのそれぞれを評価する評価手段と、
を備え、
前記評価手段で付与された評価値が高い前記複数のブロック毎動きベクトルの数が予め定められた閾値未満である前記参照画面は、前記回転・平行移動加算手段において重ね合わせ画面から排除する
ことを特徴とする画像処理装置。
【請求項８】
請求項６に記載の画像処理装置において、
前記元画面に対する前記参照画面全体についてのグローバル動きベクトルを生成するグローバル動きベクトル生成手段と、
前記グローバル動きベクトルを用いて、前記ブロック毎動きベクトル算出手段で求められた前記複数のブロック毎動きベクトルのそれぞれを評価する評価手段と、
を備え、
前記平行移動量算出手段および前記回転角度算出手段においては、前記評価手段で付与された評価値が高い複数個の前記ブロック毎動きベクトルのみから前記平行移動量および前記回転角度を算出する
ことを特徴とする画像処理装置。
【請求項９】
請求項７または請求項８に記載の画像処理装置において、
前記ブロック毎動きベクトル算出手段は、
前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出手段と、
前記差分絶対値和算出手段で算出された、前記サーチ範囲内の複数参照ブロック位置についての前記差分絶対値和を記憶する差分絶対値和テーブルを、前記複数個のサーチ範囲のそれぞれに対応して複数生成する差分絶対値和テーブル生成手段と、
前記差分絶対値和テーブルのそれぞれから前記複数のターゲットブロックに対応する複数の前記ブロック毎動きベクトルを算出する手段と、
を備え、
前記グローバル動きベクトル生成手段は、
前記複数の差分絶対値和テーブルのそれぞれの前記差分絶対値和について、前記複数のサーチ範囲のそれぞれで対応する参照ブロック位置のものを合算して合算差分絶対値和を求め、一つのサーチ範囲内の複数参照ブロック位置分の前記合算差分絶対値和を記憶する合算差分絶対値和テーブルを生成する合算差分絶対値和テーブル生成手段と、
前記合算差分絶対値和テーブル生成手段で生成された前記合算差分絶対値和テーブルから、前記グローバル動きベクトルを検出する手段と、
を備えることを特徴とする画像処理装置。
【請求項１０】
請求項６に記載の画像処理装置において、
前記ブロック毎動きベクトル算出手段は、
前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和である差分絶対値和を求める差分絶対値和算出手段と、
前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得手段と、
前記複数のサーチ範囲のそれぞれのターゲットブロックについて、前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての差分絶対値和を記憶する縮小差分絶対値和テーブルを生成する縮小差分絶対値和テーブル生成手段と、
前記縮小差分絶対値和テーブルのそれぞれから前記ブロック毎動きベクトルを算出する手段と、
を備え、
前記縮小差分絶対値和テーブル生成手段は、
前記参照縮小ベクトル取得手段で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出手段と、
前記差分絶対値和算出手段で算出された前記参照ブロックのそれぞれについての前記差分の絶対値の総和から、前記近傍参照ベクトル検出手段で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分絶対値和のそれぞれを算出する分散差分絶対値和算出手段と、  
前記分散差分絶対値和算出手段で算出した前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和を、それまでの前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和に加算する分散加算手段と、
を備えることを特徴とする画像処理装置。
【請求項１１】
請求項６に記載の画像処理装置において、
前記ブロック毎動きベクトル算出手段は、
前記複数のターゲットブロックのそれぞれについて設定されるサーチ範囲のそれぞれにおいて、前記設定した前記複数個の参照ブロックのそれぞれについて当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分を求める差分算出手段と、
前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得手段と、
前記複数のサーチ範囲のそれぞれのターゲットブロックについて、前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての縮小差分絶対値和を記憶する縮小差分絶対値和テーブルを生成する縮小差分絶対値和テーブル生成手段と、
前記縮小差分絶対値和テーブルのそれぞれから前記ブロック毎動きベクトルを算出する手段と、
を備え、
前記縮小差分絶対値和テーブル生成手段は、
前記参照縮小ベクトル取得手段で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出手段と、
前記差分算出手段で算出された前記参照ブロックのそれぞれについての前記差分値から、前記近傍参照ベクトル検出手段で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分値のそれぞれを算出する分散加算値算出手段と、
前記分散加算値算出手段で算出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分値を、それまでの前記近傍の複数の前記参照ベクトルに対応する前記差分絶対値和に加算する加算手段と、
を備えることを特徴とする画像処理装置。
【請求項１２】
請求項６〜請求項１１のいずれかに記載の画像処理装置において、
前記平行移動量算出手段で算出された前記平行移動量および前記回転角度算出手段で算出された前記回転角度に対する、前記ブロック毎動きベクトルのそれぞれが示す平行移動量および回転角度の誤差を求める誤差算出手段と、
前記誤差算出手段で求めた前記誤差の前記複数のブロック毎動きベクトルについての総和が所定の閾値未満であるか否かを判定する判定手段と、
前記判定手段で、前記複数のブロック毎動きベクトルについての総和が所定の閾値未満であるときに、前記参照画面について前記回転・平行移動加算手段における処理を実行するように制御する制御手段と
を設けることを特徴とする画像処理装置。
【請求項１３】
撮像部と、
前記撮像部からの前記撮像画像について、２画面間の平行移動量を算出すると共に、前記２画面の一方に対する前記２画面の他方の回転角度を算出する算出手段と、
前記２画面の他方を、前記算出手段で算出された平行移動量だけ平行移動すると共に、前記算出手段で算出された回転角度だけ回転させ、前記２画面の一方または前記２画面の一方と他の画面とを重ね合わせて加算した加算処理後画面と重ね合わせて加算する回転・平行移動加算手段と、
前記回転・平行移動加算手段で重ね合わされた撮像画像のデータを記録媒体に記録する記録手段と、
を備え、
前記回転・平行移動加算手段は、
第１のメモリに格納されている前記２画面の他方を、前記算出手段で算出された平行移動量だけ移動すると共に、前記算出手段で算出された回転角度だけ回転させるように、前記第１のメモリに対する読み出しアドレスを制御することにより、前記第１のメモリから読み出す回転・平行移動処理手段と、
第２のメモリの格納されている前記２画面の一方または前記２画面の一方と他の画面とを重ね合わせて加算した加算処理後画面を読み出し、前記回転・平行移動処理手段からの前記平行移動および回転処理された前記２画面の他方と、前記２画面の一方または前記加算処理後画面とを重ね合わせて加算することにより、複数枚の画面を重ね合わせて加算した新たな加算処理後画面を得る加算手段と、
前記加算手段で重ね合わされた前記新たな加算処理後画面を前記第２のメモリに書き戻すように制御する制御手段と、
を備えることを特徴とする撮像装置。
【請求項１４】
画面単位で順次に入力される画像について、２画面間の平行移動量を算出すると共に、前記２画面の一方に対する前記２画面の他方の回転角度を算出する算出工程と、
前記２画面の他方を、前記算出工程で算出された平行移動量だけ平行移動すると共に、前記算出手段で算出された回転角度だけ回転させ、前記２画面の一方または前記２画面の一方と他の画面とを重ね合わせて加算した加算処理後画面と重ね合わせて加算する回転・平行移動加算工程と、
を備え、
前記回転・平行移動加算工程は、
第１のメモリに格納されている前記２画面の他方を、前記算出手段で算出された平行移動量だけ移動すると共に、前記算出手段で算出された回転角度だけ回転させるように、前記第１のメモリに対する読み出しアドレスを制御することにより、前記第１のメモリから読み出す回転・平行移動処理工程と、
第２のメモリの格納されている前記２画面の一方または前記２画面の一方と他の画面とを重ね合わせて加算した加算処理後画面を読み出し、前記回転・平行移動処理工程で得られた前記平行移動および回転処理された前記注目画面と、前記２画面の一方または前記加算処理後画面とを重ね合わせて加算することにより、複数枚の画面を重ね合わせて加算した新たな加算処理後画面を得る加算工程と、
前記加算工程で重ね合わされた前記新たな加算処理後画面を前記第２のメモリに書き戻すように制御する制御工程と、
を備えることを特徴とする画像処理方法。
【請求項１５】
請求項１４に記載の画像処理方法において、
前記回転・平行移動処理工程における前記回転角度に応じた回転量の算出に用いる三角関数を要素とする回転行列において、前記回転角度をγとしたとき、ｃｏｓγ＝１、ｓｉｎγ＝γと近似する
ことを特徴とする画像処理方法。
【請求項１６】
請求項１４に記載の画像処理方法において、
前記算出工程において算出する前記回転角度は、±ａｒｃｔａｎ１／６４の範囲に限定することを特徴とする画像処理方法。
【請求項１７】
請求項１４に記載の画像処理方法において、
前記第１のメモリからは前記２画面の他方の画像データをバースト転送すると共に、前記回転角度に応じて前記２画面の他方の読み出しラインを切り換えるべきアドレス位置を、前記バースト転送の境目となるアドレスに設定する
を備えることを特徴とする画像処理方法。
【請求項１８】
請求項１７に記載の画像処理方法において、
前記２画面の他方の読み出しラインを決定する判定位置を、前記バースト転送の区間の中央の位置とする
を備えることを特徴とする画像処理方法。
【請求項１９】
撮像部からの撮像画像について、２画面間の平行移動量を算出すると共に、前記２画面の一方に対する前記２画面の他方の回転角度を算出する算出工程と、
前記２画面の他方を、前記算出工程で算出された平行移動量だけ平行移動すると共に、前記算出工程で算出された回転角度だけ回転させ、前記２画面の一方または前記２画面の一方と他の画面とを重ね合わせて加算した加算処理後画面と重ね合わせて加算する回転・平行移動加算工程と、
前記回転・平行移動加算工程で重ね合わされた撮像画像のデータを記録媒体に記録する記録工程と、
を備え、
前記回転・平行移動加算工程は、
第１のメモリに格納されている前記２画面の他方を、前記算出工程で算出された平行移動量だけ移動すると共に、前記算出手段で算出された回転角度だけ回転させるように、前記第１のメモリに対する読み出しアドレスを制御することにより、前記第１のメモリから読み出す回転・平行移動処理工程と、
第２のメモリの格納されている前記２画面の一方または前記２画面の一方と他の画面とを重ね合わせて加算した加算処理後画面を読み出し、前記回転・平行移動処理工程で得られた前記平行移動および回転処理された前記２画面の他方と、前記２画面の一方または前記加算処理後画面とを重ね合わせて加算することにより、複数枚の画面を重ね合わせて加算した新たな加算処理後画面を得る加算工程と、
前記加算工程で重ね合わされた前記新たな加算処理後画面を前記第２のメモリに書き戻すように制御する制御工程と、
を備えることを特徴とする撮像方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００５２
【補正方法】変更
【補正の内容】
【００５２】
上記課題を解決するために、請求項１の発明は、
画面単位で順次に入力される画像について、２画面間の平行移動量を算出すると共に、前記２画面の一方に対する前記２画面の他方の回転角度を算出する算出手段と、
前記２画面の他方を、前記算出手段で算出された平行移動量だけ平行移動すると共に、前記算出手段で算出された回転角度だけ回転させ、前記２画面の一方または前記２画面の一方と他の画面とを重ね合わせて加算した加算処理後画面と重ね合わせて加算する回転・平行移動加算手段と、
を備え、
前記回転・平行移動加算手段は、
第１のメモリに格納されている前記２画面の他方を、前記算出手段で算出された平行移動量だけ移動すると共に、前記算出手段で算出された回転角度だけ回転させるように、前記第１のメモリに対する読み出しアドレスを制御することにより、前記第１のメモリから読み出す回転・平行移動処理手段と、
第２のメモリの格納されている前記２画面の一方または前記２画面の一方と他の画面とを重ね合わせて加算した加算処理後画面を読み出し、前記回転・平行移動処理手段からの前記平行移動および回転処理された前記２画面の他方と、前記２画面の一方または前記加算処理後画面とを重ね合わせて加算することにより、複数枚の画面を重ね合わせて加算した新たな加算処理後画面を得る加算手段と、
前記加算手段で重ね合わされた前記新たな加算処理後画面を前記第２のメモリに書き戻すように制御する制御手段と、
を備えることを特徴とする画像処理装置を提供する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００５３
【補正方法】変更
【補正の内容】
【００５３】
上述の構成の請求項１の発明による画像処理装置においては、２画面の一方に対する２画面の他方の平行移動量と回転角度とが算出される。そして、算出された平行移動量と回転角度とを用いて、複数枚の画面を順次に重ね合わせる。この重ね合わされた結果の画像は、例えば撮像画像の場合であれば、手ぶれが除去された高画質の画像となる。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００５４
【補正方法】変更
【補正の内容】
【００５４】
この場合に、２画面の他方は、前記平行移動量と回転角度に応じて移動されて、２画面の一方と重ね合わされるようにされた状態で、第１のメモリから読み出され、２画面の一方または加算処理後画面と加算される。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００５８
【補正方法】変更
【補正の内容】
【００５８】
また、請求項６の発明は、請求項１に記載の画像処理装置において、
前記算出手段は、
画面単位で順次に入力される画像について、前記２画面の他方である参照画面と、当該参照画面よりも前の画面である前記２画面の一方である元画面との間の動きベクトルを算出するものであって、前記元画面中において、複数の所定の位置に、それぞれ複数の画素からなる所定の大きさのターゲットブロックを設定し、前記参照画面において、前記ターゲットブロックと同じ大きさの参照ブロックを、前記複数のターゲットブロックの位置に応じて設定された複数のサーチ範囲のそれぞれにおいて複数個設定してブロックマッチングを行い、前記複数のターゲットブロックのそれぞれについてのブロック毎動きベクトルを算出するブロック毎動きベクトル算出手段と、
前記ブロック毎動きベクトル算出手段で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の平行移動量を算出する平行移動量算出手段と、
前記ブロック毎動きベクトル算出手段で算出された複数の前記ブロック毎動きベクトルから、前記元画面に対する前記参照画面の回転角度を算出する回転角度算出手段と、
を備えることを特徴とする。