以下に、本発明の実施の形態について図面を参照して説明する。図5は、本発明を適用した画像処理装置の一実施の形態の構成を示す図である。画像処理装置10の撮像素子11は、例えば、X−Yアドレス型の固体撮像素子(CMOSなど)により構成される。撮像素子11により撮像された被写体の画像のデータは、AFE(Analog Front End)12に供給される。
AFE12は、供給された画像データをデジタル信号の画像データに変換し、信号処理部13に供給する。信号処理部13は、供給された画像データから、輝度信号と色差信号を算出し、その算出したそれぞれの信号を、画像補間部14に供給する。
画像補間部14に供給される画像データは、撮像素子11により撮像された被写体の画像のデータであるが、撮像素子11により撮像された画像の全てのデータが、画像補間部14に供給されるわけではなく、TG(Timing Generator)15からのタイミングに従って読み出されたデータのみが、画像補間部14に供給される。
画像補間部14に供給されたデータは、一旦、メモリコントローラ16の制御の基、メモリ17に供給される。逆にメモリ17に記憶されたデータは、メモリコントローラ16の指示により読み出され、画像補間部14に供給される。画像補間部14は、供給されたデータに対して、手ぶれの補正を行うための補間処理など(詳細は後述する)を施し、図示されていない記録媒体に出力し、記録させたり、図示されていないディスプレイなどに出力し、表示させたりする。
なお、ここでは、画像処理装置10に加えられる振動として、ユーザの手ぶれを例に挙げて説明するが、手ぶれ以外の振動であっても、本発明を適用することはできる。
画像補間部14、TG15、およびメモリコントローラ16は、手ぶれ検出部18により検出された手ぶれ量に応じ、手ぶれ補正量算出部19により算出された手ぶれ補正量に基づいた制御を行う。
手ぶれ検出部18は、例えば、角速度センサなどのセンサを用いた方法や、画像処理等によるセンサレスの手ぶれ検出の方法などが用いられ、撮影中に画像処理装置10に加えられた手ぶれを検出する。例えば、手ぶれ検出部18が、角速度センサにより構成されていた場合、その角速度センサは、ピッチング方向、ヨーイング方向、それぞれの方向に加えられた角速度のデータを手ぶれ補正量算出部19に供給する。
その検出された手ぶれ量に基づき、手ぶれ補正量算出部19は、手ぶれに伴う動きを補正するための手ぶれ補正量のデータを算出する。すなわち、手ぶれ補正量算出部19は、供給されたデータを用いて、何ピクセル移動させれば加えられた手ぶれによる影響を低減できるかという補正量を、1ライン毎に算出する。
ここで、1ライン毎にというのは、図1と図2を参照して説明したように、CMOSなどの個体撮像素子においては、1ライン単位で画像データが順次読み出される。そのため、1ライン毎に手ぶれ補正量が算出される。
1ライン毎に手ぶれ補正量を算出する必要があるが、手ぶれ量のデータが取得されるタイミングは、手ぶれ検出部18のサンプリング周波数に依存し、必ずしも、1ライン毎に手ぶれ補正量を算出するだけの手ぶれ量のデータが供給されるとは限らない。
手ぶれ検出部18のサンプリング周波数が、撮像素子11により撮像された画像の1ライン毎のデータの読み出しの周波数と異なる場合、1ライン毎の手ぶれ補正量を求めるには、手ぶれ検出部18のサンプリング間における手ぶれ補正量のデータ、すなわち、手ぶれ検出部18からの手ぶれ量のデータに基づいた算出を行えないときの手ぶれ補正量のデータを、何らかの方法により補間する必要がある。
また、手ぶれ検出部18のサンプリング周波数が、撮像素子11により撮像された画像の1ライン毎のデータの読み出しの周波数と同じだが、位相が異なる場合、1ライン毎の手ぶれ補正量を求めるには、手ぶれ検出部18のサンプリング間における手ぶれ補正量のデータを補間する必要がある。
手ぶれ補正量のデータの補間について説明するが、ここでは、手ぶれ検出(手ぶれ量のデータが、手ぶれ検出部18から手ぶれ補正量算出部19に供給されるタイミング)が、100本のラインが読み出される間に3点の場合を例に挙げて説明する。図6に示すように、ここでは説明の都合上、ライン1’、ライン50’、およびライン100’のときに、手ぶれ検出部18からの手ぶれ量が取得できるとして説明する。このライン1’は、説明上の基準となるラインであり、撮像された画像を構成するライン内の1本のラインとして説明する。
図6に示した状態は、ライン1’を読み出す際の手ぶれ量は、P1ピクセルであり、ライン50’を読み出す際の手ぶれ量は、P2ピクセルであり、ライン100’を読み出す際の手ぶれ量は、P3ピクセルであることを示している。
この手ぶれ量とは、手ぶれ検出部18から出力され、手ぶれ補正量算出部19に入力された情報を、手ぶれ補正量算出部19がピクセル単位の値に変換した値である。なお、手ぶれ補正量算出部19が変換した後のピクセル単位の手ぶれ量は、小数点以下を含むピクセル単位とされ、その後の処理において1ピクセル以下の量での補正を可能としている。
手ぶれ量P1乃至P3は、所定のタイミングに取得された手ぶれ量を基準としたときの差分である。所定のタイミングとは、画像の撮像が開始された直後である。図6に示した状態では、基準から、ライン1’のときに右側の手ぶれが発生し、その後ライン50’まで右側の手ぶれが発生し、そして、ライン100’までは、左側の手ぶれが発生した状況である。
例えば、被写体として静止している四角形を撮像したときに、図6に示したような手ぶれ量が取得される手ぶれが、画像処理装置10に加えられると、そのまま、補正をしなければ、図7に示したような画像が撮像されたこと(ユーザに提供されること)になる。このような歪んだ画像を補正し、四角形が四角形の画像として最終的にユーザに提供されるように手ぶれに関する補正が行われる。
本実施の形態においては、CMOSなどのX−Yアドレス型の個体撮像素子を撮像素子11(図5)として用いる場合を例に挙げて説明しているが、仮に、CCDなどの電荷転送型の個体撮像素子を、撮像素子11として用いた場合、手ぶれによる画像のブレを補正する方式としては、ライン毎の手ぶれを画面内で単一の値で代用することにより本発明のシステムを適用することは可能である(1画像内では、同一の値が用いられることにより行われる)。
ライン毎の手ぶれ量を補正するためには、ライン毎の手ぶれ量を取得する必要がある。しかしながら、図6を再度参照して説明するに、図6に示した例では、ライン1’、ライン50’、および、ライン100’のラインのときの手ぶれ量しか取得されない。このような離散的なデータしか取得できないのは、手ぶれ検出部18が手ぶれを検出するタイミング(サンプリング周波数)に依存しているからである。このような場合には、ライン2’乃至49’と、ライン51’乃至99’に関する手ぶれ量は取得されないため、それらのライン毎の手ぶれ量を補間して処理を実行する必要がある。
手ぶれ補正量算出部19が行う補間の処理(手ぶれ補正量の算出の処理)に関し、図8のフローチャートを参照して説明する。ステップS11において、手ぶれ補正量算出部19は、手ぶれ検出部18から検出された手ぶれ量のデータ(手ぶれ量を算出するための手ぶれ情報)を取得する。
手ぶれ補正量算出部19は、上述したように、ライン1’乃至100’の間に、3つの手ぶれ量を取得する。この3つの手ぶれ量から、ライン2’乃至99’(ライン50’を除く)に関する手ぶれ量を、ステップS12において算出する。その算出の仕方であるが、図9A乃至図9Cを参照して説明する。図9Aに示したように、例えば、ライン1’に関する手ぶれ量を、ライン2’乃至40’にも用い、ライン50’に関する手ぶれ量を、ライン41’乃至60’にも用い、ライン100’に関する手ぶれ量を、ライン61’乃至99’にも用いるというように、1つのラインに関する手ぶれ量を、前後のラインに適用するといった方法で、補間を行うようにしても良い。
また、図9Bに示すように、1次関数を用いて算出するようにしても良い。図9Bに示した例では、ライン1’とライン50’に関するそれぞれの手ぶれ量を2点とする1次関数から、ライン2’乃至49’に関する手ぶれ量が、それぞれ算出され、ライン50’とライン100’に関するそれぞれの手ぶれ量を2点とする1次関数からライン51’乃至99’に関する手ぶれ量が、それぞれ算出される。
さらに、図9Cに示すように、1次関数ではない他の関数を用いて算出されるようにしても良い。図9Cに示した例は、基本的に図9Bに示した例と同様であるが、1次関数ではない他の関数を用いる点が異なる。通常、手ぶれは、同一方向に、同一の速度で、同一の大きさで変化するものではないと考えられる。従って、直線的に変化する1次関数を用いて補間するのでは、誤差が発生する可能性があり、より適切に精度良く補間(補正)を行うことを考えると、図9Cに示したような曲線的に変化する関数を用いた方が良い。
図9A乃至図9Cの内のどの方法を用いて補正量を算出するかは手ぶれ補正量算出部19の処理能力に依存する。手ぶれ補正量算出部19がマイクロコンピュータなどで構成される場合、そのマイクロコンピュータの処理能力に合わせて、図9A乃至図9Cに示した内の1つの方法で、補正量が算出(補間)されるようにすればよい。
具体的には、手ぶれ補正量算出部19の処理能力が低い場合、演算量が少ない図9Aに示した方法で、補正量の算出(補間)が行なわれるようにし、手ぶれ補正量算出部19の処理能力が比較的高い場合、演算量が比較的多い図9Cに示した方法で、補正量の算出(補間)が行なわれるようにすればよい。
このように、離散的な手ぶれ量から、ライン毎の手ぶれ量が求められると、ステップS13において、手ぶれ補正量の算出が行われる。手ぶれ補正量とは、手ぶれ量を、手ぶれのない状態(手ぶれの影響を低減された状態)にするために、どれだけの補正を行えば良いのかを表すピクセル単位の値である。
例えば、図6に示したように、ライン1’に関する手ぶれ量が、P1ピクセルであった場合、その手ぶれ量がP1ピクセルである状態を、手ぶれのない状態にするためには、絶対値が異なり、符号の異なる量、すなわちこの場合、―P1ピクセルが補正量として算出されるようにすれば良い。
図10A乃至図10Cは、手ぶれ補正量算出部19により算出された手ぶれ補正量をグラフとして示した図である。図10Aは、手ぶれ補正量算出部19が、図9Aを参照して説明した方式により手ぶれ量を補間したときに算出される手ぶれ補正量を示している。図10Bは、手ぶれ補正量算出部19が、図9Bを参照して説明した方式により手ぶれ量を補間したときに算出される手ぶれ補正量を示している。図10Cは、手ぶれ補正量算出部19が、図9Cを参照して説明した方式により手ぶれ量を補間したときに算出される手ぶれ補正量を示している。
このように、手ぶれ補正量が算出されると、ステップS14(図6)において、読み出し位置の決定が行われる。読み出し位置が決定されると、その位置に位置する画素が、2画素である場合、新たな画素を補間する処理がステップS15で行われる。このステップS14の読み出し位置の決定の処理と、ステップS15の画素の補間について説明する。なお、説明の都合上、ステップS14の処理とステップS15の処理をまとめて以下に説明するが、ステップS14までの処理は、手ぶれ補正量算出部19(図5)で行われ、ステップS15の処理は、画像補間部14で行われる。
図11の左側の図は、手ぶれ補正量算出部19により算出された水平方向の手ぶれ補正量をグラフ化した図であり、図11の右側の図は、四角形の被写体を撮像したときに加えられた手ぶれを補正しなかった場合に撮像される画像Aの一例を示す図であり、図11の中央の図は、右側の図に示した画像の内の部分aを拡大したときの図である。
画像A内の部分aは、ライン20’乃至29’の10本のラインを含む。そのうち、読み出すべき画素bは、ライン23’上に位置する。算出された手ぶれ補正量は、1ライン毎に算出されているが、その1ライン毎の補正量、すなわち、何ピクセル分、読み出す位置をずらすかのデータに基づき、それぞれのラインの読み出し開始位置が決定される。
その読み出し開始位置を線で結ぶと、図11の中央の図に示したような読み出し開始ラインbが作成される。図11の中央の図に示した読み出し開始ラインbは、直線的に図示しているが、直線的になるとは限らず、所定のラインが、他のラインよりも、その読み出し開始位置がずれているようなこともある。また、この読み出し開始ラインbは、説明のために図示した線であり、手ぶれ補正量算出部19による処理の結果として生成されるライン、又は、処理を実行する上で必要となるラインではない。
図12に示すように、読み出し開始ラインbから読み出しを開始すると、図12の下側に示した図のように、四角形の1辺の一部分を構成する部分aの画像が、歪みがない画像に補正されたことがわかる。
本実施の形態においては、1ピクセル以下の補正も可能とするため、水平方向又は垂直方向の、どちらか一方に着目した場合、読み出すべき画素bが、1つの画素上に位置するときと、2つの画素上に位置するときとが考えられる。まず、水平方向に着目した場合について説明する。図13Aに示した例は、画素bが1つの画素上に位置する場合を示している。図13Aに示したような場合には、画素bの画素データとして、画素G3の画素データが読み出される。
図13Bに示した例は、画素bが2つの画素上に位置する場合を示している。図13Bに示した例では、画素bは、画素G2と画素G3上にまたがって位置している。このような場合には、隣接する複数の画素から画素bのデータが作成され、その作成されたデータが、画素bの画素データとして読み出される。
図13Bに示した例を参照し、隣接する複数の画素から画素bのデータを生成する場合を説明する。まず、画素bが画素G2と画素G3とにまたがっている場合、画素G2と画素G3の画素データのみを用いて画素bの画素データを生成する。このようにした場合、画素bが画素G2と画素G3にまたがっているそれぞれの割合を乗算することにより画素bの画素データを生成する。
例えば、画素G2の画素データをデータD2とし、画素G3の画素データをデータD3とし、画素bが画素G2にかかる割合をKb(0<Kb<1)とすると、以下の式に基づき算出される。
画素bの画素データ=D2×Kb+D3×(1−Kb)
このような単に、画素bがかかっている画素のデータと、そのかかっている割合を乗算することにより、読み出す画素bの画素データを生成するようにしても良いし、画素bがかかっていない画素のデータも含めて画素bの画素データを生成するようにしても良い。
例えば、図13Bに示した例においては、画素G1乃至画素G4を用いて画素bの画素データを生成するようにする。このようにした場合、画素G2にかかっている画素bの割合から一意に導き出される係数(K1乃至K4とする)を、画素G1乃至G4のそれぞれの画素データ(D1乃至D4とする)に乗算し、その乗算された値を加算する。すなわち、以下の式に基づき算出される。
画素bのデータ=D1×K1+D2×K2+D3×K3+D4×K4
これらの係数K1乃至K4は、画素G2にかかっている画素bの割合(すなわち、手ぶれ補正量が小数点以下のピクセルを含む場合、その小数点以下の数値(例えば、手ぶれ補正量が1.5ピクセルと算出されたときには、0.5))と関連付けられたテーブルとして、画像補間部14または手ぶれ補正量算出部19に記憶され、その記憶されているテーブルから係数が読み出されるようにしても良い。
このように複数の画素から、画素bの画素データを生成する方が、より精度良く手ぶれの補正を行うことが可能となる。なお、画素bが、1つの画素上に位置しているような場合でも、隣接する複数の画素データから画素データが、上述したようにして生成されるようにしても良い。
このようにして、水平方向の読み出し位置と、その読み出される画素データを必要に応じて補間(生成)するといった処理が行われる。次に、垂直方向の読み出し位置と、その読み出される画素を必要に応じて補間(生成)するといった処理について説明する。垂直方向に関しても、上述した水平方向の処理と基本的に同様な処理である。
図14の左側の図は、手ぶれ補正量算出部19により算出された垂直方向の手ぶれ補正量をグラフ化した図である。図14の右側の図は、四角形の被写体を撮像したときに、上方向に加えられた手ぶれによる影響を補正しなかった場合に撮像される画像Aの一例を示す図であり、四角形が伸長されてしまっている状態を示している。図14の中央の図は、右側の図に示した画像の内の部分aを拡大したときの図である。
画像A内の部分aは、ライン20’乃至26’の7本のラインを含む。そのうち、読み出すべき画素bは、ライン23’上に位置する。図14の中央に示した図では、手ぶれがない状態で撮像されたときに位置すべきライン(以下、適宜、本来のラインと記述する)に符号を割り振り、説明の都合上、各ライン間に隙間を設けて図示してある。図14に示した例では、本来のラインと、撮像された画像のラインとが一致していないために、ラインの隙間に画像が存在してしまっている状態を示している。
上述した水平方向の手ぶれの補正では、1ライン内での読み出しの開始位置を変化させることにより補正が行なわれるようにしたが、垂直方向の手ぶれの補正では、ライン自身を選択することにより補正が行われるようにする。換言すれば、垂直方向の手ぶれの補正は、何ピクセルだけ、上または下に撮像されたラインを移動させれば、本来の手ぶれのない状態で撮像された画像になるかを補正量として算出し、その補正量に基づいて読み出しを行うことにより行われる。
水平方向の補正の場合と同様に、垂直方向の補正においても、読み出すべき画素bが、図15Aに示すように1つの画素(ライン)上に位置するときと、図15Bに示すように複数の画素(ライン)上に位置するときとが考えられる。複数の画素上に画素bが位置するときの画素bの画素データの生成の仕方は、図13Bを参照して説明した水平方向の補正の場合と同様に、係数を用いて算出するなどの仕方により行うことが可能であるので、ここでは、その説明を省略する。
このような補間(補正)が行われると、図16の左側の図のように、本来のライン上に、撮像された画像のラインがのる。その結果、図16の右側の図のように、この場合、四角形の一辺を構成する部分が、本来のライン上に位置するように撮像された画像になる。このように、垂直方向に関しても、撮像時に手ぶれが加えられたような画像であっても、手ぶれの影響を低減させた画像を、ユーザに提供することが可能となる。
このように、本実施の形態においては、水平方向と垂直方向の補正(図8のステップS14とステップS15の処理)が、それぞれ行われる。
ところで、上述した実施の形態においては、ステップS12において手ぶれ量の補間を行い、ステップS13において手ぶれ補正量を算出するようにした。すなわち、手ぶれ検出部18から取得される離散的なデータを、補間してライン毎の手ぶれ量を生成した後に、ライン毎の補正量を算出するようにした。
しかしながら、図17に示すフローチャートに従って、手ぶれによる影響の補正が行われるようにしても良い。ステップS21において、手ぶれ検出部18から手ぶれ量が取得されると、ステップS22において、その取得された手ぶれ量に対しての手ぶれ補正量が、手ぶれ補正量算出部19により算出される。そして、ステップS23において、その算出された手ぶれ補正量を用いて、ライン毎に手ぶれ補正量が用意されるように、手ぶれ補正量の補間(生成)の処理が行われる。
すなわちこの場合、手ぶれ検出部18から取得される離散的なデータから、離散的な手ぶれ補正量を算出し、その手ぶれ補正量を補間してライン毎の手ぶれ補正量が用意されるようにした。このように、手ぶれ補正量を算出した後に、その手ぶれ補正量を補間するようにしても、上述したような、手ぶれ量を補間した後に、その補間された手ぶれ量を用いて手ぶれ補正量の算出を行う場合と同等の効果をえることが可能である。
ステップS24以下の処理は、上述したステップS14以下の処理と同様の処理なので、その説明は省略する。また、ステップS22やステップS23における処理も、基本的な処理、例えば、手ぶれ補正量を算出する際、1次関数を用いて算出する、曲線的な関数を用いて算出するなどは、図8のフローチャートの説明をするうえで説明したことと同様に行うことが可能であるので、その説明は省略する。
上述したように、手ぶれ補正量算出部19においては、手ぶれ補正量が算出されるわけだが、その手ぶれ補正量は、図5に示したように、画像補間部14、TG15、およびメモリコントローラ16に供給される。この各部で行う手ぶれ補正量に基づく画素の読み出しについて説明する。図18Aに示すように、ここでは、画素G1の所定の位置が、読み出し開始位置R0として設定された場合を例に挙げて説明する。
このような場合、まず、TG15により、撮像素子11からAFE12に供給される画素データの読み出しが制御される。TG15による画素データの読み出しの制御は、整数倍でのピクセル単位で行われる。そのため、その読み出しは、図18Bに示すように読み出し開始位置R1から開始される。この読み出し開始位置R1は、この場合、画素G1の先頭の位置になっているため、AFE12以降の各部には、図18Cに示すように、画素G1以降の画素データのみが供給される。
すなわち、TG15の制御により、おおまかな手ぶれの補正が行われことになる。
次に画像補間部14とメモリコントローラ16により、1ピクセルに満たない小数点以下の補正が行われる。まず、画像補間部14を介し、メモリコントローラ16による制御により、メモリ17には、図18Cに示した画素データが順次記憶される。メモリコントローラ16は、そのメモリ17に記憶された画素データを必要に応じ読み出し、画像補間部14に供給する。
このメモリコントローラ16による読み出しと、画像補間部14における処理について説明するに、この場合、図18Dの上段に示した図のように、画素G1の途中の位置にある読み出し開始位置R2から画素データの読み出しが行われるわけだが、画素の途中から読み出すことはできないため、読み出しではなく、図18Dの下段に示したように画素G1’、画素G2’、…、といった画素データが生成(補間)され、出力されるといった処理が行われる。
この補間の処理は、図13や図15を参照して既に説明したが、係数などを画素データに乗算するといった処理により行われる。水平方向および垂直方向に関し、それぞれ画素の生成(画素の補間)といた処理が行われる。このような処理により、こまかな手ぶれの補正が行われる。このような処理が行われるためには、画素データを記憶するためのメモリ17が必要であり、また、そのメモリ17への書き込みと読み出しを制御するためのメモリコントローラ16が必要であるため、図5に示すような構成とされている。
なお、図5に示した構成例では、信号処理部13から出力される画素データ(画像データ)は、画像補間部14を介して、メモリコントローラ16の制御のもと、メモリ17に記憶されるようになっている。このような構成とすることにより、上述した画像補間部14による画素の補間といった処理が行われる前(信号処理部13からのデータをメモリコントローラ16に供給する際)に、画像の解像度の変換を行い、その解像度の変換が行われた画像に対して、手ぶれの補正といった処理が行われるようにすることが可能となる。
すなわち、画像補間部14においては、入力されたデータに対して解像度の変換といった処理を行うことも可能であるし、出力されるデータに対して画素の補間といった処理を行うことも可能である。このように、メモリ17に記憶される画素データ(画像データ)と、記憶された、それらのデータを、画像補間部14を介するようにすることにより、処理にバリエーションを持たせることができる。
上述した実施の形態においては、画像処理装置10がTG15を備えている場合を例に挙げて説明したが、TG15は、手ぶれ補正のための処理に関しては、必ずしも必要な部分ではなく、画像処理装置10がTG15を備えない構成であっても、本発明を適用することはできる。
画像処理装置10がTG15を備えていない場合、画像補間部14とメモリコントローラ16で上述した画素の補間(読み出しと生成)が行われるようにすればよい。手ぶれ補正量算出部19が算出した手ぶれ補正量による読み出し開始位置が、図18Aに示すような読み出し開始位置R0であった場合、TG15により行われた大まかな補正を行うことなく、図18Dに示すような画素データの生成が画素G1から開始されるようにすれば良い。換言すれば、画像補間部14とメモリコントローラ16により、大まかな補正と細かな補正を、一括して行うようにすればよい。
上述した実施の形態において、メモリ17の容量に関する説明はしていないが、メモリ17の容量は、例えば、1画像分のデータが記憶できる容量であればよい。しかしながら、以下に説明するように、手ぶれ補正量などを処理することにより、1画像分のデータを記憶できる容量以下であっても、処理を行うことが可能である。すなわち、メモリ17の容量が小さくても、上述した精度の良い手ぶれの補正を行うことが可能である。
まず、水平方向の手ぶれ補正を行う場合について説明する。図19に示すように、1フィールドまたは1フレーム内に、手ぶれ検出部18(図5)が、8回の手ぶれ情報を検出する画像処理装置10であるとして説明をする。露光期間を図19に示したように設定すると、ライン1の手ぶれ情報は、情報a1乃至情報a6までのデータから算出することができ、ここでは、そのように設定されているとする。
上述したように、本実施の形態においては、加えられた手ぶれを補正するための手ぶれ補正量は、所定のラインに関するデータを用いて補間(算出)することにより、ライン毎の手ぶれ補正量を用意するようにした。この手ぶれ量、または、手ぶれ補正量の補間の際には、図9Bを再度参照するに、例えば、ライン1’とライン50’の2つのラインの手ぶれ情報がなければ、その間のライン2’乃至49’の手ぶれ量、および、手ぶれ補正量を取得することはできない。
しかしながら、図18に示したように、ライン1(例えば、ライン1’)の手ぶれ情報として、情報a1乃至a6を用いるようにした場合、換言すれば、そのラインの露光期間内で取得することが可能な手ぶれ情報(この場合6個)を用いるようにした場合、次の情報a7が取得されるまで、次の手ぶれ量を算出することができない。この場合、情報a7が取得されるのは、ラインi(例えば、ライン50’)のときである。
従って、6個の手ぶれ情報を用いて手ぶれ量を算出するようにした場合、ライン1乃至iの間にあるライン2乃至(i−1)(例えば、ライン2’乃至49’)は、ラインiにおける情報a7が取得されるまで、補間処理が行えないことになる。すなわち、このような手ぶれ検出では、所定の位置のラインを読み出すときに、そのラインでの手ぶれ情報が取得されておらず、手ぶれ補正により画素データを読み出す位置を決めることができないことになる。このために、一旦、画像データをメモリ17に蓄えて、手ぶれ補正量を算出した後に、読み出し(および補間などの処理)を実行する必要がある。
しかしながら、ここで、ライン1の手ぶれ量を、情報a2乃至a5から算出するようにする。すなわち、露光期間に取得できる手ぶれ情報のうち、両端の情報を除き、中央に位置する4個の情報から手ぶれ量を算出するようにする。
このように、中央部分の情報(時間的に中央に位置する情報とその前後の情報)を用いて手ぶれ量を算出するようにすると、ライン1の露光期間が終了した時点で、ラインiに関する手ぶれ量を算出するときに必要とされる情報a3乃至a6までの情報が、既に検出(取得)されていることになる。従って、ライン1の時点で、ラインiに関する手ぶれ量を算出することができるので、ライン1の手ぶれ量とラインiの手ぶれ量とからライン2乃至ライン(i−1)に関する手ぶれ量を、ライン毎に、ライン1の時点で取得(算出)することができる。
よって、画像データを一旦メモリ17に、手ぶれ量を算出するために蓄えるようなことをしなくても、手ぶれ量および手ぶれ補正量を算出することができ、もって、メモリ17に画像データを記憶しなくても、水平方向に関しては、手ぶれ補正を行うことが可能となる。
仮に、ライン1の手ぶれ量を、中央部分の情報a3と情報a4を用いて算出するようにした場合、すなわち、中央部分の2つの情報だけでライン1の手ぶれ量を算出するようにした場合、ライン1の手ぶれ量を算出する時点で(1ライン目の露光期間が終了した時点で)、ラインiと、さらにその先のラインjの手ぶれ量まで算出することが可能となる。
このようにした場合、1ラインに関する手ぶれ量は、少ない情報から生成されることになるが、他のライン(例えば、ライン1に対しては、ラインiやラインj)の手ぶれ量をも用いて、すなわち、複数のラインの手ぶれ量を用いて、1ラインの手ぶれ量を補正するような処理を行うことにより、精度が高い手ぶれ量を算出するようにすることも可能であるし、その結果、より精度が高い手ぶれ補正量を算出するようにすることも可能である。
次に、垂直方向の手ぶれ補正を行う場合について説明する。垂直方向の手ぶれの補正に関しても、上述した水平方向の手ぶれの補正の場合と、基本的に同様であるので、差異のある部分について説明する。図19を再度参照して説明する。垂直方向に関しても、上述した水平方向の場合と同様に、1ライン目(ライン1)の手ぶれ量を算出するのに、例えば、情報a2乃至a5の情報から算出するようにすれば、1ライン目の露光期間が終了した時点で、ラインiの手ぶれ量を算出するのに必要な情報a3乃至a6が既に検出(取得)されていることになる。
このため、上述した水平方向の場合と同じく、1画面分の画像データを記憶する容量を備えるメモリ17を、画像処理装置10が備える必要はなく、メモリ17の容量は小さくても、本発明を適用した精度良い手ぶれの補正を行うことができる。
しかしながら、水平方向の手ぶれ補正と異なり、垂直方向の手ぶれ補正においては、図14や図15を参照して説明したように、複数のラインをまたがって処理を行う必要があるため、手ぶれ量と、画素を補間する際に必要となる画素数分(例えば、10ライン分)の画素(画像)データを記憶するだけの容量をもつメモリ17を、画像処理装置10は備える必要がある。
このように、画像処理装置10は、メモリ17を備える必要はあるが、その容量は、1画像を記憶できる容量以下で良く、メモリ17の容量の削減を行うことができる。従って、メモリ17の手ぶれ補正のための画像データの記憶のために必要な容量以外の容量を、他の処理のために使うことや、容量を削減することによりメモリ17にかかるコスト自体を低減させることが可能となる。
以上のように、手ぶれ検出部18(図5)において、短い期間に取得される情報で、手ぶれ量(手ぶれ補正量)の算出を行うと、メモリ17の容量の削減を行うことができる。上述した実施の形態においては、説明の簡略化のために、1フィールドまたは1フレーム内に8回の手ぶれ情報を検出するとしたが、本発明を適用するうえで、手ぶれの検出回数に制限はなく、如何なる回数であっても、本発明を適用することができる。
ところで、X−Yアドレス型の固体撮像素子を用いた撮像装置の撮像過程においては、各画素の画像情報は、露光期間が終了した直後に読み出される。上述したようにメモリ17の容量が削減できる方法を適用した場合、問題が生じることが考えられる。その問題とは、露光期間が短くなる(シャッタースピードが速くなる、換言すれば、手ぶれ検出間隔>露光時間の半分の関係が満たされる)と、画素情報を読み出すタイミングの時に、まだ、次の時刻の手ぶれ量が検出されていない状態になる場合があることである。
その問題について、図20を参照して説明する。領域1において、各ラインの露光中心は、手ぶれ検出に関する情報a4と情報a5の間に存在する。このとき、手ぶれ量は、情報a4と情報a5の情報から補間される必要があるが、領域1内の各ラインが読み出される時刻には、情報a5の手ぶれ検出はまだ行われていない状態である。そのために、領域1において、手ぶれ量を補間により求めることができない。
領域2において、各ラインの読み出し時刻が情報a5の検出時刻を超える。各ラインの露光中心が、手ぶれ検出に関する情報a4と情報a5の間に存在し、かつ、情報a4と情報a5の手ぶれが検出されているため、各ラインの手ぶれ量は、情報a4と情報a5の手ぶれ情報から補間で求めることが可能となる。
領域3において、各ラインの露光中心が情報a5の検出時刻を超え、手ぶれ検出情報a5と情報a6の間に存在する。このとき手ぶれ量は、情報a5と情報a6の情報から補間する必要があるが、領域3内の各ラインの読み出す時刻に、まだ情報a6の手ぶれ検出が行われていない。そのため、領域3では手ぶれ量を補間により求めることができない。
このように、(手ぶれ検出間隔)>(露光時間の半分)という条件が満たされるとき、手ぶれ量が補間できない領域が存在してしまうことが考えられる。
手ぶれ検出のサンプリング周波数を増加させることで、手ぶれ検出間隔を短くして前述した問題を避けることは可能だが、計算量や通信量の増加によりシステム負担が増大する。
そこで、システム負担を抑え、かつ、前述した問題を解決する方法として、手ぶれ量の予測を行うようにする。過去の手ぶれ情報から、次の時刻の手ぶれ量を予測するものである。例えば、図21に示すように、予測した手ぶれ量F1を算出するに、過去の手ぶれ量P1とP2を用い、その手ぶれ量P1とP2から線形的に直線1を取得し、その直線1の延長上の1点である手ぶれ量F1を算出する。
この方法は、一例に過ぎず、予測に用いる過去の手ぶれデータ数や、予測アルゴリズム等に制限はない。
上述した実施の形態においては、画面の上端または下端の近傍における手ぶれ量(手ぶれ補正量)の補間処理を実行する場合、時間的に前後のフィールドまたはフレームにおける手ぶれデータを利用して、補間のための演算を行うようにしても良い。そのようにした場合、より、精度高く手ぶれを補正するための補正量などを算出することができ、もって、より精度高く手ぶれを補正することが可能となる。
なお、上述した実施の形態においては、撮像される画像についての説明は特にしていないが、撮像される画像は、静止画像、動画像のどちらでも良い。すなわち、本発明は、静止画像を撮像するカメラなどにも適用できるし、動画像を撮像するカメラなどにも適用できる。
以上のように、本発明によると、検出される少ない手ぶれに関するデータから、補間により、画像を構成する1ライン毎の手ぶれを補正するためのデータを求めることが可能となる。また、1ピクセル以下の手ぶれ量を補正するために、画素データの補間を行うようにすることで、CMOSなどのX−Yアドレス型の固体撮像素子を用いたビデオカメラなどの画像処理装置における手ぶれによる画像の歪みを、ライン毎に、1ピクセル単位以下の精度で補正することができる。
さらに、本発明によると、撮像された画像の画像データを記憶するためのメモリ17の容量を、削減することが可能となる。勿論、本発明は、CMOSなどのX−Yアドレス型の固体撮像素子ではなく、CCDなどの電荷転送型の個体撮像素子を用いたビデオカメラなどに適用することも可能である。
上述した手ぶれを補正するための処理は、それぞれの機能を有するハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
記録媒体について説明するために、簡単に、記録媒体を扱うパーソナルコンピュータについて説明する。図22は、汎用のパーソナルコンピュータの内部構成例を示す図である。パーソナルコンピュータのCPU(Central Processing Unit)201は、ROM(Read Only Memory)202に記憶されているプログラムに従って各種の処理を実行する。RAM(Random Access Memory)203には、CPU201が各種の処理を実行する上において必要なデータやプログラムなどが適宜記憶される。入出力インタフェース205は、キーボードやマウスから構成される入力部206が接続され、入力部206に入力された信号をCPU201に出力する。また、入出力インタフェース205には、ディスプレイやスピーカなどから構成される出力部207も接続されている。
さらに、入出力インタフェース205には、ハードディスクなどから構成される記憶部208、および、インターネットなどのネットワークを介して他の装置とデータの授受を行う通信部209も接続されている。ドライブ210は、磁気ディスク231、光ディスク232、光磁気ディスク233、半導体メモリ234などの記録媒体からデータを読み出したり、データを書き込んだりするときに用いられる。
記録媒体は、図22に示すように、パーソナルコンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク231(フレキシブルディスクを含む)、光ディスク232(CD-ROM(Compact Disc-Read Only Memory),DVD(Digital Versatile Disc)を含む)、光磁気ディスク233(MD(Mini-Disc)(登録商標)を含む)、若しくは半導体メモリ234などよりなるパッケージメディアにより構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記憶されているROM202や記憶部208が含まれるハードディスクなどで構成される。
なお、本明細書において、媒体により提供されるプログラムを記述するステップは、記載された順序に従って、時系列的に行われる処理は勿論、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。