(57)【要約】【課題】手ぶれを検出するセンサを用いた光学的手ぶれ補正方式と、センサレス手ぶれ補正方式のそれぞれの問題点を解決して、ピクセル精度の手ぶれ補正を行うことができるようにする方法を提供する。【解決手段】撮影時の撮像素子１１の、撮像画像の水平方向および／または垂直方向の位置的変化に対応する変化を検出するセンサ７の検出出力に応じて、被写体からの入射光の撮像素子への入射位置を制御する制御機構を制御して、撮像素子１１の位置的変化による撮像画像の歪みを光学的に補正する。光学的な撮像画像の補正がなされた撮像素子１１からの画像データから、撮像画像の１画面単位での動きベクトルを検出する。検出された動きベクトルに基づいて、撮像素子１１からの画像データについて、撮像画像の歪みを、さらに補正する。【選択図】図１
2007215114.tif 000002
【特許請求の範囲】
【請求項１】
撮影時の撮像素子の、撮像画像の水平方向および／または垂直方向の位置的変化に対応する変化を検出するセンサの検出出力を受信するセンサ出力受信工程と、
前記センサ出力受信工程で受信した前記センサの検出出力に応じて、被写体からの入射光の前記撮像素子への入射位置を制御する制御機構を制御して、前記撮像素子からの画像データの、前記撮像素子の前記位置的変化による撮像画像の歪みを光学的に補正する光学的補正工程と、
前記光学的補正工程で、前記光学的な撮像画像の補正がなされた前記撮像素子からの画像データを受けて、当該画像データから、撮像画像の１画面単位での動きベクトルを検出する動きベクトル検出工程と、
前記動きベクトル検出工程で検出された前記動きベクトルに基づいて、前記撮像素子からの画像データについて、前記撮像素子の前記位置的変化による撮像画像の歪みを、さらに補正するようにする画像歪み補正処理工程と、
を備えることを特徴とする撮像画像の歪み補正方法。
【請求項２】
請求項１に記載の撮像画像の歪み補正方法において、
前記動きベクトル算出工程では、前記センサの検出出力を参照して、前記撮像素子からの画像データから前記動きベクトルを検出することを特徴とする撮像画像信号の歪み補正方法。
【請求項３】
請求項１に記載の撮像画像の歪み補正方法において、
前記動きベクトル検出工程においては、
前記元画面中の前記各分割画像区間において、所定の位置に複数の画素からなる所定の大きさの少なくとも１個のターゲットブロックを設定し、
前記ターゲットブロックと同じ大きさの参照ブロックを、前記注目画面に設定されたサーチ範囲において複数個設定し、
前記複数個の参照ブロックの内から、前記ターゲットブロックと相関の強い前記参照ブロックを検出し、
当該検出した参照ブロックの前記ターゲットブロックに対する画面上の位置ずれ量に基づいて、前記動きベクトルを検出する
ことを特徴とする撮像画像の歪み補正方法。
【請求項４】
請求項３に記載の撮像画像の歪み補正方法において、
前記動きベクトル検出工程は、
前記参照ブロックのそれぞれにおいて、当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和を求める差分絶対値和算出工程と、
前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得工程と、
前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての差分絶対値和を記憶する縮小差分絶対値和テーブルを生成するテーブル生成工程と、
前記縮小差分絶対値和テーブルにおける前記差分絶対値和の最小値に対応する前記参照ベクトルを少なくとも用いて、前記参照画面と前記元画面との間の前記分割画像区間のそれぞれについての動きベクトルを算出する動きベクトル算出工程と、
を備え、
前記テーブル生成工程は、
前記参照縮小ベクトル取得手段で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出工程と、
前記差分絶対値和算出工程で算出された前記参照ブロックのそれぞれについての前記差分の絶対値の総和から、前記近傍参照ベクトル検出工程で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分絶対値和のそれぞれを算出する分散差分絶対値和算出工程と、
前記分散差分絶対値和算出工程で算出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和を、それまでの前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和に加算する分散加算工程と、
を備えることを特徴とする撮像画像の歪み補正方法。
【請求項５】
請求項３または請求項４に記載の撮像画像の歪み補正方法において、
前記動きベクトル検出工程は、
前記センサの検出出力を参照して前記サーチ範囲を設定し、前記動きベクトルを検出することを特徴とする撮像画像の歪み補正方法。
【請求項６】
撮影時の撮像素子の、撮像画像の水平方向および／または垂直方向の位置的変化を検出するセンサの検出出力を受信するセンサ出力受信工程と、
前記センサ出力受信工程で受信した前記センサの検出出力に応じて、被写体からの入射光の前記撮像素子への入射位置を制御する制御機構を制御して、前記撮像素子からの画像データの、前記撮像素子の前記位置的変化による撮像画像の歪みを光学的に補正する光学的補正工程と、
前記光学的補正工程で、前記光学的な画像補正がなされた前記撮像素子からの画像データについて、前記センサの検出出力を参照して、前記撮像素子の前記位置的変化による撮像画像の歪みを補正するようにする画像歪み補正処理工程と、
を備えることを特徴とする撮像画像の歪み補正方法。
【請求項７】
請求項６に記載の撮像画像の歪み補正方法において、
前記画像歪み補正処理工程では、前記センサの検出出力を参照して前記撮像素子の位置的変化が生じたと判別したときに、前記撮像素子からの前記画像データについてぼけを検出して、当該ぼけを除去するように補正する
ことを特徴とする撮像画像の歪み補正方法。
【請求項８】
撮影時の撮像素子の、撮像画像の水平方向および／または垂直方向の位置的変化を検出するセンサと、
前記センサの検出出力に応じて、被写体からの入射光の前記撮像素子への入射位置を制御する制御機構を制御して、前記撮像素子からの画像データの、前記撮像素子の前記位置的変化による撮像画像の歪みを光学的に補正する光学的補正手段と、
前記光学的な撮像画像の補正がなされた前記撮像素子からの画像データを受けて、当該画像データから、撮像画像の１画面単位での動きベクトルを検出する動きベクトル検出手段と、
前記動きベクトル検出手段で検出された前記動きベクトルに基づいて、前記撮像素子からの画像データについて、前記撮像素子の前記位置的変化による撮像画像の歪みを、さらに補正するようにする画像歪み補正処理手段と、
を備えることを特徴とする撮像画像の歪み補正装置。
【請求項９】
撮影時の撮像素子の、撮像画像の水平方向および／または垂直方向の位置的変化を検出するセンサと、
前記センサの検出出力に応じて、被写体からの入射光の前記撮像素子への入射位置を制御する制御機構を制御して、前記撮像素子からの画像データの、前記撮像素子の前記位置的変化による撮像画像の歪みを光学的に補正する光学的補正手段と、
前記光学的な撮像画像の補正がなされた前記撮像素子からの画像データを受けて、当該画像データから、撮像画像の１画面単位での動きベクトルを検出する動きベクトル検出手段と、
前記動きベクトル検出手段で検出された前記動きベクトルに基づいて、前記撮像素子からの画像データについて、前記撮像素子の前記位置的変化による撮像画像の歪みを、さらに補正するようにする画像歪み補正処理手段と、
前記画像歪み補正処理手段で補正された前記撮像画像の画像情報を記録媒体に記録する記録手段と、
を備えることを特徴とする撮像装置。
【請求項１０】
請求項９に記載の撮像装置において、
前記動きベクトル算出手段では、前記センサの検出出力を参照して、前記撮像素子からの画像データから前記動きベクトルを検出する
ことを特徴とする撮像装置。
【請求項１１】
請求項９に記載の撮像装置において、
前記動きベクトル検出手段は、注目画面である参照画面と、当該参照画面よりも前の元画面との間での動きベクトルを算出する手段であって、
前記元画面中の前記各分割画像区間において、所定の位置に複数の画素からなる所定の大きさの少なくとも１個のターゲットブロックが設定されると共に、前記ターゲットブロックと同じ大きさの参照ブロックが、前記注目画面に設定されたサーチ範囲において複数個設定され、
前記複数個の参照ブロックの内から、前記ターゲットブロックと相関の強い前記参照ブロックを検出し、
当該検出した参照ブロックの前記ターゲットブロックに対する画面上の位置ずれ量に基づいて、前記動きベクトルを検出する
ことを特徴とする撮像装置。
【請求項１２】
請求項１１に記載の撮像装置において、
前記動きベクトル検出手段は、
前記参照ブロックのそれぞれにおいて、当該参照ブロック内の各画素の画素値と、前記ターゲットブロック内で対応する位置の各画素の画素値との差分の絶対値の総和を求める差分絶対値和算出手段と、
前記参照ブロックのそれぞれの前記参照画面上の位置の、前記ターゲットブロックの画面上の位置との位置ずれ量を、方向成分も含む参照ベクトルとし、当該参照ベクトルを所定の縮小率で縮小した参照縮小ベクトルを得る参照縮小ベクトル取得手段と、
前記参照縮小ベクトルに応じた大きさの前記参照ベクトルを前記位置ずれ量とする、前記所定の縮小率に応じて削減された数の複数個の前記参照ブロックのそれぞれについての差分絶対値和を記憶する縮小差分絶対値和テーブルを生成するテーブル生成手段と、
前記縮小差分絶対値和テーブルにおける前記差分絶対値和の最小値に対応する前記参照ベクトルを少なくとも用いて、前記参照画面と前記元画面との間の前記分割画像区間のそれぞれについての動きベクトルを算出する動きベクトル算出手段と、
を備え、
前記テーブル生成手段は、
前記参照縮小ベクトル取得手段で取得された前記参照縮小ベクトルの近傍値となる複数の前記参照ベクトルを検出する近傍参照ベクトル検出手段と、
前記差分絶対値和算出手段で算出された前記参照ブロックのそれぞれについての前記差分の絶対値の総和から、前記近傍参照ベクトル検出工程で検出された前記近傍の複数の前記参照ベクトルのそれぞれに対応する差分絶対値和のそれぞれを算出する分散差分絶対値和算出手段と、
前記分散差分絶対値和算出手段で算出した前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和を、それまでの前記近傍の複数の前記参照ベクトルのそれぞれに対応する前記差分絶対値和に加算する分散加算手段と、
を備えることを特徴とする撮像装置。
【請求項１３】
請求項１１または請求項１２に記載の撮像装置において、
前記動きベクトル検出手段は、
前記センサの検出出力を参照して前記サーチ範囲を設定し、前記動きベクトルを検出することを特徴とする撮像装置。
【請求項１４】
撮影時の撮像素子の、撮像画像の水平方向および／または垂直方向の位置的変化を検出するセンサと、
前記センサの検出出力に応じて、被写体からの入射光の前記撮像素子への入射位置を制御する制御機構を制御して、前記撮像素子からの画像データの、前記撮像素子の前記位置的変化による撮像画像の歪みを光学的に補正する光学的補正手段と、
前記光学的補正手段により前記光学的な画像補正がなされた前記撮像素子からの画像データについて、前記センサの検出出力を参照して、前記撮像素子の前記位置的変化による撮像画像の歪みを補正するようにする画像歪み補正処理手段と、
を備えることを特徴とする撮像装置。
【請求項１５】
請求項１４に記載の撮像装置において、
前記画像歪み補正処理手段では、前記センサの検出出力を参照して前記撮像素子の位置的変化が生じたと判別したときに、前記撮像素子からの前記画像データについてぼけを検出して、当該ぼけを除去するように補正する
ことを特徴とする撮像装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、被写体画像の撮像時の手ぶれ等による撮像画像に発生する歪を補正する方法および当該歪を補正する装置ならびに撮像装置に関する。
【背景技術】
【０００２】
例えばビデオカメラやデジタルスチルカメラなどの、電子式に撮像画像を撮像素子に記憶し、読み出すようにする電子式の撮像装置では、手持ちにより動画像の撮影を行なったとき、いわゆる手ぶれによる撮像素子の、撮像画像の水平方向および／または垂直方向に比較的高速の位置的変化を生じると、それは、撮像画像においては、画像の揺れなどの画像歪みとなって現われる。
【０００３】
すなわち、手ぶれが無い場合には、撮像素子の撮像面上において撮像画像の形成位置は同一位置となり、時間方向の複数のフレーム画像を並べた場合に、図４６（Ａ）に示すように、フレーム画像は全く同じ位置に重なり合うものとなる。しかし、手ぶれが生じると、撮像素子の撮像面上に形成される撮像画像の位置が同一位置とはならずに、時間方向の複数のフレーム画像を並べた場合に、図４６（Ｂ）に示すように、複数のフレーム画像は揺れ動いてしまうようなものとなる。
【０００４】
この手ぶれは、特に、ズームレンズを望遠側で使用する場合にはその現象が顕著に生じやすい。このような手ぶれ現象が生じた場合には、静止しているものが揺れて動いてしまい、画像が見にくくなるという問題がある。また、被写体が惚けた状態の撮像画像になってしまうという現象も生じる。
【０００５】
また、静止画の撮影においても、複数フレームの画像を重ね合わせて撮像出力画像を得る場合に、上述と同様にして、手ぶれにより被写体が惚けた状態となる画像歪みを有する撮像画像になってしまう。
【０００６】
この手ぶれによる画像歪みを補正する手法としては、従来、手ぶれを検出するセンサを用いる光学式手ぶれ補正方式と、撮像画像についてデジタル信号処理を行うことで手ぶれを検出すると共に補正処理をするセンサレス手ぶれ補正方式とが提案されている。
【０００７】
現在市場に出回っている民生機における、静止画用途の手ぶれ補正は、光学式手ぶれ補正方式によるものであり、ジャイロセンサもしくは加速度センサを使って手ぶれベクトルを計測し、それを機構系にフィードバックして、ＣＣＤ（Ｃｈａｒｇｅ  Ｃｏｕｐｌｅｄ  Ｄｅｖｉｃｅ）イメージャやＣＭＯＳ（Ｃｏｍｐｌｅｍｅｎｔａｒｙ  Ｍｅｔａｌ  Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ）イメージャなどのイメージセンサ（撮像素子）に射影される像が、ぶれを起こさないように高速に制御する、というものである。
【０００８】
ここでいう機構系としては、レンズ、プリズム、イメージャ（もしくはイメージャと一体化したモジュール）の位置をアクチエータにより制御する機構が提案されており、それぞれ、レンズシフト、プリズムシフト、イメージャシフトと呼ばれている。
【０００９】
一方、センサレス手ぶれ補正方式は、例えば特許文献１（特許第３３０３３１２号公報）や特許文献２（特開平６−８６１４９号公報）等に記載されているように、撮像素子から読み出した撮像画像データから、撮像画像の画面単位の動きベクトルを検出し、この動きベクトルに基づいて、画像メモリに蓄えられている撮像画像データの読み出し位置をシフトして、手ぶれ補正をする方式である。
【００１０】
また、センサレス手ぶれ補正を静止画で実現する手法としては、特許文献３（特開平７−２８３９９９号公報）を始め、幾つか提案はされている。特許文献３は、手ぶれの発生しない程度の短い露光時間で何枚かの静止画を連写撮影し、その静止画間の手ぶれベクトルを求め、その手ぶれベクトルに従って、前記連射撮影した複数枚の静止画を平行移動（およびロール軸方向に回転）させながら加算（もしくは平均化）して行くことで、最終的に手ぶれと低照度ノイズの無い高画質の静止画を得る、というアルゴリズムである。
【００１１】
撮像画像の画面単位の動きベクトルを、撮像画像情報自身から検出する方法の例としては、２画面分の撮像画像間の相関を求めるブロックマッチングが知られている。このブロックマッチングを用いる方法は、ジャイロ（角速度）センサなどの機械的な部品が不要なので、撮像装置の小型、軽量化を実現することができるという点で有利である。
【００１２】
ブロックマッチングは、撮像装置部からの撮像画像について、注目画面である参照画面と、当該参照画面よりも１画面分前の撮像画面である元画面との間の１画面分単位での動きベクトルを、所定の大きさの矩形領域のブロックについて、参照画面と元画面との相関を算出することにより算出する方法である。
【００１３】
なお、ここで画面とは、１フレームまたは１フィールドの画像データからなる画像を意味しているが、この明細書では、説明の便宜上、画面は１フレームからなるものとして、画面をフレームと称することとする。したがって、参照画面は参照フレーム、元画面は元フレームと称する。
【００１４】
例えば、参照フレームの画像データは、撮像装置部からの現フレームの画像データ、または現フレームの画像データがフレームメモリに格納されて１フレーム分遅延されたものとされる。元フレームの画像データは、参照フレームの画像データがさらにフレームメモリに格納されて１フレーム分遅延されたものとされる。
【００１５】
図４７および図４８は、従来のブロックマッチングの概要を説明するための図である。また、図４９は、従来のブロックマッチング処理のフローチャートの一例である。
【００１６】
ブロックマッチングにおいては、図４７に示すように、元フレーム１０１の任意の所定の位置において、水平方向の複数画素および垂直方向の複数ライン分からなる所定の大きさの矩形領域からなるターゲットブロック１０３が設定される。
【００１７】
これに対して、参照フレーム１０２において、元フレームのターゲットブロック１０３の位置と同じ位置に、ターゲットブロックの射影イメージブロック１０４（図４７の点線参照）を想定し、このターゲットブロックの射影イメージブロック１０４を中心としたサーチ範囲１０５（図４７の一点鎖線参照）を設定すると共に、ターゲットブロック１０３と同じ大きさの参照ブロック１０６を考える。
【００１８】
そして、この参照ブロック１０６の位置を参照フレーム１０２のサーチ範囲１０５内において移動させ、各位置において参照ブロック１０６に含まれる画像内容と、ターゲットブロック１０３の画像内容との相関を求め、最も相関が強いとして検出された参照ブロック１０６の位置を、元フレームのターゲットブロック１０３が、参照フレーム１０２において移動した位置として検出するようにする。そして、その検出した参照フレーム１０６の位置と、ターゲットブロックの位置との間の位置ずれ量を、方向成分を含む量としての動きベクトルとして検出するようにする。
【００１９】
この場合、参照ブロック１０６は、サーチ範囲１０５を、例えば水平方向および垂直方向に、１画素または複数画素単位で移動させるようにする。したがって、サーチ範囲１０５内には、複数個の参照ブロックが設定されることになる。
【００２０】
ここで、ターゲットブロック１０３と、サーチ範囲１０５内を移動する各参照ブロック１６との相関は、例えば、ターゲットブロック１０３内の各画素の輝度値と、参照ブロック１０６内の対応する各画素の輝度値との差分の絶対値の、ブロック内の全画素についての総和（この差分の絶対値の総和を差分絶対値和と呼ぶ。以下、この差分絶対値和をＳＡＤ（Ｓｕｍ  ｏｆ  Ａｂｓｏｌｕｔｅ  Ｄｉｆｆｅｒｅｎｃｅ）と記載することとする）を求めることにより検出する。すなわち、ＳＡＤ値が最小となる位置の参照ブロック１０６が最も相関が強い参照ブロックとして検出され、その検出された参照ブロック１０６のターゲットブロック１０３の位置に対する位置ずれ量が動きベクトルとして検出される。
【００２１】
ブロックマッチングでは、サーチ範囲１０５内に設定される複数個の参照ブロック１０６のそれぞれの、ターゲットブロック１０３の位置に対する位置ずれ量は、方向成分を含む量としての参照ベクトル１０７（図４７参照）で表現される。各参照ブロック１０６の参照ベクトル１０７は、参照ブロック１０６の参照フレーム１０２上の位置に応じた値となるが、従来のブロックマッチングでは、ＳＡＤ値が最小値となる参照ブロック１０６の参照ベクトルを、動きベクトルとして検出するものである。
【００２２】
そこで、ブロックマッチングでは、一般に、図４８に示すように、サーチ範囲１０５内において設定される複数個の参照ブロック１０６のそれぞれとターゲットブロック１０３との間におけるＳＡＤ値（以下、説明の簡単のため参照ブロックについてのＳＡＤ値という）を、それぞれの参照ブロック１０６の位置に応じた参照ベクトル１０７のそれぞれに対応させて、メモリに記憶しておき、そのメモリに記憶された全ての参照ブロック１０６についてのＳＡＤ値の中から、最小のＳＡＤ値の参照ブロック１０６を検出することで、動きベクトル１１０を検出するようにしている。
【００２３】
サーチ範囲１０５内に設定された複数個の参照ブロック１０６の位置に応じた参照ベクトル１０７のそれぞれに対応させて、それぞれの参照ブロック１０６についてのＳＡＤ値を記憶したものを、差分絶対値和テーブル（以下ＳＡＤテーブルという）と呼ぶ。図４８のＳＡＤテーブル１０８が、これを示しており、このＳＡＤテーブル１０８において、それぞれの参照ブロック１０６についてのＳＡＤ値をＳＡＤテーブル要素１０９という。
【００２４】
なお、上述の説明において、ターゲットブロック１０３および参照ブロック１０６の位置とは、それらのブロックの任意の特定の位置、例えば中心位置を意味するものであり、参照ベクトル１０７は、参照フレーム１０２におけるターゲットブロック１０３の射影イメージブロック１０４の位置と、参照ブロック１０６の位置との間のずれ量（方向を含む）を示すものである。図４７および図４８の例では、ターゲットブロック１０３は、フレームの中心位置にあるとしている場合である。
【００２５】
そして、各参照ブロック１０６に対応する参照ベクトル１０７は、参照フレーム１０２上のターゲットブロック１０３に対応する位置に対する当該各参照ブロック１０６の位置ずれとなっているので、参照ブロック１０６の位置が特定されると、その位置に対応して参照ベクトルの値も特定される。したがって、ＳＡＤテーブル１０８のメモリにおける参照ブロックのＳＡＤテーブル要素のアドレスが特定されると、対応する参照ベクトルは特定されることになる。
【００２６】
以上説明した従来のブロックマッチングの処理を、図４９のフローチャートを参照して説明すると、次のようになる。
【００２７】
先ず、サーチ範囲１０５内の１つの参照ブロックＩｉを指定するが、これは、当該参照ブロックＩｉに対応する参照ベクトルを指定することに等しい（ステップＳ１）。ここで、図４９において、（ｖｘ，ｖｙ）は、ターゲットブロックのフレーム上の位置を基準位置（０，０）としたときに、指定された参照ベクトルにより示される位置を示し、ｖｘは指定された参照ベクトルによる、基準位置からの水平方向のずれ量成分であり、また、ｖｙは指定された参照ベクトルによる、基準位置からの垂直方向成分のずれ量成分である。
【００２８】
ここでは、ずれ量ｖｘ、ｖｙは、画素を単位とした値とされ、例えばｖｘ＝＋１は、基準位置（０，０）に対して、水平方向の右方向に１画素分ずれた位置を示し、また、ｖｘ＝−１は、基準位置（０，０）に対して、水平方向の左方向に１画素分ずれた位置を示している。また、例えばｖｙ＝＋１は、基準位置（０，０）に対して、垂直方向の下方向に１画素分ずれた位置を示し、また、ｖｙ＝−１は、基準位置（０，０）に対して、垂直方向の上方向に１画素分ずれた位置を示している。
【００２９】
以上のように、（ｖｘ、ｖｙ）は、参照ベクトルで示される基準位置に対する位置（以下、簡単のため、参照ベクトルで示される位置という）を示しており、参照ベクトルのそれぞれに対応している。つまり、ｖｘおよびｖｙを整数としたとき、（ｖｘ、ｖｙ）は参照ベクトルのそれぞれを表すことになる。したがって、以下の説明においては、（ｖｘ、ｖｙ）の位置を示す参照ベクトルを、参照ベクトル（ｖｘ、ｖｙ）と記載することがある。
【００３０】
ここで、サーチ範囲の中心位置をターゲットブロックの位置、つまり前記基準位置（０，０）とし、サーチ範囲を、水平方向には±Ｒｘ、垂直方向には±Ｒｙとしたとき、
−Ｒｘ≦ｖｘ≦＋Ｒｘ、−Ｒｙ≦ｖｙ≦＋Ｒｙ
とされるものである。
【００３１】
次に、ターゲットブロックＩｏ内の１つの画素の座標（ｘ，ｙ）を指定する（ステップＳ２）。次に、ターゲットブロックＩｏ内の指定された１つの座標（ｘ，ｙ）の画素値Ｉｏ（ｘ，ｙ）と、参照ブロックＩｉ内の対応する画素位置の画素値Ｉｉ（ｘ＋ｖｘ，ｙ＋ｖｙ）との差分の絶対値αを算出する（ステップＳ３）。すなわち、差分絶対値αは、
α＝｜Ｉｏ（ｘ，ｙ）−Ｉｉ（ｘ＋ｖｘ，ｙ＋ｖｙ）｜    ・・・（式１）
として算出される。
【００３２】
そして、算出した差分絶対値αを、当該参照ブロックＩｉの参照ベクトル（ｖｘ，ｖｙ）が指し示すアドレス（テーブル要素）の、それまでのＳＡＤ値に加算し、その加算であるＳＡＤ値を、当該アドレスに書き戻すようにする（ステップＳ４）。すなわち、参照ベクトル（ｖｘ，ｖｙ）に対応するＳＡＤ値を、ＳＡＤ（ｖｘ，ｖｙ）と表すと、
ＳＡＤ（ｖｘ，ｖｙ）＝Σα＝Σ｜Ｉｏ（ｘ，ｙ）−Ｉｉ（ｘ＋ｖｘ，ｙ＋ｖｙ）｜
・・・（式２）
として算出し、当該参照ベクトル（ｖｘ，ｖｙ）が指し示すアドレスに書き込むようにする。
【００３３】
次に、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素について、上記の演算を行なったか否かを判別し（ステップＳ５）、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素については、未だ、演算は終了していないと判別したときには、ステップＳ２に戻り、ターゲットブロックＩｏ内の次の座標（ｘ，ｙ）の画素位置を指定し、このステップＳ２以降の処理を繰り返す。
【００３４】
また、ステップＳ５で、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素について、上記の演算を行なったと判別したときには、当該参照ブロックについてのＳＡＤ値の算出が終了したと判別して、サーチ範囲内の全ての参照ブロック、すなわち、全ての参照ベクトル（ｖｘ，ｖｙ）についての上記の演算処理を完了したか否か判別する（ステップＳ６）。
【００３５】
ステップＳ６で、未だ、上記の演算処理を完了していない参照ベクトル（ｖｘ，ｖｙ）があると判別すると、ステップＳ１に戻り、上記の演算処理を完了していない次の参照ベクトル（ｖｘ，ｖｙ）を設定して、このステップＳ１以降の処理を繰り返す。
【００３６】
そして、ステップＳ６で、上記の演算処理を完了していない参照ベクトル（ｖｘ，ｖｙ）はサーチ範囲内になくなったと判別すると、ＳＡＤテーブルが完成したとして、当該完成したＳＡＤテーブルにおいて、最小値となっているＳＡＤ値を検出する（ステップＳ７）。そして、当該最小値となっているＳＡＤ値のアドレスに対応する参照ベクトルを動きベクトルとして検出する（ステップＳ８）。ここで、ＳＡＤの最小値をＳＡＤ（ｍｘ，ｍｙ）と書き表すと、目的とする動きベクトルは、位置（ｍｘ，ｍｙ）を示すベクトル（ｍｘ，ｍｙ）として算出される。
【００３７】
以上で、１つのターゲットブロックに対するブロックマッチングによる動きベクトルの検出処理は、終了となる。
【００３８】
なお、図５０に示すように、一般に、撮像素子では、その全画素を有効画素として扱うのではなく、全画素からなる領域（以下、実効画像領域という）ＡＦＬのうちの、周辺の領域を除く、水平有効領域および垂直有効領域で定まる中央部を有効画像領域ＥＦＬとして用いているものが多い。
【００３９】
このようなイメージャを用いた場合、手ぶれ補正により読み出し画素位置が変化しても、手ぶれ量が、実効画像領域ＡＦＬと有効画像領域ＥＦＬとの差分よりも小さい範囲では、イメージャが元々有している画素のデータを用いて歪み補正をすることができるので、補間処理などにより、手ぶれ補正に必要なデータを生成する場合に比べて、画像の劣化は少なくなる。
【００４０】
上記の特許文献は、次の通りである。
【特許文献１】特許第３３８４４５９号公報
【特許文献２】特開平６−８６１４９号公報
【特許文献３】特開平７−２８３９９９号公報
【発明の開示】
【発明が解決しようとする課題】
【００４１】
昨今の電子式の撮像装置の市場においては、ジャイロセンサの低価格化、高性能化、小型化に伴い、手ぶれ補正方式としては、このジャイロセンサを用いた光学式手ぶれ補正方式が主流となっている。
【００４２】
しかしながら、ここ数年においては、デジタルスチルカメラの急速な普及と、それと機を同じくした急速な高画素化の流れが、新たな問題を生み始めている。それは、低照度（露光時間が長い）ときの静止画においても、手ぶれ補正が強く求められているものの、解がジャイロセンサ等のセンサを用いたものしか存在せず、ジャイロセンサの弱点やその他の問題が露呈しつつある点である。
【００４３】
すなわち、従来のジャイロセンサの検出精度では、画像のピクセル（画素）精度の手ぶれベクトルの検出は困難である。
【００４４】
また、光学式手ぶれ補正方式では、前述したように、レンズ、プリズム、イメージャ（もしくはイメージャと一体化したモジュール）の位置をアクチュエータにより制御する機構に対して、ジャイロセンサによって検出した手ぶれベクトルに基づいて生成した制御信号をフィードバックするものであるため、上述のジャイロセンサ自体の精度誤差に加え、機構系へのフィードバック遅延、もしくはフィードバック遅延を回避するための予測誤差、そして、機構系の制御誤差も重畳され、とてもピクセル精度で手ぶれ補正をかけることは不可能である。
【００４５】
一方、センサレス手ぶれ補正の場合、原理的に、ロール軸方向の回転成分を含んだピクセル精度の手ぶれベクトル検出が実現可能であり、また、センサやレンズシフト等の機構を除去できるため、コスト的にも相当優位である。
【００４６】
しかし、従来のブロックマッチングに依存する技術の延長では、１画面分の画素数に比例してＳＡＤテーブルの規模が増加するため、現在の５００万画素オーバーの静止画サイズの動きベクトル検出を、現実的な回路規模で実現するのは非常に困難である。
【００４７】
過去、各社様々な工夫を凝らしながら、ＮＴＳＣ（Ｎａｔｉｏｎａｌ  Ｔｅｌｅｖｉｓｉｏｎ  Ｓｙｓｔｅｍ  Ｃｏｍｍｉｔｔｅｅ）動画の高々１７万画素の手ぶれベクトル検出の回路規模削減に苦慮していた背景がある上に、ＮＴＳＣ動画の場合、６０ｆｐｓ（ｆｒａｍｅ  ｐｅｒ  ｓｅｃｏｎｄ；フレーム／秒）もしくは３０ｆｐｓというように、フレームレートが高いことが前提であるため、手ぶれのサーチ範囲は狭くて済むが、静止画の場合、重ね合わせる複数枚のフレームのフレームレートが、３ｆｐｓ程度が前提となり、サーチ範囲が極端に大きくなることも問題を困難にしている一因である。画素数と同じく、サーチ範囲にも比例してＳＡＤテーブルのテーブル要素数が増加するからである。
【００４８】
このように、ブロックマッチング技法において、最大の問題となっているのが、ＳＡＤテーブルの増大である。既に述べたように、デジタルカメラにおいては、そのイメージャが５００万画素以上が前提となっている昨今において、画素数に比例してＳＡＤテーブルサイズが大きくならざるを得ない上、上述のように、静止画の場合、３ｆｐｓ程度のため、動画の６０ｆｐｓの手ぶれ範囲と比較して、何１０倍も広いサーチ範囲が必要であり、当該サーチ範囲の拡大は、即ちＳＡＤテーブルの増大と等しいからである。
【００４９】
多人数評価の結果、３ｆｐｓの静止画の場合における手ぶれ範囲は、全フレームを１００%として±１０％程度であることが判明している。既に高級機では世に出ている１２００万画素を仮定し、現状で提案されている技術のまま、必要なＳＡＤテーブルサイズを見積もると、約８０メガビットである。しかも、現実的な処理速度を満たそうとすると、このＳＡＤテーブル情報を格納するメモリは、内蔵ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））であることが求められる。半導体プロセスルールが進んだとは言え、このサイズは、ほぼ３桁程度、現実的なレベルからはかけ離れている。
【００５０】
この発明は、以上の問題点を解決して、ピクセル精度の手ぶれ補正を行うことができるようにする方法および装置を提供することを目的とする。
【課題を解決するための手段】
【００５１】
上記の課題を解決するために、請求項１の発明は、
撮影時の撮像素子の、撮像画像の水平方向および／または垂直方向の位置的変化に対応する変化を検出するセンサの検出出力を受信するセンサ出力受信工程と、
前記センサ出力受信工程で受信した前記センサの検出出力に応じて、被写体からの入射光の前記撮像素子への入射位置を制御する制御機構を制御して、前記撮像素子からの画像データの、前記撮像素子の前記位置的変化による撮像画像の歪みを光学的に補正する光学的補正工程と、
前記光学的補正工程で、前記光学的な撮像画像の補正がなされた前記撮像素子からの画像データを受けて、当該画像データから、撮像画像の１画面単位での動きベクトルを検出する動きベクトル検出工程と、
前記動きベクトル検出工程で検出された前記動きベクトルに基づいて、前記撮像素子からの画像データについて、前記撮像素子の前記位置的変化による撮像画像の歪みを、さらに補正するようにする画像歪み補正処理工程と、
を備えることを特徴とする撮像画像の歪み補正方法を提供する。
【００５２】
上述の構成の請求項１の発明によれば、例えばジャイロセンサなどのセンサにより、例えば手ぶれなどを起因とする、撮影時の撮像素子の、撮像画像の水平方向および／または垂直方向の位置的変化に対応する変化が検出され、そのセンサの検出出力に基づいて、光学式補正が実行される。
【００５３】
この光学式補正だけでは、前述したように、ピクセル精度の画像歪み補正（例えば手ぶれ補正）はできない。しかし、請求項１の発明においては、当該光学式補正がなされた撮像素子からの撮像画像データから動きベクトルが検出され、その検出された動きベクトルに基づいて、画像歪み補正処理工程においてピクセル精度の画像歪みが補正される。
【００５４】
この場合に、動きベクトル検出工程では、光学式補正により補正された撮像画像の画像データから動きベクトルを検出するものであり、その動きベクトルは、光学式補正で除去できなかった画像歪みに対応するものである。したがって、この動きベクトル検出工程において、例えば請求項３のように、前述したブロックマッチングを用いたときであっても、動きベクトルのサーチ範囲を、光学式手ぶれ補正で除去できなかった画像歪みに対応する狭いものとすることができ、ＳＡＤテーブルの要素数を実現可能なものとすることができる。
【００５５】
また、請求項２の発明は、請求項１に記載の撮像画像の歪み補正方法において、
前記動きベクトル算出工程では、前記センサの検出出力を参照して、前記撮像素子からの画像データから前記動きベクトルを検出することを特徴とする画像信号の歪み補正方法を提供する。
【００５６】
上述の構成の請求項２の発明によれば、光学式補正において、センサの検出出力に対して、前述したようなフィードバック制御の遅延があった場合に、動きベクトル算出工程では、センサの最新の検出出力を参照して例えばサーチ範囲を設定することが可能となり、動きベクトルの検出精度が向上する。
【発明の効果】
【００５７】
この発明によれば、光学式補正がなされた撮像素子からの撮像画像データについて、光学式補正で除去できなかった画像歪みを除去するように信号処理するようにするので、従来の光学式手ぶれ補正方式と、センサレス手ぶれ補正方式の問題点を解消しながら、ピクセル精度の画像歪みの補正が可能となる。
【発明を実施するための最良の形態】
【００５８】
以下、この発明による撮像画像の歪み補正装置および方法の実施の形態を、撮像装置に適用した場合を例に、図を参照しながら説明する。
【００５９】
［この発明による撮像画像の歪み補正装置の第１の実施形態］
図１は、この発明の撮像画像の歪み補正装置の第１の実施形態が適用された撮像装置の一例のブロック図を示すものである。
【００６０】
図１に示すように、この実施形態の撮像装置は、システムバス２にＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１が接続されると共に、システムバス２に、撮像信号処理系１０や、ユーザ操作入力部３、画像メモリ部４、記録再生装置部５などが接続されて構成されている。なお、この明細書においては、ＣＰＵ１は、種々のソフトウエア処理を行なうプログラムを記憶するＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やワークエリア用ＲＡＭなどを含むものとしている。
【００６１】
この実施形態の撮像装置の所定位置には、ジャイロセンサ７が取り付けられており、このジャイロセンサ７により、撮影時の撮像素子１１の、撮像画像の水平方向および／または垂直方向の位置的変化に対応する変化（いわゆる手ぶれ）が検出される。そして、このジャイロセンサ７の検出出力が、ＣＰＵ１に供給されている。
【００６２】
また、この実施形態では、撮像用のレンズやプリズムなどを備えるカメラ光学系１０Ｌは、光学的手ぶれ補正用のアクチュエータ８により、被写体からの入射光の撮像素子１１への入射位置を制御することができるようにされている光学的手ぶれ補正機構部を備える。この例では、光学的手ぶれ補正機構部は、カメラ光学系１０Ｌのレンズまたはプリズムの位置を、入射光の光軸方向に対して直交する方向に変移させる機構とされている。
【００６３】
そして、このアクチュエータ７には、ＣＰＵ１から、ジャイロセンサ６からの手ぶれ検出出力に応じて生成された光学的手ぶれ補正信号ＣＴＬが供給されて、カメラ光学系１０Ｌのレンズまたはプリズムの位置を変移させる光学的手ぶれ補正機構が制御されて、被写体からの入射光の撮像素子１１への入射位置が、撮影時の撮像素子１１の、撮像画像の水平方向および／または垂直方向の位置的変化に関わらず、同じ位置となるように補正（光学的補正）されるようにされている。
【００６４】
なお、光学的手ぶれ補正機構として、カメラ光学系１０Ｌのレンズやプリズムを入射光の光軸方向に対して直交する方向に位置制御するのではなく、撮像素子１１をアクチュエータ８により入射光の光軸方向に対して直交する方向に位置制御するものを用いるようにして、上述の光学的補正を行うようにしても良い。
【００６５】
図１の例の撮像装置においては、ユーザ操作入力部３を通じた撮像記録開始操作を受けて、後述するような撮像画像データの記録処理を行なう。また、ユーザ操作入力部３を通じた撮像記録画像の再生開始操作を受けて、図１の撮像装置は、記録再生装置部５の記録媒体に記録された撮像画像データの再生処理を行なう。
【００６６】
図１に示すように、撮像レンズ１０Ｌを備えるカメラ光学系（図示は省略）を通じた被写体からの入射光は、撮像素子１１に照射されて撮像される。撮像素子１１は、ＣＣＤイメージャやＣＭＯＳイメージャで構成されている。
【００６７】
この撮像時、手ぶれが発生したときには、ジャイロセンサ７の検出出力から、ＣＰＵ１は、発生した手ぶれに応じた動きベクトル（手ぶれベクトル）を生成し、生成した動きベクトルから光学的手ぶれ補正信号ＣＴＬを生成する。そして、ＣＰＵ１は、生成した光学的手ぶれ補正信号ＣＴＬをアクチュエータ８に供給する。これにより、撮像素子１１から得られる撮像画像データは、光学的手ぶれ補正が実行されたものとなる。
【００６８】
この例の撮像装置においては、撮像記録開始操作がなされると、撮像素子１１からは、タイミング信号発生部１２からのタイミング信号により、前記光学的手ぶれ補正が実行された後の撮像画像データがサンプリングされることにより、赤（Ｒ）、緑（Ｇ）、青（Ｂ）の３原色から構成されるベイヤー配列のＲＡＷ信号であるデジタル撮像信号が出力される。
【００６９】
出力された撮像信号は、前処理部１３に供給され、欠陥補正やγ補正等の前処理が施され、データ変換部１４に供給される。
【００７０】
データ変換部１４は、これに入力された撮像信号から、輝度信号成分Ｙと、色差信号成分Ｃｂ／Ｃｒとにより構成されるデジタル撮像信号（ＹＣデータ）に変換し、そのデジタル撮像信号をシステムバスを介して、画像メモリ部４に供給する。
【００７１】
画像メモリ部４は、この図１の例においては、２個のフレームメモリ４１，４２からなり、データ変換部１４からのデジタル撮像信号は、先ず、フレームメモリ４１に格納される。そして、１フレーム経過すると、フレームメモリ４１に記憶されているデジタル撮像信号が、フレームメモリ４２に転送されると共に、フレームメモリ４１には、データ変換部１４からの新たなフレームのデジタル撮像信号が書き込まれる。したがって、フレームメモリ４２には、フレームメモリ４１に格納されているフレーム画像よりも１フレーム分前のフレーム画像が格納されている。
【００７２】
動きベクトル検出部１５は、この実施形態では、撮像画像の動きベクトルを検出する方法として、２画面間の相関を求めるブロックマッチングを用いる。この場合、ブロックマッチングにおける前述したターゲットブロックについてのサーチ範囲は、光学的手ぶれ補正により補正しきれずに残留した動きベクトルを検出することができればよいので、狭くすることができる。
【００７３】
この第１の実施の形態では、このサーチ範囲は、固定的に予め定められる。すなわち、この実施形態では、前述した光学的手ぶれ補正によって補正しきれずに残留する動きベクトルの大きさを予め測定するなどして検知しておく。そして、動きベクトル検出部１５におけるサーチ範囲は、その残留する動きベクトルを少なくとも検出することができるサーチ範囲とする。
【００７４】
この場合、残留する動きベクトルは、ジャイロセンサ７で検出される手ぶれ動きベクトルの大きさに応じたものとなると考えられるが、想定される残留動きベクトルの最大値を定めて、その残留動きベクトルの最大値を少なくとも検出することができるように、サーチ範囲を設定する。
【００７５】
また、サーチ範囲の設定に当たっては、アクチュエータ８による光学的手ぶれ補正機構におけるフィードバック遅延を考慮する必要がある。すなわち、ジャイロセンサ７の検出出力から光学的手ぶれ補正信号ＣＴＬが生成され、当該生成された光学的手ぶれ補正信号ＣＴＬがアクチュエータ８に供給されて、実際に光学的手ぶれ補正機構が動作して光学的手ぶれ補正が実行されるまでの間に遅延時間がある。
【００７６】
このため、その遅延時間により、撮像素子１１から読み出された撮像画像データが得られる時点でのジャイロセンサ７の検出出力である手ぶれ動きベクトルは、光学的手ぶれ補正信号を生成する源となる手ぶれ動きベクトルとが異なっている恐れがある。そして、その手ぶれ動きベクトルの異なりは、動きベクトル検出部１５で検出される動きベクトルに含まれる。
【００７７】
よって、この実施形態では、前記光学的手ぶれ補正におけるフィードバック遅延による手ぶれ動きベクトルの異なり分を、前記残留動きベクトルの最大値に加えた大きさの手ぶれ動きベクトルを検出することができるようなサーチ範囲の大きさに設定する。なお、実際のサーチ範囲を設定するときには、ジャイロセンサ７自身の精度誤差を考慮すると共に、さらに安全のため、所定のマージン分を加えるのはもちろんである。
【００７８】
そして、動きベクトル検出部１５は、システムバス２を介して、これら２個のフレームメモリ４１およびフレームメモリ４２をアクセスして、その格納撮像画像データを読み出し、当該撮像画像データからの動きベクトル検出処理を、前記設定されたサーチ範囲として実行する。この場合、フレームメモリ４２に格納されているフレーム画像は、元フレームの画像とされ、また、フレームメモリ４１に格納されているフレーム画像は、参照フレームの画像とされる。
【００７９】
そして、動きベクトル検出部１５は、その検出結果である動きベクトルを、その後段の解像度変換部１６に制御信号として伝達する。
【００８０】
解像度変換部１６は、動きベクトル検出部１５から受け取った動きベクトルにしたがって、フレームメモリ４２に格納されている遅延フレームの画像データを切り出しながら、必要な解像度および画像サイズに変換する処理をする。このフレームメモリ４２からの、算出した画像歪み補正量にしたがった切り出しにより、変換後の画像は、手ぶれがピクセル単位で除去される画像となる。
【００８１】
この解像度変換部１６からの手ぶれに基づく画像歪みが除去された画像データは、ＮＴＳＣ（Ｎａｔｉｏｎａｌ  Ｔｅｌｅｖｉｓｉｏｎ  Ｓｙｓｔｅｍ  Ｃｏｍｍｉｔｔｅｅ）エンコーダ１８によりＮＴＳＣ方式の標準カラー映像信号に変換され、電子式ビューファインダーを構成するモニターディスプレイ６に供給され、撮影時の画像がその表示画面にモニター表示される。
【００８２】
このモニター表示と並行して、解像度変換部１６からの手ぶれが除去された画像データはコーデック部１７で記録変調などのコーディング処理された後、記録再生装置部５に供給されて、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）などの光ディスクやハードディスクなどの記録媒体に記録される。
【００８３】
この記録再生装置部５の記録媒体に記録された撮像画像データは、ユーザ操作入力部３を通じた再生開始操作に応じて読み出され、コーデック部１７に供給されて、再生デコードされる。そして、再生デコードされた画像データはＮＴＳＣエンコーダ１８を通じてモニターディスプレイ６に供給され、再生画像がその表示画面に表示される。なお、図１では、図示を省略したが、ＮＴＳＣエンコーダ１８からの出力映像信号は、映像出力端子を通じて外部に導出することが可能とされている。
【００８４】
動きベクトル検出部１５は、ハードウエアにより構成することできるし、また、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）を用いて構成することもできる。さらには、ＣＰＵ１によりソフトウエア処理とすることもできる。同様に、補正解像度変換部１６も、ハードウエアにより構成することできるし、また、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）を用いて構成することもできる。さらには、ＣＰＵ１によりソフトウエア処理とすることもできる。
【００８５】
［動きベクトル検出部１５の構成例］
この実施の形態では、上述したように、動きベクトル検出部１５における撮像画像データから動きベクトルを検出する方法として、２画面間の相関を求めるブロックマッチングを用いる。
【００８６】
ここで、この実施形態では、動きベクトル検出部１５におけるブロックマッチング処理においては、サーチ範囲を前述したように狭くできるので、ピクセル精度の動きベクトルの検出を行う場合においても、ＳＡＤテーブルの規模を実現可能なレベルにまで下げることができる。
【００８７】
しかし、この実施形態では、ＳＡＤテーブルの規模を、従来よりも小さくすることができる新規なブロックマッチング手法を用いて、より現実的な回路規模で動きベクトル検出部１５を構成することができるようにしている。
【００８８】
ＳＡＤテーブルの規模を小さくする方法として実現できるレベルの現実的な提案としては、特許文献４（特開２００５−３８３９６公報）を挙げることができる。この特許文献４に示されたものは、画像を縮小変換したサイズで動ベクトルを求める手段と、同一のＳＡＤテーブルを複数のブロックで共有する手段から構成される。画像の縮小変換と、ＳＡＤテーブルの複数ブロックでの共有化は、ＳＡＤテーブルサイズの削減を実現するための、非常に良い手法であり、ＭＰＥＧ（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）画像圧縮方式における動きベクトル検出やシーンチェンジ検出等、他分野でも使われている。
【００８９】
しかし、この特許文献４のアルゴリズムの問題点として、画像の縮小変換と、その際のメモリ（ＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））アクセスに、時間とメモリ容量を消費することと、ＳＡＤテーブルを複数ブロックで時分割アクセスする手法のため、メモリアクセスが非常に増加し、この処理にも時間を要してしまうという課題がある。動画の手ぶれ補正においては、リアルタイム性と同時にシステム遅延時間の短縮が求められるため、この処理時間の問題が課題となってしまうのである。
【００９０】
また、元画像を縮小変換する際には、エイリアシング（折り返し歪み）や、低照度ノイズ除去のためのローパスフィルタを、縮小処理の前処理として実装するが必要である。しかし、縮小倍率に応じて、ローパスフィルタの特性が変化する上、特に、垂直方向のローパスフィルタの場合、多タップのデジタルフィルタとした場合に、多くのラインメモリと演算ロジックを必要としなければならず、回路規模増加の問題が生じる。
【００９１】
この実施の形態では、以上の点にかんがみ、ブロックマッチングを用いて２フレーム間の動きベクトルを検出する場合において、ＳＡＤテーブルサイズの大幅な削減が可能である画像処理方法および装置を提供するようにする。
【００９２】
また、前述したブロックマッチングにおける従来の提案手法のうち、特許文献４に記載された画像の縮小変換によるＳＡＤテーブルの削減手法に関して、２つの問題を提起した。画像の縮小変換に伴う処理時間の増大並びにメモリ容量の消費と、画像の縮小変換に伴うエイリアシング回避のための適切なローパスフィルタの実装に伴う回路増大の問題である。以下に説明する実施の形態は、これらの問題点をも解決したものである。
【００９３】
＜実施の形態で用いる新規なブロックマッチング手法の概要＞
この実施の形態においても、上述したブロックマッチングを用いて、２フレーム間の動きベクトルを検出するのであるが、ターゲットブロックと参照ブロック間において求められるＳＡＤ値を、参照ブロックの参照ベクトルに対応して記憶するのではなく、当該参照ベクトルを縮小し、その縮小した参照縮小ベクトルに対応する、当該参照縮小ベクトルの近傍の複数の参照ベクトルに分散加算して記憶するようにする。
【００９４】
これにより、従来のＳＡＤテーブルに比較して、ＳＡＤテーブルのサイズを大幅に縮小するようにするものである。
【００９５】
図２〜図４は、実施の形態で用いる新規なブロックマッチング手法の概要を説明するための図である。図２は、従来のＳＡＤテーブルＴＢＬｏと、実施形態で用いる新規なブロックマッチング手法において生成される縮小ＳＡＤテーブルＴＢＬｓとの関係を示すものである。
【００９６】
この実施形態においても、図４７に示したように、従来と同様に参照フレームにおいて、元フレームに設定されたターゲットブロックの位置を中心としてサーチ範囲が設定される。そして、このサーチ範囲において、前述したような複数の参照ブロックが設定され、各参照ブロック内の画素とターゲットブロック内の対応する画素の輝度値の差分の絶対値の総和、つまり、ＳＡＤ値が求められる。
【００９７】
従来は、求められたＳＡＤ値は、図２に示すように、対象となっている参照ブロックの参照ベクトルＲＶに対応するアドレスのテーブル要素ｔｂｌとしてＳＡＤテーブルＴＢＬｏに書き込まれる。
【００９８】
したがって、従来のブロックマッチングでは、ターゲットブロックと参照ブロックとのフレーム画像上における位置ずれ量を表わす参照ベクトルＲＶと、ＳＡＤテーブルＴＢＬｏの各テーブル要素である参照ブロックのＳＡＤ値とは、１対１に対応している。すなわち、従来のＳＡＤテーブルＴＢＬｏでは、サーチ範囲で取り得る参照ベクトルＲＶと等しい数のＳＡＤ値のテーブル要素数を備えるものとなっている。
【００９９】
これに対して、この実施形態におけるブロックマッチングでは、図２および図３（Ａ）、（Ｂ）に示すように、対象となっている参照ブロックの参照ベクトルＲＶは、縮小率１／ｎ（ｎは自然数）で縮小されて参照縮小ベクトルＣＶとされる。
【０１００】
ここで、以下の説明においては、説明の便宜上、水平方向縮小倍率と垂直方向の縮小倍率とを同じとしているが、水平方向縮小倍率と垂直方向の縮小倍率とは独立の異なる値でも良い。また、後で述べるが、水平方向縮小倍率と垂直方向の縮小倍率とを独立に任意の自然数分の１として設定できるようにしておく方が、柔軟性も高く好都合である。
【０１０１】
この実施形態においても、前述の従来のブロックマッチング手法について説明したのと同様に、サーチ範囲の中心とされるターゲットブロックの位置を基準位置（０，０）とし、参照ベクトルは、当該基準位置からの画素単位の水平方向および垂直方向のずれ量（ｖｘ，ｖｙ）（ｖｘ、ｖｙは、整数）を指し示すものとされ、参照ベクトルＲＶのそれぞれは、参照ベクトル（ｖｘ，ｖｙ）で表される。
【０１０２】
参照ベクトル（ｖｘ，ｖｙ）が、水平方向および垂直方向のそれぞれについて１／ｎに縮小された参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）で示される位置（ｖｘ／ｎ，ｖｙ／ｎ）は、整数ではなく、小数成分が発生することがある。このため、この実施形態では、縮小前の元の参照ベクトルＲＶに対応して求められたＳＡＤ値を、参照縮小ベクトルＣＶに最も近い１つの参照ベクトルに対応するテーブル要素として記憶してしまうと誤差が生じることになる。
【０１０３】
そこで、この実施形態では、まず、参照縮小ベクトルＣＶで示される位置（ｖｘ／ｎ，ｖｙ／ｎ）の近傍の複数の参照ベクトルで示される複数の位置（テーブル要素）を検出する。そして、参照ベクトルＲＶの参照ブロックについて求められたＳＡＤ値は、その検出した近傍の複数の参照ベクトルに対応するＳＡＤ値に分散して加算するようにする。
【０１０４】
この場合に、この実施形態では、参照縮小ベクトルＣＶで示される位置の近傍の周囲の複数個の参照ベクトルで示される位置に対応するテーブル要素ｔｂｌに書き込むべき成分として分散加算する値は、縮小前の元の参照ベクトルＲＶに対応して求められたＳＡＤ値から、参照縮小ベクトルとその近傍の参照ベクトルとのそれぞれが示す位置の関係を用いて、前記近傍の参照ベクトルのそれぞれに対応して分散加算するＳＡＤ値を算出し、算出したＳＡＤ値のそれぞれを、対応する参照ベクトルのテーブル要素成分として加算するようにする。
【０１０５】
ここで、分散するだけでなく加算するというのは、参照縮小ベクトルの近傍の複数の参照ベクトルは、異なる複数の参照縮小ベクトルについて重複して検出されることになるので、１つの参照ベクトルについて、重複したＳＡＤ値は加算するという意味である。
【０１０６】
なお、参照縮小ベクトルＣＶが示す位置（ｖｘ／ｎ，ｖｙ／ｎ）が、参照ベクトルが示す位置に一致する場合、つまり、ｖｘ／ｎおよびｖｙ／ｎの値が整数であるときには、周辺の複数の参照ベクトルを検出する必要はなく、当該位置（ｖｘ／ｎ，ｖｙ／ｎ）を示す参照ベクトルに対応して、縮小前の元の参照ベクトルＲＶに対応して求められたＳＡＤ値を記憶するようにするものである。
【０１０７】
次に、具体例を挙げて、以上の処理を説明する。例えば、ターゲットブロックの位置を基準（０，０）としたときに、図３（Ａ）に示すように、（−３，−５）の位置を示す参照ブロックＲＶを、水平方向および垂直方向に、１／ｎ＝１／４倍に縮小すると、その参照縮小ベクトルＣＶで示される位置は、図３（Ｂ）に示すように、（−０．７５，−１．２５）となる。
【０１０８】
したがって、参照縮小ベクトルＣＶで示される位置は小数成分が発生し、参照ベクトルで示される位置とは一致しない。
【０１０９】
そこで、この場合には、図４に示すように、当該参照縮小ベクトルＣＶが示す位置の近傍位置を示す複数個の近傍参照ベクトルが検出される。図４の例では、１つの参照縮小ベクトルＣＶに対して、４個の近傍参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４が検出される。
【０１１０】
そして、前述したように、この実施形態では、参照ベクトルＲＶの参照ブロックについて求められたＳＡＤ値は、これら４個の近傍参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４に対応するＳＡＤ値として分散加算される。
【０１１１】
この場合に、この実施形態では、４個の近傍参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４のそれぞれに分散加算するＳＡＤ値は、参照縮小ベクトルＣＶで示される位置Ｐ０（図４において×印として示す）と、４個の近傍参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４のそれぞれで示される位置Ｐ１，Ｐ２，Ｐ３，Ｐ４（図４において○印として示す）との位置関係を用いて線形加重分散値として算出する。
【０１１２】
図４の例の場合には、参照縮小ベクトルＣＶで示される位置Ｐ０は、周辺近傍の４個の参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４のそれぞれで示される位置Ｐ１，Ｐ２，Ｐ３，Ｐ４を、水平方向に１：３、垂直方向に３：１に内分する位置にある。
【０１１３】
そこで、縮小前の元の参照ベクトルＲＶに対応して求められたＳＡＤ値をＳαとしたとき、周辺近傍の４個の参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４のそれぞれで示される位置Ｐ１，Ｐ２，Ｐ３，Ｐ４に対応するＳＡＤテーブル要素に分散加算する値ＳＡＤｐ１，ＳＡＤｐ２，ＳＡＤｐ３，ＳＡＤｐ４のそれぞれは、
ＳＡＤｐ１＝Ｓα×９／１６
ＳＡＤｐ２＝Ｓα×３／１６
ＳＡＤｐ３＝Ｓα×３／１６
ＳＡＤｐ４＝Ｓα×１／１６
となる。
【０１１４】
そして、この実施形態では、求められた値ＳＡＤｐ１，ＳＡＤｐ２，ＳＡＤｐ３，ＳＡＤｐ４のそれぞれを、近傍の４個の参照ベクトルＮＶ１，ＮＶ２，ＮＶ３，ＮＶ４のそれぞれで示される位置Ｐ１，Ｐ２，Ｐ３，Ｐ４に対応するＳＡＤテーブル要素にそれぞれ加算する。
【０１１５】
この実施形態では、以上の処理を、サーチ範囲内のすべての参照ブロックについて行なう。
【０１１６】
以上のことから、この実施形態では、参照ベクトルＲＶを１／ｎに縮小する場合には、全ての参照ベクトルに１対１に対応する従来サイズのＳＡＤテーブルＴＢＬｏに対して、水平方向に１／ｎ、また、垂直方向に１／ｎに縮小した縮小ＳＡＤテーブルＴＢＬｓを用意して、この縮小ＳＡＤテーブルＴＢＬｓのテーブル要素として、参照縮小ベクトルＣＶの近傍の参照ベクトルに対応するＳＡＤ値を求めるようにすれば良い（図２参照）。
【０１１７】
したがって、この実施形態の場合には、縮小ＳＡＤテーブルＴＢＬｓのテーブル要素の数は、従来のＳＡＤテーブルＴＢＬｏのテーブル要素数の１／ｎ２となり、テーブルサイズを大幅に小さくすることが可能である。
【０１１８】
なお、上述の実施形態の説明においては、参照縮小ベクトルＣＶの近傍の４個の参照ベクトルを検出し、当該４個の近傍参照ベクトルに対応するＳＡＤテーブル要素に対して、対照の参照ブロック（参照ベクトルＲＶ）について算出したＳＡＤ値を線形加重分散加算するようにしたが、参照縮小ベクトルＣＶの近傍の複数の参照ベクトルの選び方およびその近傍参照ベクトルに対応するＳＡＤテーブル要素に対する分散加算の方法は、上述の例に限られるものではない。
【０１１９】
例えば、参照縮小ベクトルＣＶの近傍の９個もしくは１６個の参照ベクトルを検出し、当該９個もしくは１６個の近傍参照ベクトルに対応するＳＡＤテーブル要素に対して、いわゆるキュービック（Ｃｕｂｉｃ）補間による分散加算を行なうようにすれば、より精度は高くなる。しかし、リアルタイム性と演算回路の削減を重視すると、上述した近傍４個の参照ベクトルに対応するテーブル要素への線形加重分散加算が、より有効である。
【０１２０】
この実施形態においても、参照ブロックをサーチ範囲内で遍く移動させ、全ての参照ブロックのＳＡＤ値に対してＳＡＤテーブル（この実施形態では縮小ＳＡＤテーブル）への代入を行う点は、従来手法と同じである。
【０１２１】
ただし、従来は、参照ベクトルとＳＡＤテーブル要素のアドレスが１対１に対応していたため、ＳＡＤテーブルへは単なる代入で済んだが、この実施形態による手法では、参照ブロックについて算出したＳＡＤ値を分散加算させるため、縮小ＳＡＤテーブルにおいて、参照ベクトルとテーブルアドレスは１対１ではない。したがって、この実施形態の手法の場合には、ＳＡＤ値のテーブルアドレスへの単なる代入ではなく、加算して代入する、いわゆる代入加算である必要がある。また、そのため、ＳＡＤテーブル（縮小ＳＡＤテーブル）の各テーブル要素は、最初に初期化（０クリア）しておかなければならない。
【０１２２】
ところで、従来のブロックマッチング手法では、以上のようにして完成させたＳＡＤテーブルにおいて、ＳＡＤ値が最小値となるテーブル要素を探索し、その最小値となるテーブル要素のテーブルアドレスを、参照ベクトルに変換すれば、動ベクトルの検出を完了した。
【０１２３】
これに対して、この実施形態による手法では、ＳＡＤテーブルは、参照ベクトルを縮小した参照縮小ベクトルに対応した縮小ＳＡＤテーブルであるため、当該縮小ＳＡＤテーブルの最小値がそのまま正確な動きベクトルには対応していない。
【０１２４】
もっとも、ある程度の誤差を許す装置の場合には、縮小ＳＡＤテーブルの最小値となるテーブル要素のテーブルアドレスを、参照ベクトルに変換したものを、さらに縮小率１／ｎの逆数倍、つまりｎ倍することで、動きベクトルを検出するようにすることもできる。
【０１２５】
しかし、より正確な動きベクトルを検出するようにする場合には、以下に説明するように、縮小ＳＡＤテーブルのテーブル要素値に対して補間処理を施すことで、元のベクトル精度で、正確な動きベクトルを検出するようにする。
【０１２６】
＜より正確な動きベクトルを検出するための補間処理の第１の例＞
より正確な動きベクトルを検出するための補間処理の第１の例は、縮小ＳＡＤテーブルにおける複数個のＳＡＤテーブル要素値（ＳＡＤ値）を、１つの２次曲面で近似する手法である。この手法は、前述した特許文献１に記載されている手法を縮小ＳＡＤテーブルに対して適用した手法である。
【０１２７】
すなわち、縮小ＳＡＤテーブルにおいて、ＳＡＤ値が最小値となるテーブル要素（整数精度最小値テーブル要素（整数精度テーブルアドレス））と、この整数精度最小値テーブル要素を中心とする複数の整数精度テーブル要素とを求め、それらのテーブル要素のＳＡＤ値を用いて、最小自乗法によりＳＡＤ値の２次曲面を決定し、この２次曲面の最小値となるＳＡＤ値を検出し、当該検出した最小値となるＳＡＤ値に対応する位置（参照フレーム上において、基準位置に対してずれた位置）を検出し、当該検出した位置を小数精度の最小値テーブルアドレス（縮小ＳＡＤテーブルにおいてＳＡＤ値が最小値となるベクトル（最小値ベクトルという）に対応）とする。
【０１２８】
この場合、一意の２次曲面を定めるためには、図５（Ａ）または（Ｂ）に示すように、整数精度最小値テーブル要素ｔｍと、当該テーブル要素ｔｍをその両側から挟む位置の、当該テーブル要素ｔｍの近傍の４個の整数精度テーブル要素ｔ１，ｔ２，ｔ３，ｔ４が最低限必要である。
【０１２９】
そして、図６に示すように、参照フレームのサーチ範囲内の縮小ＳＡＤテーブルに対応する参照縮小ベクトルの範囲内において、ターゲットフレームの位置を基準位置（０，０）として、水平方向および垂直方向のずれ量（参照縮小ベクトルに対応）の軸ｖｘ／ｎおよび軸ｖｙ／ｎを考えると共に、これらの軸ｖｘ／ｎおよび軸ｖｙ／ｎに垂直な軸として、ＳＡＤ値の軸を考え、これら３軸からなる座標空間を想定する。
【０１３０】
そして、例えば、整数精度最小値テーブル要素ｔｍのＳＡＤ値と、当該整数精度最小値テーブル要素ｔｍを挟む２個のテーブル要素ｔ１、ｔ３のＳＡＤ値とから、図６の座標空間において２次曲線を生成する。また、整数精度最小値テーブル要素ｔｍのＳＡＤ値と、当該最小値テーブル要素ｔｍを挟む他の２個のテーブル要素ｔ２、ｔ４のＳＡＤ値とから、図６の座標空間において、他の２次曲線を生成する。そして、これら２個の２次曲線を含む２次曲面２０１を、最小自乗法により求め、その２次曲面２０１を、図６に示すように、座標空間において生成する。
【０１３１】
そして、生成されたＳＡＤ値の２次曲面２０１の最小値２０２を検出し、その最小値を取るＳＡＤ値に対応する位置（ｖｘ／ｎ，ｖｙ／ｎ）（図６の位置２０３）を検出し、当該検出した位置（ｖｘ／ｎ，ｖｙ／ｎ）を、小数精度のテーブル要素（テーブルアドレス）として検出する。そして、検出した小数精度テーブル要素に対応するベクトル（最小値ベクトル）２０４を、図７に示すようにｎ倍して、元の大きさ精度の動きベクトル２０５を得る。
【０１３２】
例えば、図８に示すように、参照ベクトルを１／４に縮小した場合における縮小ＳＡＤテーブルＴＢＬｓの、小数精度テーブル要素の最小値アドレスから求められる最小値ベクトル２０４が、（−０．７７７，−１．４９２）の場合に、これらを4倍した（−３．１０８，−５．９６８）が、動きベクトル２０５となる。この動きベクトル２０５は、元画像のスケールにおける動きベクトルを再現したものとなっている。
【０１３３】
以上の説明は、整数精度最小値テーブル要素ｔｍと、その近傍の４テーブル要素を用いた場合として説明したが、ＳＡＤ値の２次曲面を最小自乗法により求めるためには、より多くの複数近傍テーブル要素を用いたほうがよい。そこで、一般には、整数精度最小値テーブル要素ｔｍを中心として、その周囲の水平方向×垂直方向＝ｍ×ｍ個（ｍは３以上の整数）の矩形領域のテーブル要素を用いるようにする。
【０１３４】
しかし、この複数近傍テーブル要素の数は、多ければ良いというものではなく、広い範囲のテーブル要素を用いると、演算量の増加を招く上、画像パターンに依存するローカルミニマムの偽値を使用してしまう可能性も高まるので、適切な複数近傍テーブル要素の数からなる矩形領域のテーブル要素を用いるようにする。
【０１３５】
適切な複数近傍テーブル要素の数からなる矩形領域のテーブル要素の例として、この実施形態では、整数精度最小値テーブル要素ｔｍを中心として、その周囲の水平方向×垂直方向＝３×３個の矩形領域のテーブル要素を用いるようにする例と、整数精度最小値テーブル要素ｔｍを中心として、その周囲の水平方向×垂直方向＝３×３個の矩形領域のテーブル要素を用いるようにする例とについて説明する。
【０１３６】
＜３×３個の矩形領域のテーブル要素を用いる例＞
図９に、整数精度最小値テーブル要素ｔｍを中心として、その周囲の水平方向×垂直方向＝３×３個の矩形領域（図９で塗りを付して示してある）のテーブル要素を用いるようにする例を示す。
【０１３７】
この図９の例の場合には、図９（Ａ）に示すように、整数精度最小値テーブル要素ｔｍと、その近傍の８個の近傍テーブル要素のＳＡＤ値を用いて、図９（Ｂ）に示すような２次曲面２０１を、最小自乗法により生成する。そして、生成されたＳＡＤ値の２次曲面２０１の最小値２０２を検出し、その最小値を取るＳＡＤ値に対応する位置（ｖｘ／ｎ，ｖｙ／ｎ）（図９（Ｂ）の位置２０３）を検出し、当該検出した位置２０３を、小数精度の最小値テーブル要素位置（小数精度最小値テーブルアドレス）として検出する。
【０１３８】
そして、検出した小数精度テーブル要素位置２０３に対応するベクトル（最小値ベクトル）２０４を、前述した図７に示すようにｎ倍して、元の大きさ精度の動きベクトル２０５を得る。
【０１３９】
ここで、ＳＡＤ値の２次曲面２０１の最小値２０２に対応する位置２０３の算出方法は、次のようになる。すなわち、図１０に示すように、整数精度最小値テーブル要素ｔｍの位置を原点（０，０）とする（ｘ，ｙ）座標を考える。この場合、周辺の８個のテーブル要素の位置は、３個のｘ軸方向の位置、すなわち、ｘ＝−１、ｘ＝０、ｘ＝１と、３個のＹ軸方向の位置、すなわち、ｙ＝−１、ｙ＝０、ｙ＝１との繰り合わせで表され、（−１，−１）、（０，−１）、（１，−１）、（−１，０）、（０，１）、（−１，１）、（０，１）、（１，１）の８位置となる。
【０１４０】
そして、図１０のテーブルにおける各テーブル要素のＳＡＤ値を、Ｓｘｙとする。したがって、例えば、整数精度最小値テーブル要素ｔｍ（位置（０，０））のＳＡＤ値はＳ００と表され、また、右下の位置（１，１）のテーブル要素値のＳＡＤ値はＳ１１と表される。
【０１４１】
すると、整数精度最小値テーブル要素ｔｍの位置を原点（０，０）とする（ｘ，ｙ）座標における小数精度の位置（ｄｘ、ｄｙ）は、図１１に示す（式Ａ）および（式Ｂ）により、求めることができる。
【０１４２】
図１１の（式Ａ）および（式Ｂ）において、
ｘ＝−１のとき、Ｋｘ＝−１
ｘ＝０のとき、Ｋｘ＝０
ｘ＝０のとき、Ｋｘ＝１
となる。また、
ｙ＝−１のとき、Ｋｙ＝−１
ｙ＝０のとき、Ｋｙ＝０
ｙ＝０のとき、Ｋｙ＝１
となる。
【０１４３】
こうして求められた小数精度の位置（ｄｘ，ｄｙ）は、整数精度最小値テーブル要素ｔｍの位置を原点（０，０）とする位置であるので、この小数精度の位置（ｄｘ，ｄｙ）と整数精度最小値テーブル要素ｔｍの位置とから、求めるサーチ範囲の中心位置からの位置２０３を検出することができる。
【０１４４】
［４×４個の矩形領域のテーブル要素を用いる例］
図１２に、整数精度最小値テーブル要素ｔｍをほぼ中心として、その周囲の水平方向×垂直方向＝４×４個の矩形領域のテーブル要素（図１２で塗りを付して示してある）を用いるようにする例を示す。
【０１４５】
この場合に、整数精度最小値テーブル要素ｔｍと、その近傍の８テーブル要素（３×３）や、その近傍の２４テーブル要素（５×５）のように、前記ｍの値が奇数である場合には、整数精度最小値テーブル要素ｔｍは、常に、使用する矩形領域の複数のテーブル要素の中心になるため、使用するテーブル範囲は単純に決定する。
【０１４６】
これに対して、近傍の１５テーブル要素（４×４）のように、ｍが偶数である場合には、整数精度最小値テーブル要素ｔｍは、使用する矩形領域の複数のテーブル要素の中心位置とはならないので、若干の工夫が必要となる。
【０１４７】
つまり、整数精度最小値テーブル要素ｔｍから見て、水平方向に左右の隣接テーブル要素のＳＡＤ値を比較し、小さい値となった側の方向の、当該方向の隣接テーブル要素に隣接するテーブル要素を近傍テーブル要素の４列目として採用する。同様に、垂直方向に上下の隣接テーブル要素のＳＡＤ値を比較し、小さい値となった側の方向の、当該方向の隣接テーブル要素に隣接するテーブル要素を近傍テーブル要素の４行目として採用する。
【０１４８】
図１２の例では、整数精度最小値テーブル要素ｔｍの水平方向に左右の隣接テーブル要素のＳＡＤ値は、「１７７」と「１７３」であるので、ＳＡＤ値が小さい右隣の値「１７３」のテーブル要素のさらに右隣の列を第４列目として採用する。また、整数精度最小値テーブル要素ｔｍの垂直方向に上下の隣接テーブル要素のＳＡＤ値は、「１６８」と「１８２」であるので、ＳＡＤ値が小さい上隣の値「１６８」のテーブル要素のさらに上隣の行を第４行目として採用する。
【０１４９】
そして、図１２の例の場合には、整数精度最小値テーブル要素ｔｍと、その近傍の１５個の近傍テーブル要素のＳＡＤ値を用いて、２次曲面２０１を、最小自乗法により生成する。そして、生成されたＳＡＤ値の２次曲面２０１の最小値２０２を検出し、その最小値を取るＳＡＤ値に対応する位置（ｖｘ／ｎ，ｖｙ／ｎ）（図１２の位置２０３）を検出し、当該検出した位置２０３を、小数精度の最小値テーブル要素位置（小数精度最小値テーブルアドレス）として検出する。
【０１５０】
そして、検出した小数精度テーブル要素位置２０３に対応するベクトル（最小値ベクトル）２０４を、前述した図７に示すようにｎ倍して、元の大きさ精度の動きベクトル２０５を得る。
【０１５１】
ここで、この例の場合におけるＳＡＤ値の２次曲面２０１の最小値２０２に対応する位置２０３の算出方法は、次のようになる。すなわち、図１３に示すように、整数精度最小値テーブル要素ｔｍの位置を原点（０，０）とする（ｘ，ｙ）座標を考える。
【０１５２】
この例の場合には、１６テーブル要素からなる矩形領域中における整数精度最小値テーブル要素ｔｍの位置に応じて、図１３（Ａ），（Ｂ），（Ｃ），（Ｄ）のような４通りのテーブル要素配置を考える必要がある。
【０１５３】
この場合、周辺の１５個のテーブル要素の位置は、図１３（Ａ），（Ｂ），（Ｃ），（Ｄ）から分かるように、４個のｘ軸方向の位置、すなわち、ｘ＝−１、ｘ＝０、ｘ＝１、ｘ＝２またはｘ＝−２と、４個のＹ軸方向の位置、すなわち、ｙ＝−１、ｙ＝０、ｙ＝１、ｙ＝２またはｙ＝−２との繰り合わせで表される１５位置となる。
【０１５４】
そして、図１３のテーブルにおける各テーブル要素のＳＡＤ値を、Ｓｘｙとする。したがって、例えば、整数精度最小値テーブル要素ｔｍ（位置（０，０））のＳＡＤ値はＳ００と表され、また、位置（１，１）のテーブル要素値のＳＡＤ値はＳ１１と表される。
【０１５５】
すると、整数精度最小値テーブル要素ｔｍおよびその周辺の１６テーブル要素からなる矩形領域中の中心位置を原点（０，０）とする（ｘ，ｙ）座標における小数精度の位置（ｄｘ，ｄｙ）は、図１４に示す（式Ｃ）および（式Ｄ）により、求めることができる。
【０１５６】
ここで、図１４の（式Ｃ）および（式Ｄ）において、ＫｘおよびＫｙは、整数精度最小値テーブル要素ｔｍおよびその周辺の１６テーブル要素からなる矩形領域中の中心位置を原点（０，０）とする（Ｋｘ，Ｋｙ）座標を考えたときの、前記図１３（Ａ），（Ｂ），（Ｃ），（Ｄ）に示した４通りのテーブル要素配置に応じた値となる。このときの（Ｋｘ，Ｋｙ）座標を図１５に示す。
【０１５７】
すなわち、図１３（Ａ）の場合には、
ｘ＝−２のとき、Ｋｘ＝−１．５
ｘ＝−１のとき、Ｋｘ＝−０．５
ｘ＝０のとき、Ｋｘ＝０．５
ｘ＝１のとき、Ｋｘ＝１．５
となる。また、
ｙ＝−２のとき、Ｋｙ＝−１．５
ｙ＝−１のとき、Ｋｙ＝−０．５
ｙ＝０のとき、Ｋｙ＝０．５
ｙ＝１のとき、Ｋｙ＝１．５
となる。
【０１５８】
また、図１３（Ｂ）の場合には、
ｘ＝−２のとき、Ｋｘ＝−１．５
ｘ＝−１のとき、Ｋｘ＝−０．５
ｘ＝０のとき、Ｋｘ＝０．５
ｘ＝１のとき、Ｋｘ＝１．５
となる。また、
ｙ＝−１のとき、Ｋｙ＝−１．５
ｙ＝０のとき、Ｋｙ＝−０．５
ｙ＝１のとき、Ｋｙ＝０．５
ｙ＝２のとき、Ｋｙ＝１．５
となる。
【０１５９】
また、図１３（Ｃ）の場合には、
ｘ＝−１のとき、Ｋｘ＝−１．５
ｘ＝０のとき、Ｋｘ＝−０．５
ｘ＝１のとき、Ｋｘ＝０．５
ｘ＝２のとき、Ｋｘ＝１．５
となる。また、
ｙ＝−２のとき、Ｋｙ＝−１．５
ｙ＝−１のとき、Ｋｙ＝−０．５
ｙ＝０のとき、Ｋｙ＝０．５
ｙ＝１のとき、Ｋｙ＝１．５
となる。
【０１６０】
また、図１３（Ｄ）の場合には、
ｘ＝−１のとき、Ｋｘ＝−１．５
ｘ＝０のとき、Ｋｘ＝−０．５
ｘ＝１のとき、Ｋｘ＝０．５
ｘ＝２のとき、Ｋｘ＝１．５
となる。また、
ｙ＝−１のとき、Ｋｙ＝−１．５
ｙ＝０のとき、Ｋｙ＝−０．５
ｙ＝１のとき、Ｋｙ＝０．５
ｙ＝２のとき、Ｋｙ＝１．５
となる。
【０１６１】
また、図１４の（式Ｃ）および（式Ｄ）におけるΔｘおよびΔｙは、（Ｋｘ，Ｋｙ）座標に対する図１３（Ａ），（Ｂ），（Ｃ），（Ｄ）の各テーブル要素配置における（ｘ，ｙ）座標とのずれ量を表しており、
図１３（Ａ）の場合には、Δｘ＝−０．５、Δｙ＝−０．５、
図１３（Ｂ）の場合には、Δｘ＝−０．５、Δｙ＝０．５、
図１３（Ｃ）の場合には、Δｘ＝０．５、Δｙ＝−０．５、
図１３（Ｄ）の場合には、Δｘ＝０．５、Δｙ＝０．５、
となる。
【０１６２】
こうして求められた小数精度の位置（ｄｘ，ｄｙ）は、整数精度最小値テーブル要素ｔｍの位置を原点（０，０）とする位置であるので、この小数精度の位置（ｄｘ，ｄｙ）と整数精度最小値テーブル要素ｔｍの位置とから、求めるサーチ範囲の中心位置からの位置２０３を検出することができる。
【０１６３】
＜より正確な動きベクトルを検出するための補間処理の第２の例＞
より正確な動きベクトルを検出するための補間処理の第２の例は、縮小ＳＡＤテーブルにおける整数精度最小値テーブル要素を含む複数個の水平方向のテーブル要素のＳＡＤ値を用いて水平方向の３次曲線を生成すると共に、整数精度最小値テーブル要素を含む複数個の垂直方向のテーブル要素のＳＡＤ値を用いて垂直方向の３次曲線を生成し、それぞれの３次曲線の極小値となる位置（ｖｘ，ｖｙ）を検出して、検出した位置を小数精度の最小値アドレスとするものである。
【０１６４】
図１６は、この第２の例を説明するための図である。前述の第１の例と同様にして、整数精度最小値テーブル要素ｔｍと、この整数精度最小値テーブル要素を中心とする複数の整数精度テーブル要素、図１６の例では、４×４＝１６個のテーブル要素を求める（図１６（Ａ）で塗りを付した部分参照）。
【０１６５】
次に、第１の例と同様にして、図１６（Ｂ）に示すように、参照フレームのサーチ範囲内の縮小ＳＡＤテーブルに対応する参照縮小ベクトルの範囲内において、ターゲットフレームの位置を基準位置（０，０）として、水平方向および垂直方向のずれ量（参照縮小ベクトルに対応）の軸ｖｘ／ｎおよび軸ｖｙ／ｎを考えると共に、これらの軸ｖｘ／ｎおよび軸ｖｙ／ｎに垂直な軸として、ＳＡＤ値の軸を考え、これら３軸からなる座標空間を想定する。
【０１６６】
次に、整数精度最小値テーブル要素ｔｍの周囲の１６個のテーブル要素のうち、整数精度最小値テーブル要素ｔｍを含む４個の水平方向のテーブル要素のＳＡＤ値を用いて、前記座標空間に水平方向の３次曲線２０６を生成する。この水平方向の３次曲線２０６の極小値に対応する水平方向の位置ｖｘ／ｎとして、小数精度最小値テーブル要素位置の水平方向位置を検出する。
【０１６７】
次に、整数精度最小値テーブル要素ｔｍの周囲の１６個のテーブル要素のうち、整数精度最小値テーブル要素ｔｍを含む４個の垂直方向のテーブル要素のＳＡＤ値を用いて、前記座標空間に垂直方向の３次曲線２０７を生成する。この垂直方向の３次曲線２０７の極小値に対応する垂直方向の位置ｖｙ／ｎとして、小数精度最小値テーブル要素位置の垂直方向位置を検出する。
【０１６８】
以上により求めた小数精度最小値テーブル要素位置の水平方向の位置と、垂直方向の位置から、小数精度最小値テーブル要素位置（小数精度最小値テーブルアドレス）２０８を検出する。そして、当該検出した小数精度テーブル要素位置２０８に対応するベクトル（最小値ベクトル）２０９を、前述した図７に示すようにｎ倍して、元の大きさ精度の動きベクトルを得る。
【０１６９】
すなわち、第２の例は、第１の例で説明した方法により、水平方向、垂直方向のそれぞれの４個のテーブル要素を確定し、図１６（Ｂ）に示すように、水平方向、垂直方向のそれぞれで、３次曲線を一意に定める手法である。
【０１７０】
ここで、ＳＡＤ値の３次曲線２０６および２０９の最小値２０２に対応する位置２０８の算出方法は、次のようになる。すなわち、水平方向または垂直方向のいずれかの方向における３次曲線において、最小値の近傍の４点のＳＡＤ値を、前記水平方向または垂直方向のいずれかの方向に沿った順番に、Ｓ０、Ｓ１、Ｓ２、Ｓ３としたとき、小数精度の最小値が、図１７に示す３つの区間Ｒａ，Ｒｂ，Ｒｃのいずれにあるかにより、最小値を取る小数成分ｕを算出する式が異なる。
【０１７１】
ここで、区間ＲａはＳＡＤ値Ｓ０となる位置とＳＡＤ値Ｓ１となる位置との間の区間、ＲｂはＳＡＤ値Ｓ１となる位置とＳＡＤ値Ｓ２となる位置との間の区間、ＲｃはＳＡＤ値Ｓ２となる位置とＳＡＤ値Ｓ３となる位置との間の区間である。
【０１７２】
そして、小数精度の最小値が、図１７に示す区間Ｒａにあるときには、図１８の（式Ｅ）により、整数精度の最小値の位置に対する最小値を取る位置までのずれの小数成分ｕが算出される。
【０１７３】
また、同様に、小数精度の最小値が、図１７に示す区間Ｒｂにあるときには、図１８の（式Ｆ）により、整数精度の最小値の位置に対する最小値を取る位置までのずれの小数成分ｕが算出される。
【０１７４】
さらに、小数精度の最小値が、図１７に示す区間Ｒｃにあるときには、図１８の（式Ｇ）により、整数精度の最小値の位置に対する最小値を取る位置までのずれの小数成分ｕが算出される。
【０１７５】
そして、小数精度の最小値が、図１７に示す３つの区間Ｒａ，Ｒｂ，Ｒｃのいずれにあるかの判別は、次のようにして行なう。
【０１７６】
すなわち、図１９は、その判別を説明するための図である。図１９（Ａ），（Ｂ），（Ｃ）に示すように、先ず、整数精度のＳＡＤ値の最小値Ｓｍｉｎと、２番目に小さい整数精度のＳＡＤ値Ｓｎ２とを検出し、小数精度の最小値は、検出された整数精度のＳＡＤ値の最小値Ｓｍｉｎの位置と、２番目に小さい整数精度のＳＡＤ値Ｓｎ２の位置との間の区間に存在するとして検出する。次に、整数精度のＳＡＤ値の最小値Ｓｍｉｎと、２番目に小さい整数精度のＳＡＤ値Ｓｎ２とが、図１９に示したＳＡＤ値Ｓ０、Ｓ１、Ｓ２、Ｓ３のいずれの位置となっているかにより、検出した区間が区間Ｒａ，Ｒｂ，Ｒｃのいずれであるかの判別を行なう。
【０１７７】
なお、図１９（Ｄ）に示すように、整数精度のＳＡＤ値の最小値ＳｍｉｎがＳＡＤ値のまたは位置にあって、４個のテーブル要素値の端に位置する場合には、最小位置が推定できないとして、この実施形態では、エラーとして扱い、最小値位置の算出は行なわないようにする。もっとも、この図１９（Ｄ）のような場合においても、最小値位置を算出するようにしてもよい。
【０１７８】
以上のようにして、この実施形態によれば、１／ｎ２にスケールダウンした小さいサイズの縮小ＳＡＤテーブルを用いて、元の画像スケールにおける動きベクトルを検出することができる。この場合に、１／ｎ２にスケールダウンした小さいサイズの縮小ＳＡＤテーブルを用いているにも関わらず、従来とほぼ同様のベクトル検出結果が得られることを図２０に示す。
【０１７９】
図２０の横軸は、水平方向または垂直方向の一方についての１次元方向の縮小倍率ｎであり、また、縦軸は、検出される動きベクトルについての誤差（ベクトル誤差）を示している。図２０のベクトル誤差の数値は画素数で表されている。
【０１８０】
図２０において、曲線３０１は、縮小倍率に対するベクトル誤差の平均値である。また、曲線３０２は、縮小倍率に対するベクトル誤差の分散σの３倍値（３σ（９９．７％））を示している。曲線３０３は、曲線３０２の近似曲線を示している。
【０１８１】
図２０は、１次元方向の縮小倍率ｎに対するベクトル誤差を示しているが、ＳＡＤテーブルは２次元のため、図２０に示されるものの２乗の割合でテーブルサイズ（テーブル要素数）が削減されるのに対し、ベクトル誤差は、線形程度にしか増加しないことから、この実施形態による手法の有用性が分かる。
【０１８２】
また、ｎ＝６４（縮小率１／６４）倍の縮小倍率でも、ベクトル誤差は小さく、全く異なる動きベクトルを検出出力とするような破綻は見られないことから、実質、１／４０９６に、ＳＡＤテーブルのサイズを削減可能であると言える。
【０１８３】
また、前述したように、動画の手ぶれ補正においては、リアルタイム性とシステム遅延の削減が強く求められるのに対し、精度については、破綻した全く異なる動きベクトルが検出される場合を除き、ある程度のベクトル検出誤差に対して寛容である。したがって、破綻しないままＳＡＤテーブルのサイズを大きく削減することができる、この実施形態は有用性が高いと言える。
【０１８４】
なお、実際の手ぶれ補正システムでは、参照フレーム１０２を複数の領域に分割し、それぞれの分割領域において動きベクトル２０５を検出するようにする。これは、フレーム内には動く被写体が含まれる可能性も高いため、例えば、図２１のように参照フレーム１０２の１フレーム内において１６個の動きベクトル２０５を検出し、過去のフレームにおけるそれらの動きベクトル２０５からの推移も加味しながら統計的に処理することで、１フレームについて１つのグローバルベクトル、即ち、フレームの手ぶれベクトルを確定するようにするためである。
【０１８５】
この場合、図２１に示すように、検出したい１６個の動きベクトル２０５の基準位置ＰＯ１〜ＰＯ16のそれぞれを中心とするサーチ範囲ＳＲ１，ＳＲ２，・・・，ＳＲ16を定め、各サーチ範囲において、ターゲットブロックの射影イメージブロックＩＢ１，ＩＢ２，・・・，ＩＢ16を想定する。
【０１８６】
そして、この射影イメージブロックＩＢ１，ＩＢ２，・・・，ＩＢ16と同じ大きさの参照ブロックを設定し、各サーチ範囲ＳＲ１，ＳＲ２，・・・，ＳＲ16内を、設定した参照ブロックを移動させて、上述と同様にして、縮小ＳＡＤテーブルを生成し、各サーチ範囲ＳＲ１，ＳＲ２，・・・，ＳＲ16における動きベクトル２０５を検出するようにする。
【０１８７】
そして、参照フレームにおいて取得した複数個のターゲットブロックについて得られた複数個の動きベクトルを用いて、過去のフレームにおけるそれらの動きベクトルからの推移も加味しながら統計的に処理することで、１フレームについて１つのグローバルベクトル、即ち、フレームの手ぶれベクトルを確定するようにする。
【０１８８】
以上説明した実施形態の画像処理方法は、従来手法として説明した特許文献４に記載された画像を縮小変換したサイズで動きベクトルを検出する手法に比べて、次に挙げる２つの点において、大きく異なるメリットを有するものである。
【０１８９】
まず、第一に、この実施形態による手法は、特許文献４に記載された従来手法と異なり、画像を縮小変換するプロセスを全く必要としない。この実施形態による手法においては、参照ブロックについて算出したＳＡＤ値を、ＳＡＤテーブル（縮小ＳＡＤテーブル）に代入加算する際に、同時に縮小倍率に相当するアドレス変換を行なうからである。
【０１９０】
これにより、この実施形態による手法においては、特許文献４に記載された従来手法のような画像の縮小変換のためのロジックも、縮小した画像をメモリに格納する時間およびバンド幅の浪費も、縮小画像をメモリに貼る領域確保も必要ない、というメリットを有する。
【０１９１】
特許文献４に記載された従来手法のもう１つ重要な問題点として、前述も使用にしたように、画像を縮小変換する際のエイリアシング（折り返し歪み）や、低照度ノイズ除去のためのローパスフィルタの存在の問題がある。すなわち、画像縮小する際には、適切なローパスフィルタを通してからリサンプリングを行なわなければならず、さもないと、不要なエイリアシングが発生し、その縮小画像を用いた動きベクトルの精度が著しく損なわれるからである。
【０１９２】
縮小変換の際の理想的なローパスフィルタの特性としては、ｓｉｎｃ関数に類似した関数であることが、理論的に証明されている。ｓｉｎｃ関数自体は、ｓｉｎ（ｘπ）／（ｘπ）の形で表されるカットオフ周波数ｆ／2の無限タップのＦＩＲ（Ｆｉｎｉｔｅ  Ｉｍｐｕｌｓｅ  Ｒｅｓｐｏｎｓｅ）フィルタであるが、縮小倍率１／nのときの理想的なカットオフ周波数ｆ／（２ｎ）のローパスフィルタとしては、ｓｉｎ（ｘπ/ｎ）／（ｘπ/ｎ）と表される。しかし、これもｓｉｎｃ関数の一形態として良い。
【０１９３】
図２２〜図２４の上側には、それぞれ縮小倍率が１／２倍、１／４倍、１／８倍のときのｓｉｎｃ関数（ローパスフィルタの理想特性）の形状を示す。この図２２〜図２４から、縮小倍率が大きくなればなる程、関数がタップ軸方向に拡大して行くことが分かる。つまり、無限タップのｓｉｎｃ関数を主要な係数のみで近似する場合にも、ＦＩＲフィルタのタップ数を増加させなければならないと言える。
【０１９４】
また、一般的に、より低い帯域のカットオフ周波数を実現するフィルタは、フィルタ形状よりもタップ数が、その性能に対して支配的になって行くことが知られている。
【０１９５】
したがって、特許文献４に記載の従来手法の縮小画像を用いる動きベクトル演算手法の場合、画像の縮小倍率が大きくなればなる程、そのＳＡＤテーブル削減効果が大きいにも関わらず、画像生成する際の前処理用フィルタとしてのローパスフィルタは、縮小倍率が大きくなればなる程、コストが増加してしまう、という矛盾を併せ持つのである。
【０１９６】
一般に、高次タップのＦＩＲフィルタを実現する場合、演算ロジックのコストがタップ数の２乗に比例して増加するため、問題となるが、より大きい問題は、垂直フィルタ実現のためのラインメモリ数の増加である。近年のデジタルスチルカメラにおいては、画素数向上に伴うラインメモリのサイズ削減のため、いわゆる短冊処理を行なっているが、例え、１ライン当たりのサイズを削減したとしても、ラインメモリそのものの本数が増加することは、物理レイアウトエリアで換算されるトータルコストを著しく押し上げる。
【０１９７】
以上、述べたように、特許文献４に記載の従来手法の画像縮小によるアプローチは、特に垂直ローパスフィルタの実現において、大きな壁が立ちはだかっていることが分かる。それに対し、この発明の手法は、全く異なる形で簡潔にこの問題を解決している。
【０１９８】
図２２〜図２４の下側に、この実施の形態で用いる新規なブロックマッチング手法におけるローパスフィルタのイメージを示す。この実施の形態で用いる新規なブロックマッチング手法においては、画像縮小処理を伴っていないが、縮小ＳＡＤテーブルの生成演算過程におけるローパスフィルタのイメージを図示したものである。
【０１９９】
図２２〜図２４の下側に示されるように、このローパスフィルタの特性は、ｓｉｎｃ関数の主要係数部分を線形で近似した、シンプルなフィルタ特性ではあるものの、縮小倍率に連動してタップ数が増加していることが分かる。これは、先に述べた、カットオフ周波数が低くなる程、ローパスフィルタの性能はタップ数が支配的になる、という事実に好適である。つまり、実施形態の線形加重分散加算を行なう処理のような、この発明におけるＳＡＤ値の分散加算を行なう処理そのものが、倍率連動の高性能ローパスフィルタを、シンプルな回路で実現していることと等価なのである。
【０２００】
このローパスフィルタに絡んで、他にもメリットがある。特許文献４記載の従来手法では、ローパスフィルタをかけた後、リサンプリングすることで画像を縮小するが、この時点で相当数の画像情報が失われる。つまり、ローパスフィルタの演算において、画像情報の輝度値の語長は大幅に丸められてメモリに格納され、殆どの画素情報の下位ビットは、縮小後の画像に影響を与えないのである。
【０２０１】
一方、この実施の形態で用いる新規なブロックマッチング手法においては、全ての画素の輝度値の全ビット情報を、遍く平等に使用してＳＡＤ値を演算し、その分散加算値を求めて縮小ＳＡＤテーブルに加算する。縮小ＳＡＤテーブルの各テーブル要素値の語長さえ増やせば、最終的なＳＡＤ値の出力まで、一切の丸め誤差を含まない形で演算可能である。縮小ＳＡＤテーブルの面積はフレームメモリに比較して小さいため、縮小ＳＡＤテーブルの語長拡張は大きな問題にならない。その結果として、縮小ＳＡＤテーブル並びに動きベクトル検出を、高精度に実現できるのである。
【０２０２】
＜動きベクトル検出部１５における処理動作＞
＜第１の例＞
この動きベクトル検出部１５における処理動作の第１の例の流れを、図２５および図２６のフローチャートを参照して、以下に説明する。
【０２０３】
先ず、前述の図４７あるいは図２１に示したようなサーチ範囲１０５あるいはサーチ範囲ＳＲ１〜ＳＲ１６のそれぞれ内の１つの参照ブロックＩｉに対応する参照ベクトル（ｖｘ、ｖｙ）を指定する（ステップＳ１０１）。前述したように、（ｖｘ，ｖｙ）は、ターゲットブロックのフレーム上の位置（サーチ範囲の中心位置である）を基準位置（０，０）としたときに、指定された参照ベクトルにより示される位置を示し、ｖｘは指定された参照ベクトルによる、基準位置からの水平方向のずれ量成分であり、また、ｖｙは指定された参照ベクトルによる、基準位置からの垂直方向成分のずれ量成分である。そして、前述の従来例で述べたのと同様に、ずれ量ｖｘ、ｖｙは、画素を単位とした値とされている。
【０２０４】
ここで、サーチ範囲の中心位置を前記基準位置（０，０）とし、サーチ範囲を、水平方向には±Ｒｘ、垂直方向には±Ｒｙとしたとき、
−Ｒｘ≦ｖｘ≦＋Ｒｘ、−Ｒｙ≦ｖｙ≦＋Ｒｙ
とされるものである。
【０２０５】
次に、ターゲットブロックＩｏ内の１つの画素の座標（ｘ，ｙ）を指定する（ステップＳ１０２）。次に、ターゲットブロックＩｏ内の指定された１つの座標（ｘ，ｙ）の画素値Ｉｏ（ｘ，ｙ）と、参照ブロックＩｉ内の対応する画素位置の画素値Ｉｉ（ｘ＋ｖｘ，ｙ＋ｖｙ）との差分絶対値αを、前述した（式１）に示したようにして算出する（ステップＳ１０３）。  
そして、算出した差分絶対値αを、当該参照ブロックＩｉの参照ベクトル（ｖｘ，ｖｙ）が指し示すアドレス（テーブル要素）の、それまでのＳＡＤ値に加算し、その加算であるＳＡＤ値を、当該アドレスに書き戻すようにする（ステップＳ１０４）。すなわち、参照ベクトル（ｖｘ，ｖｙ）に対応するＳＡＤ値を、ＳＡＤ（ｖｘ，ｖｙ）と表したとき、これを、前述した（式２）、すなわち、
ＳＡＤ（ｖｘ，ｖｙ）＝Σα＝Σ｜Ｉｏ（ｘ，ｙ）−Ｉｉ（ｘ＋ｖｘ，ｙ＋ｖｙ）｜
・・・（式２）
として算出し、当該参照ベクトル（ｖｘ，ｖｙ）が指し示すアドレスに書き込むようにする。
【０２０６】
次に、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素について、上記のステップＳ１０２〜ステップＳ１０４の演算を行なったか否かを判別し（ステップＳ１０５）、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素については、未だ、その演算は終了していないと判別したときには、ステップＳ１０２に戻り、ターゲットブロックＩｏ内の次の座標（ｘ，ｙ）の画素位置を指定し、このステップＳ１０２以降の処理を繰り返す。
【０２０７】
以上のステップＳ１０１〜ステップＳ１０５までの処理は、図４９に示したフローチャートのステップＳ１〜ステップＳ５と全く同様である。
【０２０８】
この実施形態では、ステップＳ１０５で、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素について、上記の演算を行なったと判別したときには、縮小倍率を１／ｎとして、参照ベクトル（ｖｘ，ｖｙ）を１／ｎに縮小した参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）を算出する（ステップＳ１０６）。
【０２０９】
次いで、参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）の近傍の複数の参照ベクトル、この例では、上述したように４個の近傍参照ベクトルを検知する（ステップＳ１０７）。そして、検知した４個の近傍参照ベクトルのそれぞれに対応するテーブル要素として分散加算すべき値を、前述したように、参照縮小ベクトルと近傍参照ベクトルとがそれぞれ示す位置の関係に基いて、ステップＳ１０４で求めたＳＡＤ値から、線形加重分散値として求める（ステップＳ１０８）。そして、求めた４個の線形加重分散値を、近傍参照ベクトルのそれぞれに対応するＳＡＤテーブル要素値に加算する（ステップＳ１０９）。
【０２１０】
このステップＳ１０９が終了すると、注目中の参照ブロックについてのＳＡＤ値の算出が終了したと判別して、サーチ範囲内の全ての参照ブロック、すなわち、全ての参照ベクトル（ｖｘ，ｖｙ）についての上記のステップＳ１０１からステップＳ１０９までの演算処理を完了したか否か判別する（図２６のステップＳ１１１）。
【０２１１】
ステップＳ１１１で、未だ、上記の演算処理を完了していない参照ベクトル（ｖｘ，ｖｙ）があると判別すると、ステップＳ１０１に戻り、上記の演算処理を完了していない次の参照ベクトル（ｖｘ，ｖｙ）を設定して、このステップＳ１０１以降の処理を繰り返す。
【０２１２】
そして、ステップＳ１１１で、上記の演算処理を完了していない参照ベクトル（ｖｘ，ｖｙ）はサーチ範囲内になくなったと判別すると、縮小ＳＡＤテーブルが完成したとして、当該完成した縮小ＳＡＤテーブルにおいて、最小値となっているＳＡＤ値を検出する（ステップＳ１１２）。
【０２１３】
次に、当該最小値となっているテーブル要素アドレス（ｍｘ，ｍｙ）のＳＡＤ値（最小値）と、その近傍の複数個、この例では、上述したように１５個の近傍テーブル要素のＳＡＤ値を用いて２次曲面を生成し（ステップＳ１１３）、その２次曲面の最小値のＳＡＤ値が対応する小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する（ステップＳ１１４）。この最小値ベクトル（ｐｘ，ｐｙ）は、小数精度の最小テーブル要素アドレスに対応している。
【０２１４】
そして、算出した小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）をｎ倍することにより、求めるべく動きベクトル（ｐｘ×ｎ，ｐｙ×ｎ）を算出する（ステップＳ１１５）。
【０２１５】
以上で、１つのターゲットブロックに対する、この実施形態におけるブロックマッチングによる動きベクトルの検出処理は、終了となる。図２１に示したような、１フレームについて分割した領域において、複数個の動きベクトルを検出する場合には、サーチ範囲および縮小倍率１／ｎを再設定して、上述の図２５および図２６に示した処理を、各分割領域のターゲットブロックについて繰り返すものである。
【０２１６】
なお、小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する方法としては、前述した水平方向および垂直方向の３次曲線を用いる方法を用いても良いことは言うまでもない。
【０２１７】
＜第２の例＞
上述の第１の例においては、１つの参照ブロック（参照ベクトル）について、そのＳＡＤ値を求めた後、そのＳＡＤ値から、参照縮小ベクトルの近傍の複数参照ベクトルについての分散加算値を求め、分散加算処理を行なうようにした。
【０２１８】
これに対して、この第２の例においては、参照ブロック内の各画素の、ターゲットブロックの画素との差分を検出したときに、その差分値から、参照縮小ベクトルの近傍の複数参照ベクトルについての分散加算値（ＳＡＤ値ではなく差分値）を求め、求めた差分値を分散加算処理するようにする。この第２の例によれば、１つの参照ブロック内のすべての画素についての差分演算を終了したときには、縮小ＳＡＤテーブルが生成されることになる。
【０２１９】
図２７および図２８は、この第２の例による動きベクトル検出処理のフローチャートを示すものである。
【０２２０】
図２７のステップＳ１２１〜ステップＳ１２３までの処理は、図２５のステップＳ１０１〜ステップＳ１０３までの処理と全く同様であるので、ここでは、その詳細な説明は省略する。
【０２２１】
この第２の例においては、ステップＳ１２３で、座標（ｘ，ｙ）の画素についての参照ブロックとターゲットブロック間での差分値αが算出すると、次には、縮小倍率を１／ｎとして、参照ベクトル（ｖｘ，ｖｙ）を１／ｎに縮小した参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）を算出する（ステップＳ１２４）。
【０２２２】
次に、参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）の近傍の複数の参照ベクトル、この例では、上述したように４個の近傍参照ベクトルを検知する（ステップＳ１２５）。そして、検知した４個の近傍参照ベクトルのそれぞれに対応するテーブル要素として分散加算すべき差分値を、前述したように、ステップＳ１２３で求めた差分値αから、参照縮小ベクトルと近傍参照ベクトルとがそれぞれ示す位置の関係に基いて、線形加重分散値（差分値）として求める（ステップＳ１２６）。
【０２２３】
そして、求めた４個の線形加重分散値を、近傍参照ベクトルのそれぞれに対応するテーブル要素値に加算する（ステップＳ１２７）。
【０２２４】
このステップＳ１２７が終了したら、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素について、上記のステップＳ１２２〜ステップＳ１２７の演算を行なったか否かを判別し（ステップＳ１２８）、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素については、未だ、その演算は終了していないと判別したときには、ステップＳ１２２に戻り、ターゲットブロックＩｏ内の次の座標（ｘ，ｙ）の画素位置を指定し、このステップＳ１２２以降の処理を繰り返す。
【０２２５】
ステップＳ１２８で、ターゲットブロックＩｏ内の全ての座標（ｘ，ｙ）の画素について、上記の演算を行なったと判別したときには、注目中の参照ブロックについてのＳＡＤ値の算出が終了したと判別して、サーチ範囲内の全ての参照ブロック、すなわち、全ての参照ベクトル（ｖｘ，ｖｙ）についての上記のステップＳ１２１からステップＳ１２８までの演算処理を完了したか否か判別する（図２８のステップＳ１３１）。
【０２２６】
ステップＳ１３１で、未だ、上記の演算処理を完了していない参照ベクトル（ｖｘ，ｖｙ）があると判別すると、ステップＳ１２１に戻り、上記の演算処理を完了していない次の参照ベクトル（ｖｘ，ｖｙ）を設定して、このステップＳ１２１以降の処理を繰り返す。
【０２２７】
そして、ステップＳ１２１で、上記の演算処理を完了していない参照ベクトル（ｖｘ，ｖｙ）はサーチ範囲内になくなったと判別すると、縮小ＳＡＤテーブルが完成したとして、当該完成した縮小ＳＡＤテーブルにおいて、最小値となっているＳＡＤ値を検出する（ステップＳ１３２）。
【０２２８】
次に、当該最小値となっているテーブル要素アドレス（ｍｘ，ｍｙ）のＳＡＤ値（最小値）と、その近傍の複数個、この例では、上述したように１５個の近傍テーブル要素のＳＡＤ値を用いて２次曲面を生成し（ステップＳ１３３）、その２次曲面の最小値のＳＡＤ値が対応する小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する（ステップＳ１３４）。この最小値ベクトル（ｐｘ，ｐｙ）は、小数精度の最小テーブル要素アドレスに対応している。
【０２２９】
そして、算出した小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）をｎ倍することにより、求めるべく動きベクトル（ｐｘ×ｎ，ｐｙ×ｎ）を算出する（ステップＳ１３５）。
【０２３０】
以上で、１つのターゲットブロックに対する、この第２の例におけるブロックマッチングによる動きベクトルの検出処理は、終了となる。図２１に示したような、１フレームについて分割した領域において、複数個の動きベクトルを検出する場合には、サーチ範囲および縮小倍率１／ｎを再設定して、上述の図２７および図２８に示した処理を、各分割領域について繰り返すものである。
【０２３１】
なお、この第２の例においても、小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する方法としては、前述した水平方向および垂直方向の３次曲線を用いる方法を用いても良いことは言うまでもない。
【０２３２】
＜第３の例＞
図２０に示したように、この実施形態による動きベクトルの検出手法を用いた場合には、参照ベクトルの縮小倍率が１／６４の場合でも、全く異なる動きベクトルを出力するような破綻は見られないことから、実質的に１／４０９６に、ＳＡＤテーブルを削減可能である。
【０２３３】
つまり、１／４０９６に削減した縮小ＳＡＤテーブルを用意しておき、例えば１回目の縮小倍率１／ｎａ＝１／６４で１回目の動きベクトルを検出する。次に、１回目で検出したその動きベクトルを中心にしてサーチ範囲を狭め、２回目の検出を、１回目の縮小倍率１／ｎａよりも小さい２回目の縮小倍率１／ｎｂ、例えば１／ｎｂ＝１／８で行なうようにすればよい。すなわち、１回目と２回目とで縮小倍率を変えて、１回目のベクトル誤差範囲内に収まるように、２回目の縮小倍率を設定すれば、かなりの高精度で、動きベクトル検出が可能である。
【０２３４】
この第３の例の場合における動きベクトル検出処理を、図２９〜図３２のフローチャートを参照しながら説明する。
【０２３５】
この図２９〜図３２に示す第３の例は、基本的な動き検出処理として上述した第１の例を用いている。したがって、図２９のステップＳ１４１〜ステップＳ１４９の処理ステップおよび図３０のステップＳ１５１〜ステップＳ１５５までの処理ステップは、図２５のステップＳ１０１〜ステップＳ１０９の処理ステップおよび図２６のステップＳ１１１〜ステップＳ１１５までの処理ステップと全く同様である。
【０２３６】
この第３の例においては、図３０のステップＳ１５５で動きベクトルを算出したら、そこで処理を終了するのではなく、当該ステップＳ１５５で算出した動きベクトルは、１回目の動きベクトルとして、次のステップＳ１５６において、この１回目で算出した動きベクトルに基づき、同じ参照フレーム内で、サーチ範囲を絞り、また、参照ベクトルの縮小倍率を、１回目の縮小倍率１／ｎａよりも小さい縮小倍率１／ｎｂに変更する。
【０２３７】
すなわち、１回目の処理で、動きベクトルが算出されると、その算出された動きベクトルから、参照フレームと元フレームとの間で、相関のあるブロック範囲がおおよそ検出できる。そこで、その相関のあるブロック範囲を中心とした、絞ったサーチ範囲を設定することができる。そして、１回目よりも縮小倍率を小さくすることで、より誤差の少ない状態で、２回目の動きベクトルの算出が可能になると期待できる。
【０２３８】
こうして、ステップＳ１５６で、絞ったサーチ範囲を設定し、新たな縮小倍率を設定したら、１回目と全く同様にして、２回目の動きベクトルの検出処理を、ステップＳ１５７〜ステップＳ１５８、図３１のステップＳ１６１〜ステップＳ１６８、さらに、図３２のステップＳ１７１〜ステップＳ１７４により実行する。これらのステップの処理は、図２５のステップＳ１０１〜ステップＳ１０９の処理ステップおよび図２６のステップＳ１１１〜ステップＳ１１５までの処理ステップと全く同様である。
【０２３９】
こうして、最終的に、ステップＳ１７４において、２回目の動きベクトルとして、目的とする動きベクトルが得られる。
【０２４０】
以上の例は、動きベクトルの検出方法として、前述した第１の例を用い、それを２段階、繰り返した場合であるが、サーチ範囲をさらに絞り、かつ、必要に応じて縮小倍率を変更しながら、２段階以上、繰り返すようにしても、勿論良い。
【０２４１】
また、動きベクトルの検出方法としては、前述した第１の例の代わりに、前述した第２の例を用いることができることは言うまでもない。また、小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する方法としては、前述した水平方向および垂直方向の３次曲線を用いる方法を用いても良いことは前述の例と同様である。
【０２４２】
［この発明による撮像画像の歪み補正装置の第２の実施形態］
上述した撮像画像の歪み補正装置の第１の実施形態が適用された撮像装置における動きベクトル検出部１５においては、図１に示したように、画像メモリ部４は、２枚の画像、つまり元フレームの画像と、参照フレームの画像とが、両方共、フレームメモリ４１，４２に格納されていることを前提にしていた。このため、動きベクトルの検出タイミングは、１フレーム分遅延されることとなる。
【０２４３】
これに対して、この第２の実施形態では、撮像素子１１からの垂れ流し画像データを参照フレームとする構成として、ラスタースキャンのストリームデータに対して、リアルタイムでＳＡＤ値を演算することができるようにしている。
【０２４４】
図３３に、この第２の実施形態の場合における撮像装置の構成例のブロック図を示す。この図３３から分かるように、撮像信号処理系１０の構成ブロックおよびその他の構成ブロックは、図１に示した第１の実施形態と全く同様であるが、この第２の実施形態においては、図３３に示すように、画像メモリ部４は１個のフレームメモリ４３からなる。
【０２４５】
この第２の実施形態では、元フレームがフレームメモリ４３に格納されており、参照フレームは、データ変換部１４からストリームで動きベクトル検出部１５に入力されるものとされる。動きベクトル検出部１５は、第１の実施形態では、２個のフレームメモリ４１，４２に格納された２枚の画像データを用いて、参照ブロックについてのＳＡＤ値を求める処理をするようにした。これに対して、この第２の実施形態では、図３３に示すように、データ変換部１４からのストリーム画像データを参照フレームの画像データとすると共に、フレームメモリ４３に格納されている画像データを元フレームの画像データとして、参照ブロックについてのＳＡＤ値を求めるようにする。ＳＡＤ値は、例えば輝度信号成分Ｙを用いて求めるのは前述の第１の実施形態と同様である。輝度信号成分のみでなく、色差信号成分をも含めて、ＳＡＤ値を求めてももちろんよい。
【０２４６】
このように、この第２の実施形態では、データ変換部１４からのストリーム画像データを参照フレームの画像データとする。このため、ある入力画素に対して、この画素を要素とする参照ブロックが、参照フレーム上に同時に複数存在することになる。図３４は、そのことを説明するための図である。
【０２４７】
すなわち、参照フレーム１０２上のサーチ範囲１０５における入力画素Ｄｉｎは、例えば、参照ベクトル１０７１が対応する参照ブロック１０６１の左側に位置する画素であると共に、参照ベクトル１０７２が対応する参照ブロック１０６２の右上に位置する画素となっていることが、この図３４から分かる。
【０２４８】
したがって、入力画素Ｄｉｎが参照ブロック１０６１に属するとした場合には、ターゲットブロック１０３の画素Ｄ１を読み出して、その差分を算出する必要がある。また、入力画素Ｄｉｎが参照ブロック１０６２に属するとした場合には、ターゲットブロック１０３の画素Ｄ２を読み出して、その差分を算出する必要がある。
【０２４９】
図３４および後述の図３５では簡単のため、２つの参照ブロックのみを図示しているが、実際上は、入力画素Ｄｉｎを、その参照ブロック内の画素とする参照ブロックは多数となる。
【０２５０】
この第２の実施形態の場合のＳＡＤ演算は、入力画素Ｄｉｎの輝度値Yと、各々の参照ブロック内の入力画素Ｄｉｎの位置に対応した、ターゲットブロック内の画素の輝度値Ｙとの差分絶対値を算出し、その算出した差分絶対値を、それぞれの参照ブロックに対応した参照ベクトルに従って、ＳＡＤテーブルに加算してゆくようにして行なう。
【０２５１】
例えば、入力画素Ｄｉｎが参照ブロック１０６１に属するとした場合における、ターゲットブロック１０３の画素Ｄ１と入力画素Ｄｉｎとの差分絶対値は、図３５に示すように、ＳＡＤテーブル１０８の参照ベクトル１０７１が対応するＳＡＤテーブル要素１０９２のＳＡＤ値に加算して書き込むようにする。また、入力画素Ｄｉｎが参照ブロック１０６２に属するとした場合における、ターゲットブロック１０３の画素Ｄ２と入力画素Ｄｉｎとの差分絶対値は、図３５に示すように、ＳＡＤテーブル１０８の参照ベクトル１０７２が対応するＳＡＤテーブル要素１０９２のＳＡＤ値に加算して書き込むようにする。
【０２５２】
したがって、サーチ範囲内の全ての領域の入力画素が入力されて処理が終了したときには、ＳＡＤテーブルが完成することになる。つまり、リアルタイムでＳＡＤテーブルが作成されるものである。
【０２５３】
データ変換部１４からのデジタル撮像信号の最初の１フレームは、フレームメモリ４３に格納されるのみで、動きベクトル検出部１５ではＳＡＤ値を求める等の演算処理は、行われない。
【０２５４】
そして、最初の１フレームがフレームメモリ４１に格納されると、次の、フレームのデジタル撮像信号からは、動きベクトル検出部１５は、参照ブロックについてのＳＡＤ値の演算を開始する。この場合、動きベクトル検出部１５は、図３４および図３５を用いて説明したように、データ変換部１４からの画像データと、当該画像データと比較すべき画像が含まれると考えられるすべての参照ブロックの画像データを、システムバス２を介してフレームメモリ４３から読み出して、それぞれについてのＳＡＤ値を求め、求めたＳＡＤ値を、それぞれの参照ブロックに対応するＳＡＤテーブルアドレスのＳＡＤ値に加算するようにする。
【０２５５】
そして、この実施形態では、動きベクトル検出部１５は、例えば図２１に示したような１フレームにおける複数個のサーチ範囲のそれぞれにおけるＳＡＤテーブルを作成して、そのＳＡＤテーブルにおけるＳＡＤ値の最小値を求めて、各サーチ範囲についての動きベクトル（サーチ範囲毎動きベクトル）をそれぞれ求める。
【０２５６】
そして、動きベクトル検出部１５は、１フレームにおける複数個のサーチ範囲のすべてのサーチ範囲毎動きベクトルから、過去の動きベクトルに対する推移関係をも考慮して、１フレームについての動きベクトルであるグローバル動きベクトルを検出する。そして、動きベクトル検出部１５は、その検出結果であるグローバル動きベクトルを、その後段の解像度変換部１６に制御信号として伝達する。
【０２５７】
解像度変換部１６は、動きベクトル検出部１５から受け取ったグローバル動きベクトルにしたがって、フレームメモリ４３に格納されている遅延フレームの画像データを切り出しながら、必要な解像度および画像サイズに変換する処理をする。このフレームメモリ４３からのグローバル動きベクトルにしたがった切り出しにより、変換後の画像は、手ぶれが除去された画像となる。
【０２５８】
図３５の説明は、従来手法に、リアルタイムＳＡＤ算出処理を適用した場合である。この第２の実施形態においては、図３５において、ＳＡＤテーブル１０８の参照ベクトル１０７１または１０７２が対応するＳＡＤテーブル要素１０９１または１０９２のＳＡＤ値として、算出した差分絶対値のそれぞれを、加算して書き込むのではなく、前述した第１の実施形態のように、参照ベクトル１０７１，１０７２を縮小倍率１／ｎで縮小した参照縮小ベクトルを算出し、その参照縮小ベクトルの近傍の複数の参照ベクトルに、前記算出した差分絶対値から、それぞれを分散加算するための分散加算値を求め、求めた分散加算値を、前記近傍の複数の参照ベクトルに対応するＳＡＤ値に加算するようにするものである。
【０２５９】
ＳＡＤテーブル（縮小ＳＡＤテーブル）が完成した後の正確な動きベクトルを検出するための処理は、この第２の実施形態においても、前述した第１の実施形態で述べた手法と全く同様にして、２次曲面や、水平方向および垂直方向の３次曲線を用いた手法を用いることができる。
【０２６０】
［第２の実施形態における動きベクトル検出部１５の構成例］
上述のようにして、撮像画像のデータについて、１フレーム内で、複数個のサーチ範囲を設定し、リアルタイムでそれぞれのサーチ範囲における動きベクトルを検出しようとする場合、動きベクトル検出部１５の入力撮像画像データは、撮像素子１１から、主走査方向を水平方向とし、副走査方向を垂直方向として読み出されたラスタースキャン方式の画像データであるので、すべてのサーチ範囲の各々に対して、ＳＡＤ演算処理部とＳＡＤテーブルメモリとを１対１に対応して設けるようにするのが通常である。
【０２６１】
しかし、そのような構成では、回路規模が大きくなるとともに、ＳＡＤテーブルメモリのサイズは、サーチ範囲に対応する一つ一つのＳＡＤテーブルメモリサイズは、小さいが、全体としては、１フレーム分となるので、やはり、非常に大きなものとなる。したがって、処理の高速化のために、当該ＳＡＤテーブルメモリを、高価なＳＲＡＭで構成することは、前述したように、民生用としては非現実的であり、実現が困難である。
【０２６２】
この第２の実施形態では、ターゲットブロックやサーチ範囲の設定を工夫することにより、複数のサーチ範囲に対してＳＡＤ演算処理部およびＳＡＤテーブルメモリを、できるだけ、共用化することができるようにして、回路規模の縮小化およびコストの低廉化を可能にするものである。
【０２６３】
図３６および図３７は、この第２の実施形態における回路規模の縮小化およびコストの低廉化を説明するための図である。この例においては、図３６（Ａ）、（Ｂ）に示すように、参照フレーム１０２における複数個のサーチ範囲１０５のそれぞれが、画像領域として互いに重ならないように設定する。
【０２６４】
元フレーム１０１のターゲットブロック１０３の大きさは、検出すべき動きベクトルの大きさに応じたものとして、各サーチ範囲１０５内のものとして設定される。なお、この明細書の以下の説明では、ターゲットブロック１０３の大きさの枠１０３ＦＬを、検波枠と称することとする。
【０２６５】
検波枠１０３ＦＬの大きさは、サーチ範囲１０５を超えることはできない。そして、検波枠１０３ＦＬの大きさが、あまりに小さい場合には、動きベクトルの検出精度の点で問題となる。
【０２６６】
また、ターゲットブロックに対応する参照ブロックがサーチ範囲１０５内において移動できる量が、検出対象となる動きベクトルの大きさに対応するので、検出対象となる動きベクトルの大きさが大きい場合には、検波枠１０３ＦＬの大きさは小さくなり、逆に、検出対象となる動きベクトルの大きさが小さい場合には、検波枠１０３ＦＬの大きさは大きくすることができる。
【０２６７】
以上のことを考慮して、検出対象の動きベクトルの大きさを考慮しながら、検波枠１０３ＦＬおよびサーチ範囲１０５のサイズや、フレーム内に設定するそれらの数を決定する。
【０２６８】
図３６に示す例においては、図３６（Ａ）に示すように、ターゲットブロック１０３、すなわち、検波枠１０３ＦＬを水平方向に４個、垂直方向にも４個設けるようにしており、このため、水平方向にサーチ範囲１０５を４個、垂直方向にサーチ範囲１０５を４個の合計１６個のサーチ範囲１０５を設定するようにする。
【０２６９】
ここで、図３６における１フレーム当たりの検波枠１０３ＦＬの数は一例であり、この例で重要なのは、サーチ範囲１０５が互いに重ならないように設定することである。
【０２７０】
この例は、隣り合うターゲットブロック間の距離が、検出すべき動きベクトルの大きさに応じたものとなってしまうので、所定の大きさ以上の検波枠１０３ＦＬを得ることを考えると、検出すべき動きベクトルの大きさが小さいときに好適な例である。
【０２７１】
複数のデジタルスチルカメラやデジタルビデオカメラによる多人数評価の結果、倍率１０倍の光学ズームを用いることを前提として、手ぶれを計測した場合、動画では、６０ｆｐｓのレートで、約±２％の比較的小さい手ぶれが観測された。この％で表した手ぶれの数値は、図３６（Ａ）に示すように、全フレーム枠の水平方向を１００％、垂直方向を１００％としたときの、手ぶれ補正ベクトルの範囲を表した値である。なお、この明細書では、後述するターゲットブロック１０３の大きさやサーチ範囲１０５の大きさも、同様にして、％数値で表すものとする。
【０２７２】
また、光学ズーム倍率が低い、もしくは光学ズームが存在しないカメラの場合、静止画の場合であっても、考慮しなければならない手ぶれの数値は、上記と同程度である。さらには、この実施形態の動きベクトル検出部１５では、予め光学式手ぶれ補正で大まかな補正を行った後の撮像画像データから動きベクトルを求めるものであり、例えば光学ズーム倍率が１０倍を想定した場合であっても、この実施形態の動きベクトル検出部１５において検出しなければならない動きベクトルの大きさは、上記と同程度でよい。したがって、この第２の実施形態は、この発明において非常に有効である。
【０２７３】
図３６の例では、サーチ範囲１０５が、水平方向に４個、垂直方向に４個であるので、サーチ範囲１０５の大きさを、（水平方向のサイズ（％）、垂直方向のサイズ（％））で表したとき、図３７（Ａ）、（Ｂ）に示すように、サーチ範囲１０５の最大値は（２５％、２５％）となる。このときの動きベクトルの検出範囲は、図３７（Ｂ）に示すように、サーチ範囲と同様の表し方をしたときには、最大（±１２．５％、±１２．５％）となる。
【０２７４】
そして、検波枠１０３ＦＬの大きさは、図３７（Ａ）に示すように、同様の表現形式で示すと（０〜２５％、０〜２５％）となって、最大（２５％、２５％）となる。
【０２７５】
この例においては、サーチ範囲１０５は、上記の条件の範囲内で、適切な値にされると共に、動きベクトルの検出範囲および検波枠の大きさも、適切な値に選定される。例えば、サーチ範囲は、最大値（２５％、２５％）とされると共に、動きベクトルの検出範囲として、（±２．５％、±２．５％）が想定され、検波枠１０３ＦＬは（２０％、２０％）とされる。
【０２７６】
図３６の例に示したように、参照フレーム１０２上において、すべてのサーチ範囲１０５が互いに重ならないようにした場合は、ＳＡＤ演算処理部（以下、ＳＡＤ演算処理エンジンと称する）を、すべてのサーチ範囲１０５の処理において共用して、１個とすることができる。
【０２７７】
しかし、撮像画像データがラスタースキャン方式の画像データであるので、主走査方向である水平方向の走査期間において、４つのサーチ範囲についてＳＡＤ演算処理を行う必要があり、そのため、当該水平方向のサーチ範囲の数分、この例では４個のＳＡＤテーブルメモリを設ける必要がある。
【０２７８】
そして、ＳＡＤ演算処理エンジンは、図３６（Ｂ）に示すように、ＳＡＤ演算処理をしようとする撮像画像データが、水平方向の４個のサーチ範囲に対応する水平方向の４個の領域Ｘａ，Ｘｂ，Ｘｃ，Ｘｄのいずれに含まれるものであるかを認識して、その認識結果に応じて、それら４個のＳＡＤテーブルメモリを切り替えて使用するようにする。
【０２７９】
垂直方向の複数個のサーチ範囲に関しては、水平方向の４個の領域Ｘａ，Ｘｂ，Ｘｃ，Ｘｄに対応して設けられる４個のＳＡＤテーブルメモリを共用することができる。すなわち、この第２の実施形態では、ＳＡＤテーブルメモリに、一つのサーチ範囲についてのＳＡＤテーブル情報が格納されると、ＳＡＤ演算処理エンジンにより、後述するようにして、サーチ範囲毎動きベクトルが検出され、その検出結果のサーチ範囲毎動きベクトルの情報が他の記憶部に転送される。
【０２８０】
こうして、一つのサーチ範囲についてのＳＡＤ演算処理が終了した後には、当該ＳＡＤテーブルメモリの記憶内容は削除可能となる。したがって、処理対象のサーチ範囲が垂直方向に変わったときには、対応する水平方向領域のＳＡＤテーブルメモリを利用することができる。
【０２８１】
図３８は、この第２の実施形態における動きベクトル検出部１５の詳細構成例を示すものである。
【０２８２】
すなわち、図３８に示すように、この例における動きベクトル検出部１５は、入力バッファ１５１と、１個のＳＡＤ演算処理エンジン１５２と、例えばＳＲＡＭからなる４個のＳＡＤテーブルメモリ１５３ａ，１５３ｂ，１５３ｃ，１５３ｄと、例えばＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）からなる１フレーム分の動きベクトル記憶用の動きベクトル記憶部１５４と、グローバル動きベクトル算出部１５５とを備えて構成されている。
【０２８３】
この例では、ＳＡＤテーブルメモリ１５３ａは水平方向の領域Ｘａ用、ＳＡＤテーブルメモリ１５３ｂは水平方向の領域Ｘｂ用、ＳＡＤテーブルメモリ１５３ｃは水平方向の領域Ｘｃ用、ＳＡＤテーブルメモリ１５３ｄは水平方向の領域Ｘｄ用、としてそれぞれ用いられるものである。
【０２８４】
４個のＳＡＤテーブルメモリ１５３ａ，１５３ｂ，１５３ｃ，１５３ｄは、ＳＡＤ演算処理エンジン１５２に接続されると共に、バス１５０に接続されている。バス１５０には、動きベクトル記憶部１５４とグローバル動きベクトル算出部１５５とが、さらに接続されている。
【０２８５】
そして、データ変換部１４からの撮像画像データＤｉｎが、入力バッファ１５１を通じて直接的に動きベクトル検出部１５のＳＡＤ演算処理エンジン１５２に供給されると共に、画像メモリ部４を構成するフレームメモリ４３に供給されて、１フレーム分遅延された後、ＳＡＤ演算処理エンジン１５２に供給される。
【０２８６】
なお、検波枠１０３ＦＬ（ターゲットブロック）の全ての画素データを、フレームメモリ４３に記憶すると大量のメモリ容量が必要となるため、画素データとしては、例えばｎ個（ｎは１以上の整数）おきの画素などの代表点のみをフレームメモリ４３に記憶し、ＳＡＤ演算も、この代表点に関してのみ行って、演算量自体を削減するようにする。
【０２８７】
ＳＡＤ演算処理エンジン１５２は、入力撮像画像データＤｉｎが、水平方向の４個の領域Ｘａ，Ｘｂ，Ｘｃ，Ｘｄのいずれに属するかにより、当該入力撮像画像データＤｉｎのＳＡＤ演算処理に用いるＳＡＤテーブルとして、４個のＳＡＤテーブルメモリ１５３ａ，１５３ｂ，１５３ｃ，１５３ｄのうちのいずれを使用するかを決定する。
【０２８８】
そして、ＳＡＤ演算処理エンジン１５２は、各サーチ範囲について、後述するようなＳＡＤ演算処理を行って、各サーチ範囲に対応するＳＡＤテーブルメモリに、ＳＡＤテーブルの情報を格納する。
【０２８９】
そして、ＳＡＤ演算処理エンジン１５２は、それぞれのサーチ範囲についてのＳＡＤテーブルの生成を完了したら、そのＳＡＤテーブルからＳＡＤ値の最小値を求め、そのＳＡＤ値の最小値から、サーチ範囲毎動きベクトルを検出する。さらに、ＳＡＤ演算処理エンジン１５２は、検出したサーチ範囲毎動きベクトルを動きベクトル記憶部１５４に転送し、その後、当該動きベクトルの検出処理が終了したサーチ範囲用として用いていたＳＡＤテーブルメモリをクリアして、次のサーチ範囲用のＳＡＤテーブルメモリとして使用する準備を行う。
【０２９０】
１フレーム分のすべての撮像画像データについて、ＳＡＤ演算処理エンジン１５２での処理が終了すると、動きベクトル記憶部１５４には、当該１フレームにおける複数個のターゲットブロック（検波枠）のすべてについての動きベクトルの情報が格納される。
【０２９１】
グローバル動きベクトル算出部１５５は、動きベクトル記憶部１５４に格納された１フレームについての複数個の動きベクトルを、当該動きベクトル記憶部１５４に格納されている過去の動きベクトルからの推移をも参酌しながら、当該フレームについてのグローバル動きベクトルを検出する。そして、グローバル動きベクトル算出部１５５は、算出したグローバル動きベクトルの情報を、解像度変換部１６に供給するようにする。
【０２９２】
上述した第２の実施形態における動きベクトル検出部１５も、ハードウエアにより構成することができるし、また、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）を用いて構成することもできる。さらには、ＣＰＵ１によりソフトウエア処理とすることもできる。
【０２９３】
［第２の実施形態における動きベクトル検出部１５の処理動作例］
動きベクトル検出部１５のＳＡＤ演算処理エンジン１５２における動きベクトルの検出処理動作の例の流れを、図３９および図４０のフローチャートを参照して、以下に説明する。なお、この図３９および図４０のフローチャートの処理は、説明の便宜上、１フレームの撮像画像データについての処理として示している。
【０２９４】
先ず、ＳＡＤ演算処理エンジン１５２では、入力画像のフレーム（参照フレーム）の任意の位置（ｘ，ｙ）の画素データＤｉｎ（ｘ，ｙ）を受け取る（ステップＳ２０１）。次に、当該入力画像データＤｉｎ（ｘ，ｙ）の、フレーム上の画素の位置（ｘ，ｙ）を識別する（ステップＳ２０２）。
【０２９５】
そして、認識した画素位置から、フレーム上のいずれのサーチ範囲の画素データであるかを判別し、その判別結果に基づいて、ＳＡＤテーブルメモリ１５３ａ，１５３ｂ，１５３ｃ，１５３ｄのうちの一つのＳＡＤテーブルメモリを、ＳＡＤテーブル値の格納用メモリとして選択決定する（ステップＳ２０３）。
【０２９６】
次に、ＳＡＤ演算処理エンジン１５２は、当該入力撮像画像データの画素の位置（ｘ，ｙ）を含む複数の参照ブロックの一つに対応する参照ベクトル（ｖｘ，ｖｙ）を設定する（ステップＳ２０４）。
【０２９７】
前述したように、（ｖｘ，ｖｙ）は、ターゲットブロックのフレーム上の位置（サーチ範囲の中心位置である）を基準位置（０，０）としたときに、指定された参照ベクトルにより示される位置を示し、ｖｘは指定された参照ベクトルによる、基準位置からの水平方向のずれ量成分であり、また、ｖｙは指定された参照ベクトルによる、基準位置からの垂直方向成分のずれ量成分である。そして、前述の従来例で述べたのと同様に、ずれ量ｖｘ、ｖｙは、画素を単位とした値とされている。
【０２９８】
ここで、サーチ範囲の中心位置を前記基準位置（０，０）とし、サーチ範囲を、水平方向には±Ｒｘ、垂直方向には±Ｒｙとしたとき、
−Ｒｘ≦ｖｘ≦＋Ｒｘ、−Ｒｙ≦ｖｙ≦＋Ｒｙ
とされるものである。
【０２９９】
次に、設定された参照ベクトル（ｖｘ，ｖｙ）の参照ブロックＩｉの当該画素値Ｉｉ（ｘ，ｙ）と、これに対応するターゲットブロックＩｏ内の画素値Ｉｏ（ｘ−ｖｘ，ｙ−ｖｙ）との差分の絶対値αを算出する（ステップＳ２０５）。すなわち、差分絶対値αは、
α＝｜Ｉｏ（ｘ−ｖｘ，ｙ−ｖｙ）−Ｉｉ（ｘ，ｙ）｜    ・・・（式３）
として算出される。
【０３００】
次に、縮小倍率を１／ｎとして、参照ベクトル（ｖｘ，ｖｙ）を１／ｎに縮小した参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）を算出する（ステップＳ２０６）。
【０３０１】
次いで、参照縮小ベクトル（ｖｘ／ｎ，ｖｙ／ｎ）の近傍の複数の参照ベクトル、この例では、上述したように４個の近傍参照ベクトルを検知する（ステップＳ２０７）。そして、検知した４個の近傍参照ベクトルのそれぞれに対応するテーブル要素として分散加算すべき値（差分絶対値）を、前述したように、参照縮小ベクトルと近傍参照ベクトルとがそれぞれ示す位置の関係に基いて、ステップＳ２０５で求めた差分絶対値αから、線形加重分散値として求める（ステップＳ２０８）。
【０３０２】
そして、求めた４個の線形加重分散値を、ステップＳ２０３で選択されたＳＡＤテーブルメモリのＳＡＤテーブルにおいて、近傍参照ベクトルのそれぞれに対応するＳＡＤテーブル要素値に加算する（ステップＳ２０９）。
【０３０３】
次に、入力画素Ｄｉｎ（ｘ，ｙ）を含む参照ブロックの全てについての上記ステップＳ２０４〜ステップＳ２０８の演算を行なったか否か判別し（ステップＳ２１０）、当該入力画素Ｄｉｎ（ｘ，ｙ）を含む他の参照ブロックがあると判別したときには、ステップＳ１０４に戻り、当該入力画素Ｄｉｎを含む他の参照ブロック（ｖｘ，ｖｙ）を設定し、このステップＳ２０４〜ステップＳ２０９の処理を繰り返す。
【０３０４】
また、ステップＳ２１０で、入力画素Ｄｉｎ（ｘ，ｙ）を含む参照ブロックの全てについての上記ステップＳ２０４〜ステップＳ２０９の演算を行なったと判別したときには、サーチ範囲内の全ての入力画素Ｄｉｎについて、上記の演算ステップの処理を終了したか否か判別し（図４０のステップＳ２２１）、終了していないと判別したときには、図３９のステップＳ２０１に戻り、次の入力画素Ｄｉｎを取り込み、このステップＳ２０１以降の処理を繰り返す。
【０３０５】
そして、ステップＳ２２１で、サーチ範囲内の全ての入力画素Ｄｉｎについて、上記の演算ステップの処理を終了したと判別すると、縮小ＳＡＤテーブルが完成したとして、当該完成した縮小ＳＡＤテーブルにおいて、最小値となっているＳＡＤ値を検出する（ステップＳ２２２）。
【０３０６】
次に、当該最小値となっているテーブル要素アドレス（ｍｘ，ｍｙ）のＳＡＤ値（最小値）と、その近傍の複数個、この例では、上述したように１５個の近傍テーブル要素のＳＡＤ値を用いて２次曲面を生成し（ステップＳ２２３）、その２次曲面の最小値のＳＡＤ値が対応する小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する（ステップＳ２２４）。この最小値ベクトル（ｐｘ，ｐｙ）は、小数精度の最小テーブル要素アドレスに対応している。
【０３０７】
そして、算出した小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）をｎ倍することにより、当該サーチ範囲について求めるべき動きベクトル（ｐｘ×ｎ，ｐｙ×ｎ）を算出する（ステップＳ２２５）。
【０３０８】
次に、算出したサーチ範囲毎動きベクトル（ｐｘ×ｎ，ｐｙ×ｎ）の情報を、動きベクトル記憶部１５４に転送し、その後、当該ＳＡＤ演算処理が終了したサーチ範囲についてのＳＡＤテーブルメモリの記憶内容をクリアして、後のサーチ範囲の処理用として使用可能な状態にする（ステップＳ２２６）。
【０３０９】
そして、次に、１フレーム内のすべてのサーチ範囲についての処理を終了したか否かを判別し（ステップＳ２２７）、１フレーム内に未処理のサーチ範囲があると判別したときには、図３９のステップＳ２０１に戻り、このステップＳ２０１以降の処理を繰り返す。また、ステップＳ２２７で、１フレーム内のすべてのサーチ範囲についての処理が終了したと判別したときには、この処理ルーチンを終了する。
【０３１０】
以上で、１フレーム内に設定された複数個のサーチ範囲におけるターゲットブロックに対するブロックマッチングによる動きベクトルの検出処理は終了となるが、実際の処理においては、図３９および図４０の処理が複数フレームに渡って繰り返されるものである。
【０３１１】
そして、前述したように、１フレームについての複数個のサーチ範囲毎動きベクトルの検出が終了すると、グローバル動きベクトル検出部１５５が動作を開始し、動きベクトル記憶部１５４に格納されているそれらの複数個のサーチ範囲毎動きベクトルおよびそれより過去の複数個のサーチ範囲毎動きベクトルを用いて、グローバル動きベクトルを検出する。
【０３１２】
なお、上述の例では、小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する方法としては、２次曲面を用いる方法を使用したが、前述した水平方向および垂直方向の３次曲線を用いる方法を用いても良いことは言うまでもない。
【０３１３】
なお、この例においても、小数精度の位置を示す最小値ベクトル（ｐｘ，ｐｙ）を算出する方法としては、前述した水平方向および垂直方向の３次曲線を用いる方法を用いても良いことは前述の例と同様である。
【０３１４】
また、前述の第１の実施形態の第３の例と同様にして、この第２の実施形態においても、サーチ範囲を絞りながら、かつ、必要に応じて縮小倍率を変更しながら、２段階以上、縮小ＳＡＤテーブルを用いた動きベクトル検出処理を繰り返すようにしても、勿論良い。
【０３１５】
この第２の実施形態のメリットは、フレームメモリを、第１の実施形態に比べて１枚分削減できることと、フレームメモリに入力画像を格納する時間を短縮できること、動きベクトル検出部１５の構成を簡略化することができて、回路規模の縮小化およびコストの低廉化が図れることである。
【０３１６】
メモリ削減の効果は言うまでもないが、処理時間の短縮も、近年、重要視されて来ている。特に動画を扱う場合、そのままシステム遅延の短縮に繋がるため、システム遅延が原因で生じる、実際の被写体とパネル表示画像の間に生じる違和感をなるべく無くすことは、ユーザへの訴求効果が高い。
【０３１７】
［この発明による撮像画像の歪み補正装置第３の実施形態］
上述の第１および第２の実施形態においては、動きベクトル検出部１５では、光学的手ぶれ補正によって補正しきれずに残留する動きベクトルを検出することができるサーチ範囲を、光学的手ぶれ補正の性能を考慮して、固定的に設定するようにした。
【０３１８】
このため、光学的手ぶれ補正によって補正しきれずに残留する動きベクトルの最大値と、光学的手ぶれ補正におけるフィードバック遅延、ジャイロセンサ７自身の手ぶれ動きベクトルの検出誤差とを考慮すると共に、所定のマージンを考慮して、比較的大きいサーチ範囲を設定する必要がある。
【０３１９】
この第３の実施形態は、この問題を改善したものである。この第３の実施形態は、上述した第１の実施形態および第２の実施形態のいずれにも適用可能であるが、ここでは、第２の実施形態に適用した場合について説明する。
【０３２０】
図４１は、この第３の実施形態が適用された撮像装置の一例のブロック図を示すもので、前述の図３３に示した第２の実施形態が適用された撮像装置と同一部分には、同一符号を付してある。
【０３２１】
この第３の実施形態においても、ＣＰＵ１は、ジャイロセンサ７の検出出力から、発生した手ぶれに応じた動きベクトル（手ぶれベクトル）を検出し、検出した動きベクトルから光学的手ぶれ補正信号ＣＴＬを生成する。そして、この第３の実施形態では、特に、ＣＰＵ１は、ジャイロセンサ７の検出出力から検出した動きベクトルの情報Ｖｅｃを動きベクトル検出部１５に供給するようにする。
【０３２２】
この第３の実施形態における動きベクトル検出部１５では、動きベクトルの検出時のサーチ範囲を、上述した第１および第２の実施形態のように固定的に設定するのではなく、ＣＰＵ１から供給されてくる動きベクトルの情報Ｖｅｃを参照して、動的に決定するようにする。
【０３２３】
前述したように、サーチ範囲の設定に当たっては、ジャイロセンサ７で検出された手ぶれ動きベクトルの大きさと、アクチュエータ８による光学的手ぶれ補正機構におけるフィードバック遅延を考慮する必要がある。
【０３２４】
すなわち、前記フィードバック遅延により、撮像素子１１から読み出された撮像画像データが得られる時点でのジャイロセンサ７の検出出力である手ぶれ動きベクトルが、光学的手ぶれ補正信号を生成する源となる手ぶれ動きベクトルとが異なっている恐れがあり、その手ぶれ動きベクトルの異なり分は、動きベクトル検出部１５で検出される動きベクトルに含まれるからである。
【０３２５】
つまり、光学的手ぶれ補正は、前記フィードバック遅延の存在のために、当該補正時点で実際に生じている手ぶれベクトルに応じて行われるのではなく、当該補正時点よりもフィードバック遅延時間分前の手ぶれベクトルに応じて行われ、その遅延時間の間における手ぶれベクトルの異なり分に応じた画像歪みが、撮像素子１１からの画像データに残留することになる。
【０３２６】
前記フィードバック遅延は、一般に固定的な時間量であり、測定可能あるいは所定の遅延時間として見込むことができる。そこで、動きベクトル検出部１５で、動きベクトルを検出しようとしている画像データが撮像素子１１から得られた時点（現時点）Ｔ１と、それよりもフィードバック遅延時間分前の時点Ｔ２のときの、両時点におけるジャイロセンサ７の検出出力から検出された手ぶれベクトルの大きさが分かれば、その差分としてフィードバック遅延による前記手ぶれ動きベクトルの異なりは検知することができる。
【０３２７】
そして、当該フィードバック遅延による前記手ぶれ動きベクトルの異なりと、現時点におけるジャイロセンサ７の検出出力に基づく手ぶれ動きベクトルの大きさとが検知できれば、必要なサーチ範囲の大きさを適切に設定することが可能になる。
【０３２８】
この第３の実施形態の動きベクトル検出部１５では、上述の点に基づいて、ＣＰＵ１からの手ぶれ動きベクトルの情報Ｖｅｃを参照して、フィードバック遅延による前記手ぶれ動きベクトルの異なりと、現時点におけるジャイロセンサ７の検出出力に基づく手ぶれ動きベクトルの大きさとを検知し、それに基づいて、サーチ範囲を設定するようにする。
【０３２９】
このように、第３の実施形態では、動きベクトル検出部１５においては、ＣＰＵ１からの手ぶれ動きベクトルの情報Ｖｅｃを参照することにより、撮像画像データからの動きベクトルの検出時のサーチ範囲を必要最小限に設定することができる。このため、この第３の実施形態によれば、ＳＡＤテーブルの規模を、より小さくすることができると共に、高精度の手ぶれベクトルを検出することができて、高精度の手ぶれ補正ができるようになる。
【０３３０】
次に、この第３の実施形態における動きベクトル検出部１５の処理動作例のフローチャートを図４２および図４３に示す。
【０３３１】
すなわち、この第３の実施形態における動きベクトル検出部１５においては、ＳＡＤ演算処理エンジン１５２は、まず、ＣＰＵ１からの手ぶれ動きベクトルの情報Ｖｅｃを参照して、フィードバック遅延による前記手ぶれ動きベクトルの異なりと、現時点におけるジャイロセンサ７の検出出力に基づく手ぶれ動きベクトルの大きさとを検知する。そして、検知したフィードバック遅延による前記手ぶれ動きベクトルの異なりと、現時点におけるジャイロセンサ７の検出出力に基づく手ぶれ動きベクトルの大きさと、ジャイロセンサ７の精度および所定のマージンなどを考慮して、サーチ範囲を決定する（ステップＳ３０１）。
【０３３２】
このステップＳ３０１の後は、前述した第２の実施形態における動きベクトル検出部１５の処理動作例として示した図３９および図４０のフローチャートに示したステップＳ２０１〜ステップＳ２１０およびステップＳ２２１〜ステップＳ２２７の処理を実行する。
【０３３３】
そして、この例では、ステップＳ２２７で、１フレーム内に未処理のサーチ範囲があると判別したときには、図４２のステップＳ３０１に戻り、再度、ＣＰＵ１からの手ぶれ動きベクトルＶｅｃを参照して、前述したようにして、サーチ範囲を設定する。そして、ステップＳ２０１〜ステップＳ２１０およびステップＳ２２１〜ステップＳ２２７の処理を繰り返す。
【０３３４】
ステップＳ２２７で、１フレーム内のすべてのサーチ範囲についての処理が終了したと判別したときには、この処理ルーチンを終了する。
【０３３５】
なお、この例では、サーチ範囲毎に、ＣＰＵ１からの動きベクトルの情報Ｖｅｃを参照してサーチ範囲を設定するようにしたが、サーチ範囲は１フレーム単位で設定するようにしてももちろんよい。その場合には、図４３のステップＳ２２７で、１フレーム内に未処理のサーチ範囲があると判別したときには、図４２のステップＳ２０１に戻るようにする。
【０３３６】
［この発明による撮像画像の歪み補正装置第４の実施形態］
上述の実施形態では、光学的手ぶれ補正により補正し切れなかった手ぶれ等による画像歪みを、撮像素子からの画像データから動きベクトルを動きベクトル検出部１５により検出し、検出した動きベクトルを用いて除去するようにした。したがって、上述の実施形態の場合、動きベクトルの検出のために、少なくとも２フレームの画像データを必要としており、フレームメモリが必須であった。
【０３３７】
第４の実施形態は、上述の動きベクトル検出部１５を用いることなく、光学的手ぶれ補正により補正し切れずに残留する画像歪み分を軽減することができるようにしたもので、特に、１フレーム内の画像データのみを用いて、前記画像歪み分を軽減するようにするものである。
【０３３８】
図４４は、この第４の実施形態の場合における撮像装置の構成例のブロック図であり、前述の実施形態における撮像装置の構成例と同一部分には、同一符号を付してその詳細な説明は省略するものとする。
【０３３９】
この第４の実施形態においては、図４４に示すように、動きベクトル検出部１５に代えて、画像ぼけ補正処理部１９を設け、データ変換部１４からの輝度信号成分および色信号成分からなる画像データが、この画像ぼけ補正処理部１９に供給される。この第４の実施形態では画像メモリ部４は不要である。ただし、画像ぼけ補正処理部１９は、画像ぼけを補正するための画像バッファ（図示を省略）を備えるものである。
【０３４０】
この画像ぼけ補正処理部１９においては、データ変換部１４からの画像データによる画像が、上述した光学的手ぶれ補正により補正し切れずに残留する画像歪み分を含むときに、当該残留する手ぶれ分（画像の動きぼけ）を、それが無い、つまり、画像の動きぼけが補正された画像が得られる画像データに変換する処理を行う。
【０３４１】
この画像ぼけ補正処理部１９における補正処理は、例えば特開２００１−２５０１１９号公報および特開２００５−３２８１１７号公報などに詳細に示されているので、ここではその詳細な説明は省略する。
【０３４２】
この第４の実施形態では、この画像ぼけ補正処理部１９には、ＣＰＵ１でジャイロセンサ７の検出出力に基づいて生成された手ぶれ動きベクトルの情報Ｖｅｃが供給される。画像ぼけ補正処理部１９では、この実施形態においては、この手ぶれ動きベクトルの情報Ｖｅｃを参照して、例えば、所定の大きさ以上の手ぶれ動きベクトルが存在しているときには、画像ぼけ補正処理を行い、そのような手ぶれ動きベクトルが存在していないときには、画像ぼけ処理を行わずに、そのまま解像度変換部１６に撮像画像データを供給するようにする。
【０３４３】
なお、画像ぼけ補正処理部１９における画像ぼけ補正処理においては、手ぶれ動きベクトルの情報Ｖｅｃを参照して、最新の手ぶれ動きベクトルと、前述した光学的手ぶれ補正におけるフィードバック遅延時間分前の手ぶれ動きベクトルとの差分を考慮した画像ぼけ補正処理を行うようにしても勿論よい。
【０３４４】
図４５に、この第４の実施形態における画像ぼけ補正処理部１９の処理動作例のフローチャートを示す。この例は、ＣＰＵ１からの手ぶれ動きベクトルの情報Ｖｅｃを参照して、所定の大きさ以上の手ぶれ動きベクトルが存在しているときには、画像ぼけ補正処理を行い、そのような手ぶれ動きベクトルが存在していないときには、画像ぼけ処理を行わずに、そのまま解像度変換部１６に撮像画像データを供給するようにする例である。
【０３４５】
すなわち、図４５の例においては、画像ぼけ補正処理部１９においては、まず、ＣＰＵ１からの手ぶれ動きベクトルの情報Ｖｅｃを参照する（ステップＳ４０１）。そして、その参照結果により、所定の大きさ以上の手ぶれが生じているか否か判別する（ステップＳ４０２）。ここで、所定の大きさとは、手ぶれとみなせるような動きベクトルの大きさの意味であり、手ぶれが生じたとみなせないような微小な動きベクトルのときには、画像ぼけ処理を行わずに、処理の軽減を図るためである。
【０３４６】
このステップＳ４０２で、所定の大きさ以上の手ぶれが生じていると判別したときには、撮像画像データについて画像ぼけ補正処理を実行するようにする（ステップＳ４０３）。そして、画像ぼけ補正処理後の画像データを、解像度変換部１６に出力するようにする（ステップＳ４０４）。
【０３４７】
また、ステップＳ４０２で、所定の大きさ以上の手ぶれが生じていないと判別したときには、画像ぼけ補正処理を行わずに、画像データを解像度変換部１６に出力するようにする（ステップＳ４０４）。
【０３４８】
この第４の実施形態によれば、画像メモリ部４を設けなくて良いため、撮像装置の構成をより簡略化することができると共に、コストダウンに寄与する。
【０３４９】
［その他の実施形態および変形例］
なお、上述の実施形態の説明は、撮像装置を操作するユーザにより生起される手ぶれによる画像歪みを補正する場合であったが、ユーザにより生起される手ぶれのみではなく、撮影時に、撮像素子に対して、その撮像画像の水平方向および／または垂直方向の位置的変化を生じるように加わった振動などの偏倚力に起因して生じる画像歪みをも補正することができることは言うまでもない。
【０３５０】
また、この発明は、撮像装置（カメラ）にのみ適用されるものではなく、例えば携帯電話端末、情報携帯端末などに撮像素子が取付けられて、画像を撮影する場合にも適用できるものである。さらに、ユーザが手で持って撮影を行なう装置にのみに適用されるものではなく、パーソナルコンピュータやテレビ電話装置などの固定的に設置される装置に対して外力が加わって振動等が生じる場合、また、自動車などに撮像素子が取付けられて、画像を撮影する場合にも適用可能である。
【０３５１】
また、上述の第１〜第３の実施形態の説明では、動きベクトル検出部１５における参照ベクトルの縮小倍率は水平方向と垂直方向とで同一としたが、水平方向と、垂直方向とで、参照ベクトルの縮小倍率を異ならせるようにしても良い。
【０３５２】
また、上述の第１〜第３の実施形態においては、参照ブロックおよびターゲットブロック内の全ての画素についてＳＡＤ値を求めるようにしてもよいが、上述の実施形態のように、例えばｋ個（ｋは自然数）おきの画素のみを用いてＳＡＤ値を求めるようにするとよい。
【０３５３】
また、第２の実施形態として説明したリアルタイム処理の動きベクトル検出部１５では、演算コストと処理時間削減を目的として、ターゲットブロック内の代表点のみを参照ブロック内でサーチする、ＳＡＤ演算がしばしば行われているが、この発明においても、元フレームを格納するフレームメモリには、フレーム画像内におけるそれぞれのブロックの代表点のみを格納することにより、大幅なメモリ削減が図れる。また、フレームメモリとは別に、小規模な代表点メモリをローカルで持ち、グローバルメモリ（ＤＲＡＭ）の帯域削減を図っても良い。
【０３５４】
また、上述の第１〜第３の実施形態では、画素の差分値およびＳＡＤ値は、画素の輝度値Ｙのみを用いて演算するものとしたが、動きベクトル検出のために、輝度値Ｙだけでなく、色差成分Ｃｂ／Ｃｒを用いてもよい。また、データ変換部１４で輝度値Ｙおよび色差成分Ｃｂ／Ｃｒに変換される前のＲＡＷデータを対象として、動きベクトル検出処理を行ってもよい。
【０３５５】
なお、上述の説明では、ＳＡＤ演算処理は、参照ベクトルを縮小してＳＡＤ演算処理を行う新規な方法を用いる場合について説明したが、図４７〜図５０を用いて説明した従来のＳＡＤ演算処理を用いることができることは言うまでもない。
【図面の簡単な説明】
【０３５６】
【図１】この発明による撮像画像の歪み補正方法の第１の実施形態が適用された撮像措置の構成例を示すブロック図である。
【図２】この発明の実施形態における動きベクトルを検出する処理の概要を説明するための図である。
【図３】この発明の実施形態における動きベクトルを検出する処理の概要を説明するための図である。
【図４】この発明の実施形態における動きベクトルを検出する処理の概要を説明するための図である。
【図５】この発明の実施形態における動きベクトルを検出する方法において、正確な動きベクトルを検出するための処理の第１の例を説明するための図である。
【図６】この発明の実施形態における動きベクトルを検出する方法において、正確な動きベクトルを検出するための処理の第１の例を説明するための図である。
【図７】この発明の実施形態における動きベクトルを検出する処理の概要を説明するための図である。
【図８】この発明の実施形態における動きベクトルを検出する処理の概要を説明するための図である。
【図９】この発明の実施形態における動きベクトルを検出する方法において、正確な動きベクトルを検出するための処理の第１の例を説明するための図である。
【図１０】この発明の実施形態における動きベクトルを検出する方法において、正確な動きベクトルを検出するための処理の第１の例を説明するための図である。
【図１１】この発明の実施形態における動きベクトルを検出する方法において、正確な動きベクトルを検出するための処理の第１の例を説明するための図である。
【図１２】この発明の実施形態における動きベクトルを検出する方法において、正確な動きベクトルを検出するための処理の第１の例を説明するための図である。
【図１３】この発明の実施形態における動きベクトルを検出する方法において、正確な動きベクトルを検出するための処理の第１の例を説明するための図である。
【図１４】この発明の実施形態における動きベクトルを検出する方法において、正確な動きベクトルを検出するための処理の第１の例を説明するための図である。
【図１５】この発明の実施形態における動きベクトルを検出する方法において、正確な動きベクトルを検出するための処理の第１の例を説明するための図である。
【図１６】この発明の実施形態における動きベクトルを検出する方法において、正確な動きベクトルを検出するための処理の第２の例を説明するための図である。
【図１７】この発明の実施形態における動きベクトルを検出する方法において、正確な動きベクトルを検出するための処理の第２の例を説明するための図である。
【図１８】この発明の実施形態における動きベクトルを検出する方法において、正確な動きベクトルを検出するための処理の第２の例を説明するための図である。
【図１９】この発明の実施形態における動きベクトルを検出する方法において、正確な動きベクトルを検出するための処理の第２の例を説明するための図である。
【図２０】この発明の実施形態における動きベクトルを検出する方法の処理性能を説明するための図である。
【図２１】この発明の実施形態における動きベクトルを検出する方法の実施形態の概要を説明するための図である。
【図２２】この発明の実施形態における動きベクトルを検出する方法の特徴を、従来の手法と比較して説明するために用いる図である。
【図２３】この発明の実施形態における動きベクトルを検出する方法の特徴を、従来の手法と比較して説明するために用いる図である。
【図２４】この発明の実施形態における動きベクトルを検出する方法の特徴を、従来の手法と比較して説明するために用いる図である。
【図２５】この発明による撮像装置の第１の実施形態における動きベクトル検出処理の第１の例を説明するためのフローチャートの一部を示す図である。
【図２６】この発明による撮像装置の第１の実施形態における動きベクトル検出処理の第１の例を説明するためのフローチャートの一部を示す図である。
【図２７】この発明による撮像装置の第１の実施形態における動きベクトル検出処理の第２の例を説明するためのフローチャートの一部を示す図である。
【図２８】この発明による撮像装置の第１の実施形態における動きベクトル検出処理の第２の例を説明するためのフローチャートの一部を示す図である。
【図２９】この発明による撮像装置の第１の実施形態における動きベクトル検出処理の第２の例を説明するためのフローチャートの一部を示す図である。
【図３０】この発明による撮像装置の第１の実施形態における動きベクトル検出処理の第３の例を説明するためのフローチャートの一部を示す図である。
【図３１】この発明による撮像装置の第１の実施形態における動きベクトル検出処理の第３の例を説明するためのフローチャートの一部を示す図である。
【図３２】この発明による撮像装置の第１の実施形態における動きベクトル検出処理の第３の例を説明するためのフローチャートの一部を示す図である。
【図３３】この発明による撮像画像の歪み補正方法の第２の実施形態が適用された撮像装置の構成例を示すブロック図である。
【図３４】第２の実施形態の撮像装置における動きベクトル検出処理を説明するための図である。
【図３５】第２の実施形態の撮像装置における動きベクトル検出処理を説明するための図である。
【図３６】第２の実施形態の撮像装置における動きベクトル検出処理の要部を説明するための図である。
【図３７】第２の実施形態の撮像装置における動きベクトル検出処理の要部を説明するための図である。
【図３８】第２の実施形態の撮像装置の動きベクトル検出部１５における要部の構成例を示すブロック図である。
【図３９】第２の実施形態の撮像装置における動きベクトル検出処理の例を説明するためのフローチャートの一部を示す図である。
【図４０】第２の実施形態の撮像装置における動きベクトル検出処理の例を説明するためのフローチャートの一部を示す図である。
【図４１】この発明による撮像画像の歪み補正方法の第３の実施形態が適用された撮像装置の構成例を示すブロック図である。
【図４２】第３の実施形態の撮像装置における動きベクトル検出処理の例を説明するためのフローチャートの一部を示す図である。
【図４３】第３の実施形態の撮像装置における動きベクトル検出処理の例を説明するためのフローチャートの一部を示す図である。
【図４４】この発明による撮像画像の歪み補正方法の第３の実施形態が適用された撮像装置の構成例を示すブロック図である。
【図４５】第４の実施形態の撮像装置における画像ぼけ補正処理部の処理動作例を説明するためのフローチャートを示す図である。
【図４６】撮像画像のフレーム間手ぶれを説明するために用いる図である。
【図４７】ブロックマッチングにより動きベクトルを検出する処理を説明するための図である。
【図４８】ブロックマッチングにより動きベクトルを検出する処理を説明するための図である。
【図４９】ブロックマッチングにより動きベクトルを検出する処理を説明するためのフローチャートを示す図である。
【図５０】ブロックマッチングにより動きベクトルを検出する処理を説明するための図である。
【符号の説明】
【０３５７】
１０１…元フレーム、１０２…参照フレーム、１０３…ターゲットブロック、１０５…サーチ範囲、１０６…参照ブロック、１０７…参照ベクトル、１５…動きベクトル検出部、１６…歪み補正解像度変換部、１９…画像ぼけ補正処理部、４１〜４３…フレームメモリ、ＴＢＬｓ…縮小ＳＡＤテーブル、ＴＢＬｏ…従来のＳＡＤテーブル、ＲＶ…参照ベクトル、ＣＶ…参照縮小ベクトル、ＮＶ１〜ＮＶ４…近傍参照ベクトル
【図１】
2007215114.tif 000003
【図２】
2007215114.tif 000004
【図３】
2007215114.tif 000005
【図４】
2007215114.tif 000006
【図５】
2007215114.tif 000007
【図６】
2007215114.tif 000008
【図７】
2007215114.tif 000009
【図８】
2007215114.tif 000010
【図９】
2007215114.tif 000011
【図１０】
2007215114.tif 000012
【図１１】
2007215114.tif 000013
【図１２】
2007215114.tif 000014
【図１３】
2007215114.tif 000015
【図１４】
2007215114.tif 000016
【図１５】
2007215114.tif 000017
【図１６】
2007215114.tif 000018
【図１７】
2007215114.tif 000019
【図１８】
2007215114.tif 000020
【図１９】
2007215114.tif 000021
【図２０】
2007215114.tif 000022
【図２１】
2007215114.tif 000023
【図２２】
2007215114.tif 000024
【図２３】
2007215114.tif 000025
【図２４】
2007215114.tif 000026
【図２５】
2007215114.tif 000027
【図２６】
2007215114.tif 000028
【図２７】
2007215114.tif 000029
【図２８】
2007215114.tif 000030
【図２９】
2007215114.tif 000031
【図３０】
2007215114.tif 000032
【図３１】
2007215114.tif 000033
【図３２】
2007215114.tif 000034
【図３３】
2007215114.tif 000035
【図３４】
2007215114.tif 000036
【図３５】
2007215114.tif 000037
【図３６】
2007215114.tif 000038
【図３７】
2007215114.tif 000039
【図３８】
2007215114.tif 000040
【図３９】
2007215114.tif 000041
【図４０】
2007215114.tif 000042
【図４１】
2007215114.tif 000043
【図４２】
2007215114.tif 000044
【図４３】
2007215114.tif 000045
【図４４】
2007215114.tif 000046
【図４５】
2007215114.tif 000047
【図４６】
2007215114.tif 000048
【図４７】
2007215114.tif 000049
【図４８】
2007215114.tif 000050
【図４９】
2007215114.tif 000051
【図５０】
2007215114.tif 000052